Salome HOME
Rename Engines::Component to Engines::EngineComponent
[samples/pyhello.git] / doc / index.doc
1 /*!
2
3 \mainpage Introduction to PYHELLO sample module
4
5 The purpose of the \b PYHELLO module is to describe briefly the different
6 steps in the development of a SALOME module in Python.
7
8 Contents:
9 - \subpage dev_steps
10 - \subpage tree_structure
11 - \subpage build_proc_files
12 - \subpage idl_dir
13 - \subpage src_dir
14 - \subpage bin_dir
15 - \subpage doc_dir
16 - \subpage build_procedure
17 - \subpage run_procedure
18 - \subpage load_module
19 - \subpage catalog_def
20 - \subpage load_lcc
21 - \subpage load_iapp
22
23 \ref dev_steps ">> Next"
24
25 \page dev_steps Steps in construction of the example module
26
27 The example module chosen to illustrate the process of SALOME module
28 development is extremely simple. The module contains a single
29 component and this component provides a single service called \b
30 makeBanner that accepts a character string as the sole argument and
31 that returns a character string obtained by the concatenation of a
32 'Hello' and the input string. The component also provides a simple
33 GUI.
34
35 The steps in the development are as follows:
36 - create a module tree structure
37 - create a SALOME component that can be loaded by a Python SALOME container
38 - configure the module so that the component is known to SALOME
39 - add a graphic GUI
40
41 \ref main "<< Previous"<br>\ref tree_structure ">> Next"
42
43 \page tree_structure Create the module tree structure
44
45 The first step in the development process is the creation of the
46 module tree file structure. The typical SALOME module usually includes
47 some set of the configuration files (used in the build procedure of a
48 module), Makefiles, IDL file that provides a definition of a CORBA
49 services implemented in a module and a set of source Python files
50 which implement the module CORBA engine and (optionally) its GUI.
51
52 The following file structure is typical for the SALOME module:
53
54 <pre>
55 + PYHELLO1_SRC
56    + build_configure
57    + configure.ac
58    + Makefile.am
59    + adm_local
60      + Makefile.am
61      + unix
62        + Makefile.am
63        + make_common_starter.am
64        + config_files
65          + Makefile.am
66          + check_PYHELLO.m4
67    + bin
68      + Makefile.am
69      + VERSION.in
70      + runAppli.in
71      + myrunSalome.py
72    + idl
73      + Makefile.am
74      + PYHELLO_Gen.idl
75    + src
76      + Makefile.am
77      + PYHELLO
78        + Makefile.am
79        + PYHELLO.py
80        + PYHELLO_utils.py
81      + PYHELLOGUI
82        + Makefile.am
83        + PYHELLOGUI.py
84        + PYHELLO_msg_en.ts
85        + PYHELLO_icons.ts
86    + resources
87      + Makefile.am
88      + PYHELLO.png
89      + PYHELLO_small.png
90      + ExecPYHELLO.png
91      + handshake.png
92      + stop.png
93      + PYHELLOCatalog.xml.in
94      + SalomeApp.xml
95    + doc
96      + Makefile.am
97      + doxyfile.in
98      + index.doc
99 </pre>
100
101 Note that other files can be optionally present. For example, in some
102 SALOME modules sources tree you can find such files as AUTHORS,
103 INSTALL, ChangeLog, COPYING, NEWS, README, etc. Some files are
104 specific only for this PYHELLO sample module, for example PNG images
105 in the resources directory which are used in the GUI dialog boxes etc.
106
107 The usual way of the sources directory tree structure initial creation
108 is to copy it from the existing SALOME module.
109
110 \warning The files of the platform base module (KERNEL) must not be
111 copied to initialise a module tree structure. It is usually preferable
112 to copy files from another module such as GEOM or MED.
113
114 The module name is PYHELLO, the component name is PYHELLO and all the
115 files are put in a directory named PYHELLO1_SRC.
116 Below is a short description of these files. Note, that files with .in
117 suffix are the autoconf templates from which the actual files are
118 generated during the build procedure.
119
120 - build_configure, configure.ac, Makefile.am, make_common_starter.am
121
122 These files are a part of the build system based on GNU
123 automake/autoconf auto-tools. These files define the build procedure,
124 namely, compilation and installation rules like compiler and linker
125 options, installation destination folder, package version etc.
126
127 - adm_local/unix/config_files/check_PYHELLO.m4
128
129 The files in this directory are also a part of the GNU auto-tools
130 -based build procedure. The scripts written in m4 language are usually
131 used to test an availability of some 3rd-party pre-requisite product,
132 compiler feature, different configuration options. 
133
134 - bin/VERSION.in
135
136 This file is used to document the module, it must give its version (at
137 least) and (optionally) compatibilities or incompatibilities with
138 other modules. This file is strongly recommended but is not essential
139 for operation of the module.
140
141 - bin/runAppli.in
142 - bin/runSalome.py
143
144 These files are not essential but make the example easier to
145 use. These are scripts that can be used to run SALOME session with
146 PYHELLO module.
147
148 - idl/PYHELLO_Gen.idl
149
150 This is the CORBA IDL definition of the services implemented by SALOME
151 PYHELLO module.
152
153 - src/PYHELLO/PYHELLO.py
154 - src/PYHELLO/PYHELLO_utils.py
155
156 These files provide the implementation of a CORBA engine of the
157 PYHELLO module. In particular, this is an implementation of the 
158 services defined in the PYHELLO_Gen.idl file.
159
160 - src/PYHELLOGUI/PYHELLOGUI.py
161
162 The src/PYHELLOGUI is an optional directory that provides an
163 implementation of PYHELLO module's GUI. Strictly speaking, the
164 GUI is optional for each SALOME module. In some cases it's
165 enough to implement CORBA engine only. Then, the services of the
166 module will be avaiable in a CORBA environment. The module can be
167 loaded to the SALOME container and its services can be used in the
168 Supervisor computation schemas, in Python scripts or/and refer to it
169 in other modules. A GUI is necessary in the cases if it is planned to
170 access to the module functionality from the SALOME GUI session via
171 menu actions, dialog boxes and so on.
172
173 - src/PYHELLOGUI/PYHELLO_msg_en.ts
174 - src/PYHELLOGUI/PYHELLO_icons.ts
175
176 These files provide a description (internationalization) of GUI
177 resources of the PYHELLO module. PYHELLO_msg_en.ts provides an English
178 translation of the string resources used in a module. PYHELLO_icons.ts
179 defines images and icons resources used within the GUI of the
180 PYHELLO module. Please refer to Qt linguist documentation for more
181 details.
182
183 - resources/PYHELLO.png
184 - resources/PYHELLO_small.png
185 - resources/ExecPYHELLO.png
186 - resources/handshake.png
187 - resources/stop.png
188
189 The resources folder usually includes different resource files used
190 within the SALOME module. For example, PYHELLO.png file provides an icon
191 of PYHELLO module to be shown in the SALOME GUI desktop. ExecPYHELLO.png is
192 an icon for the makeBanner() function used in the menu and
193 toolbar. The icons handshake.png and stop.png are used in the dialog
194 boxes and PYHELLO_small.png icon is used to display in the Object
195 browser for root PYHELLO entity.
196
197 - resources/PYHELLOCatalog.xml.in
198
199 The XML description of the CORBA services provided by the PYHELLO
200 module. This file is parsed by Supervisor and YACS module to generate
201 the list of service nodes to be used in the calculation schemas. The
202 simplest way to create this file is to use Catalog Generator utility
203 provided by the SALOME KERNEL module, that can automatically generate
204 XML description file from the IDL file.
205
206 - resources/SalomeApp.xml
207
208 This file is essential for the module. It provides some parameters of
209 the module which define module behavior in SALOME. In particular it
210 should provide a section with the name corresponding to the name of a
211 module ("PYHELLO" in this case) with the following parameters:
212 \code
213   <section name="PYHELLO">
214     <parameter name="name" value="PyHello"/>
215     <parameter name="icon" value="PYHELLO.png"/>
216     <parameter name="library" value="SalomePyQtGUI"/>
217   </section>
218 \endcode
219
220 The "name" parameter defines GUI name of a module. The "icon"
221 parameter defines a GUI icon of a module. The parameter "library"
222 specifies the name of the C++ library representing the front-end of
223 the module in the SALOME GUI desktop. The Python modules which do not
224 implement its own C++ front-end GUI library should specify
225 "SalomePyQtGUI" value in this parameter.
226
227 The section "resources" also specifies the directory that contains
228 resources of a module (icons, translation files, etc).
229
230 \code
231   <section name="resources">
232     <parameter name="PYHELLO" value="${PYHELLO_ROOT_DIR}/share/salome/resources/pyhello"/>
233   </section>
234 \endcode
235
236 - doc/doxyfile.in
237
238 The Doxygen configuration file. The Doxygen is used to build this
239 documentation. The file doxyfile.in provides a rules for the
240 generation of module documentation.
241
242 - doc/index.doc
243
244 An input file for the Doxygen, which provides a source of this documentation.
245
246 \ref dev_steps "<< Previous"<br>\ref build_proc_files ">> Next"
247
248 \page build_proc_files Build procedure input files
249
250 SALOME uses autoconf and automake GNU auto-tools to build the
251 modules. The configure script is used for the build procedure to test
252 the system configuration and to pre-configure the module construction
253 Makefile files. 
254
255 The \b build_configure script provides a procedure that uses \b
256 configure.ac and set of \b Makefile.am files as input and uses autoconf
257 to generate the configure script and automake to generate Makefile.in
258 files. 
259
260 The files with an .in extension are the skeletons that are the input
261 of the configure script (to be more precise, these files should be
262 listed in the end of the configure.ac file in the AC_OUTPUT()
263 autoconf macro) and are transformed by the configure process.
264
265 Almost all files used for this process are located in the platform
266 base module KERNEL that is referenced by the KERNEL_ROOT_DIR
267 environment variable, namely in its salome_adm sub-folder.
268 Similarly, the GUI_ROOT_DIR environment variable is used for the
269 graphical user interface (GUI), that also provides a set of
270 configuration utilities (m4 files) in its adm_local folder. However,
271 some files must be modified as a function of the target module. This
272 is the case for build_configure and configure.ac files which usually
273 need to be adapted to the module needs. 
274
275 The file \b make_common_starter.am file in the adm_local directory of
276 the example module provides basic build rules to be used in other
277 Makefile.am files. To refer to this file in the Makefile.am it is
278 necessary to use "include" clause:
279
280 \code
281 include $(top_srcdir)/adm_local/unix/make_common_starter.am
282 \endcode
283
284 The adm_local/unix/config_files is a directory in which the m4 files
285 that are used to test the configuration of the system in the configure
286 process can be placed. If the salome_adm files are not sufficient,
287 additional configuration files can be put to the adm_local directory.
288
289 \ref tree_structure "<< Previous"<br>\ref idl_dir ">> Next"
290
291 \page idl_dir The idl directory
292
293 The idl directory requires a Makefile.am that must make the
294 compilation of the idl PYHELLO_Gen.idl file and install all the
295 generated files into the correct module installation directories.  The
296 BASEIDL_FILES target has to be modified to reach this goal.
297
298 The idl file itself must define a CORBA module for which the name must
299 be different from the module name to avoid name conflicts and define a
300 CORBA interface that is derived at least from the EngineComponent interface  
301 of the Engines module. The name of the CORBA module will be
302 \b PYHELLO_ORB and the name of the interface will be \b PYHELLO_Gen. 
303
304 \ref build_proc_files "<< Previous"<br>\ref src_dir ">> Next"
305
306 \page src_dir The src directory
307
308 The src contains all source files required to build and install CORBA
309 engine and (optionally) GUI of the module. Each of these entities usually
310 has (but this is not actually obligatory) its own directory.
311
312 The Makefile.am simply triggers the path of sub-directories described
313 by the SUBDIRS target.
314
315 - The src/PYHELLO directory
316
317 This directory contains the Python files that implement the engine
318 of the module. The Makefile.am defines the rules used to install these
319 files to the destination folder. The name of the module
320 engine Python file is predefined and should be set as <MODULE>.py
321 where <MODULE> is a name of the module. In the case of the PYHELLO
322 module, the name of the engine Python script should be PYHELLO.so.
323
324 The PYHELLO.py Python script implements PYHELLO class that is derived
325 from the PYHELLO_Gen interface of the PYHELLO_ORB__POA CORBA module,
326 the SALOME_ComponentPy_i class (base implementation of SALOME
327 Python module engine exported by the KERNEL module) and
328 SALOME_DriverPy_i class that provides base implementation of
329 persistence mechanism.
330
331 In particular, PYHELLO class implements makeBanner() function that is
332 defined in the IDL interface PYHELLO_ORB::PYHELLO_Gen. 
333
334 \code
335 def makeBanner( self, name ):
336     banner = "Hello %s!" % name
337     return banner
338 \endcode
339
340 Other services
341 defined in PYHELLO_Gen CORBA interface also should be implemented by
342 this class.
343
344 - The src/PYHELLOGUI directory
345
346 This directory contains the Python files that implement the GUI
347 of PYHELLO module. The name of the module GUI Python script is
348 predefined and should be set as <MODULE>GUI.py where <MODULE> is a
349 name of the module. In the case of the PYHELLO module, the name of the
350 GUI Python script should be PYHELLOGUI.py.
351
352 The implementation of GUI of the PYHELLO module should be done
353 according to the architecture and rules specified by the SALOME GUI
354 module. The PYHELLO.py script should implement a set of the functions
355 which define the module behavior in GUI, for example, create menus,
356 toolbars, define context popup menus, objects selection behavior,
357 implement dialog boxes etc.
358  
359 Here below is a short description of these methods. For more details
360 please refer to the SALOME GUI module documentation.
361
362 - initialize() - module first initialization; usually used to create
363   GUI actions, menus, toolbars and so on;
364 - activate() - module activation; perform actions which should
365   be done when the module is activated by the user;
366 - deactivate() - module deactivation; perform actions which should
367   be done when the module is deactivated by the user;
368 - windows() - get a list and a position of the windows to be
369   associated with the module; these windows will be automatically
370   opened and positioned according to the setting defined by the value
371   returned by this function;
372 - views() - get a list of the compatible viewers; these viewers
373   will be automatically opened/raised on the module activation;
374 - createPopupMenu() - create and return context popup menu according
375   to the current selection;
376 - createPreferences() - initialize module's preferences;
377 - preferenceChanged() - callback function that is called when some
378   module's preference is changed by the user; allows to perform the
379   corresponding actions;
380 - engineIOR() - to get the reference to the module CORBA engine
381
382 Note, that some of these methods are optional and need not be
383 obligatory implemented because SalomePyQtGUI_Module class provides a
384 base implementation of these functions. It's sometimes enough to
385 implement only some of them, depending on the module needs.
386
387 In the case of PYHELLO module, some of these functions are
388 implemented to provide a sample for the development:
389
390 - engineIOR() that initializes PYHELLO module's eggine:
391
392 \code
393 def engineIOR():
394     IOR = ""
395     if getORB() and getEngine():
396         IOR = getORB().object_to_string( getEngine() )
397         pass
398     return IOR
399 \endcode
400
401 - initialize() that sets default module preferences
402
403 \code
404 def initialize():
405     if not sgPyQt.hasSetting( "PYHELLO", "def_obj_name"):
406         sgPyQt.addSetting( "PYHELLO", "def_obj_name", GUIcontext.DEFAULT_NAME )
407     if not sgPyQt.hasSetting( "PYHELLO", "creation_mode"):
408         sgPyQt.addSetting( "PYHELLO", "creation_mode", 0 )
409 \endcode
410
411 - createPreferences() that initializes module preferences for the
412  application's Preferences dialog box
413
414 \code
415 def createPreferences():
416     if verbose() : print "PYHELLOGUI.createPreferences() : study : %d" % _getStudyId()
417     gid = sgPyQt.addPreference( "General" )
418     gid = sgPyQt.addPreference( "Object creation", gid )
419     pid = sgPyQt.addPreference( "Default name",  gid, SalomePyQt.PT_String,   "PYHELLO", "def_obj_name" )
420     pid = sgPyQt.addPreference( "Default creation mode", gid, SalomePyQt.PT_Selector, "PYHELLO", "creation_mode" )
421     strings = QStringList()
422     strings.append( "Default name" )
423     strings.append( "Generate name" )
424     strings.append( "Ask name" )
425     indexes = []
426     indexes.append( QVariant(0) )
427     indexes.append( QVariant(1) )
428     indexes.append( QVariant(2) )
429     sgPyQt.setPreferenceProperty( pid, "strings", QVariant( strings ) )
430     sgPyQt.setPreferenceProperty( pid, "indexes", QVariant( indexes ) )
431     pass
432 \endcode
433
434 - windows() that defines dockable windows layout
435
436 \code
437 def windows():
438     if verbose() : print "PYHELLOGUI.windows() : study : %d" % _getStudyId()
439     wm = {}
440     wm[SalomePyQt.WT_ObjectBrowser] = Qt.LeftDockWidgetArea
441     wm[SalomePyQt.WT_PyConsole]     = Qt.BottomDockWidgetArea
442     return wm
443 \endcode
444
445 Please refer to PYHELLOGUI.py script for more details about
446 implementation of other callback functions.
447
448 An implemention of the ShowHello() function is quite simple. It shows
449 the small dialog box allowing user to enter the name, and then uses
450 reference to the module CORBA engine to invoke its makeBanner()
451 service.
452
453 Note, that GUI elements of the Python module are implemented with help
454 of PyQt toolkit which provides a Python wrappings of the Qt library.
455
456 \ref idl_dir "<< Previous"<br>\ref bin_dir ">> Next"
457
458 \page bin_dir The bin directory
459
460 The file VERSION.in is used to document the module, it must define its
461 version and (optionally) its compatibilities or incompatibilities with
462 other modules. Therefore, it is strongly recommended but is not
463 essential for correct operation of the module.
464
465 The runAppli.in file is the equivalent of the runSalome script
466 distributed by the KERNEL module but configured to start SALOME
467 session with PYHELLO module only.
468
469 The myrunSalome.py file reuses part of functionality provided by the
470 KERNEL's runSalome.py script. It is used to run SALOME session and
471 start PYHELLO module in this session. 
472
473 \ref src_dir "<< Previous"<br>\ref doc_dir ">> Next"
474
475 \page doc_dir The doc directory
476
477 This directory provides documentation files of the module. The
478 documentation of the module can be implemented in the arbitrary
479 way. But if you want your documentation to appear in the SALOME GUI
480 desktop's Help menu, some specific actions should be done as follows.
481
482 The documentation should be generated in the HTML format. For example,
483 the documentation of the PYHELLO module is generated using Doxygen
484 tool. It allows to generate structured set of HTML pages from the set
485 of input plain text files. Input source files should include Doxygen
486 tags and optionally direct HTML tags. For more details please refer to
487 the Doxygen documentation.
488
489 The resulting documentation of a module should include at least one
490 file index.html. All the HTML and image files should be exported by
491 the build procedure to the following directory:
492 <module_installation_dir>/share/doc/salome/gui/<MODULE>
493 where <module_installation_dir> is a module installation folder and
494 MODULE is its name. For example, for PYHELLO module, at least one file
495 should exist:
496 <PYHELLO_module_installation_dir>/share/doc/salome/gui/PYHELLO/index.html. 
497
498 The SALOME GUI automatically searches for the index.html file in the
499 mentioned module directory. If the file is found, the corresponding
500 menu command is automatically added to the Help menu of the SALOME GUI
501 desktop.
502
503 \ref bin_dir "<< Previous"<br>\ref build_procedure ">> Next"
504
505 \page build_procedure Construction, installation
506
507 Before building PYHELLO module, please ensure that SALOME environment is
508 set properly. Assume that SALOME environment is set in env_products.sh
509 script. In order to build and install PYHELLO module, you have to
510 perform several steps:
511
512 <pre>
513 [bash% ] source env_products.sh
514 [bash% ] mkdir PYHELLO_BUILD
515 [bash% ] cd PYHELLO_BUILD
516 [bash% ] ../PYHELLO1_SRC/build_configure
517 [bash% ] ../PYHELLO1_SRC/configure --prefix=<PYHELLO_module_installation_dir>
518 [bash% ] make
519 [bash% ] make install
520 </pre>
521
522 The first command creates a build directory for the PYHELLO module. Then
523 next step is to cd to this build directory. From this directory you
524 sequentially invoke build_configure, configure, make and make install
525 commands. On each step, you have to ensure that the operation is
526 finished correctly (no errors raised).
527
528 The <PYHELLO_module_installation_dir> variable above defines the
529 destination directory to which the PYHELLO module should be
530 installed. After the last step is finished, the PYHELLO module is built
531 and installed to the <PYHELLO_module_installation_dir> directory.
532
533 \ref doc_dir "<< Previous"<br>\ref run_procedure ">> Next"
534
535 \page run_procedure Running SALOME
536
537 Go to the the <PYHELLO_module_installation_dir> directory and type:
538
539 <pre>
540 [bash% ] ./bin/salome/runAppli
541 </pre>
542
543 This command runs SALOME session configured for KERNEL and the PYHELLO
544 module. At the end of running, the user will be prompted by the
545 Python interpreter command line configured for SALOME that provides
546 access to SALOME Python API (including CORBA interfaces).
547
548 The runAppli file is a shell script that executes a Python commands
549 running SALOME session by passing arguments to it in a command line:
550         
551 <pre>
552 ${KERNEL_ROOT_DIR}/bin/salome/envSalome.py python -i $PYHELLO_ROOT_DIR/bin/salome/myrunSalome.py --modules=PYHELLO --killall
553 </pre>
554
555 These arguments state that the myrunSalome.py script located in the
556 PYHELLO module will be used, that the PYHELLO component will be
557 activated and all previously running SALOME sessions should be
558 shutdowned.
559
560 This command will not function unless the following environment
561 variables have previously been set:
562
563 <pre>
564 export KERNEL_ROOT_DIR=<KERNEL installation path>
565 export PYHELLO_ROOT_DIR=<PYHELLO installation path>
566 </pre>
567
568 \warning It is possible that the SALOME run will not reach the end.
569 In some circumstances, the time to start CORBA servers may be long and
570 could exceed the timeout. If the reasons is that the time to
571 load dynamic libraries is long, it is possible that a second run
572 immediately afterwards will be successful.
573  
574 \ref build_procedure "<< Previous"<br>\ref load_module ">> Next"
575
576 \page load_module Loading PYHELLO component
577
578 The PYHELLO_ORB module has to be imported before making a request to
579 load the component into the container, to obtain access to methods of
580 the component.  This container is made accessible in the runSalome.py
581 by means of the \b container variable:
582
583 <pre>
584 >> import PYHELLO_ORB
585 >> c=container.load_impl("PYHELLO","PYHELLO")
586 >> c.makeBanner("Christian")
587 </pre>
588
589 The last instruction returns a string "Hello Christian". Proceed as
590 follows to see the CORBA objects created by these actions:
591
592 <pre>
593 >> clt.showNS()
594 </pre>
595
596 \ref run_procedure "<< Previous"<br>\ref catalog_def ">> Next"
597
598 \page catalog_def PYHELLO module catalog definition
599
600 In the example from the previous chapter, the PYHELLO component was
601 loaded by making a direct request to the SALOME container. This is not
602 the standard method for loading of a component. The normal way uses
603 the SALOME LifeCycle service that invokes SALOME Module Catalog
604 services to identify the component and its properties and then calls
605 the requested container to load the component. 
606
607 Before this method can be used, the component must be declared in a
608 catalog in the XML format, for which the name must be
609 <Module>Catalog.xml. In our case, it will be PYHELLOCatalog.xml.
610 Usually this catalog is put to the resources sub-directory of the
611 directory tree. The simplest way to create this file is to use Catalog
612 Generator utility provided by the SALOME KERNEL module, that can
613 automatically generate XML description file from the IDL file.
614
615 \ref load_module "<< Previous"<br>\ref load_lcc ">> Next"
616
617 \page load_lcc Loading PYHELLO component via LifeCycle service
618
619 The method of loading the component is not very different from that
620 is described above. The services of the LifeCycle module are used in
621 this case instead of calling the container directly. The call sequence
622 is contained in the runSalome.Py \b test() function.
623
624 <pre>
625     c=test(clt)
626     c.makeBanner("Christian")
627 </pre>
628
629 The test function creates the LifeCycle object. It then asks for the
630 PYHELLO component to be loaded in the FactoryServer container:
631
632 \code
633 def test(clt):
634     """
635     Test function that creates an instance of PYHELLO component
636     usage : hello=test(clt)
637     """
638     import LifeCycleCORBA
639     lcc = LifeCycleCORBA.LifeCycleCORBA(clt.orb)
640     import PYHELLO_ORB
641     pyhello = lcc.FindOrLoadComponent("FactoryServePy", "PYHELLO")
642     return pyhello
643 \endcode
644
645 \ref catalog_def "<< Previous"<br>\ref load_iapp ">> Next"
646
647 \page load_iapp Loading from the GUI (IAPP)
648
649 In order to activate PYHELLO module in the SALOME GUI desktop, the user
650 should press the PYHELLO module's button on the "Modules" toolbar or
651 select the name of the module in the combo box on this toolbar.
652
653 The image file to be used as an icon of a module should be exported by
654 the module build procedure. The icon file name is defined in the
655 corresponding SalomeApp.xml configuration file:
656 \code
657   <section name="PYHELLO">
658     <parameter name="name" value="Hello"/>
659     <parameter name="icon" value="PYHELLO.png"/>
660     <parameter name="library" value="SalomePyQtGUI"/>
661   </section>
662 \endcode
663
664 \ref load_lcc "<< Previous"
665
666 */