1 # Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 # This library is free software; you can redistribute it and/or
7 # modify it under the terms of the GNU Lesser General Public
8 # License as published by the Free Software Foundation; either
9 # version 2.1 of the License.
11 # This library is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # Lesser General Public License for more details.
16 # You should have received a copy of the GNU Lesser General Public
17 # License along with this library; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 # File : GENERICSOLVERGUI.py
24 # Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
29 from PyQt4.QtGui import *
30 from PyQt4.QtCore import *
32 from omniORB import CORBA
33 from SALOME_NamingServicePy import *
34 from LifeCycleCORBA import *
36 import SALOMEDS_Attributes_idl
38 import GENERICSOLVER_ORB
40 ################################################
42 # Used to store actions, menus, toolbars, etc...
43 ################################################
47 MODULE_NAME = "GENERICSOLVER"
49 MODULE_PIXMAP = "GENERICSOLVER_small.png"
56 # menus/toolbars/actions IDs
57 GENERICSOLVER_MENU_ID = 90
59 CREATE_OBJECT_ID = 942
64 GENERICSOLVER_TB_ID = 90
72 DEFAULT_NAME = "Object"
73 DEFAULT_CASE_NAME = "Case"
77 # create top-level menu
78 mid = sgPyQt.createMenu( "Genericsolver", -1, GUIcontext.GENERICSOLVER_MENU_ID, sgPyQt.defaultMenuGroup() )
80 tid = sgPyQt.createTool( "Genericsolver" )
81 # create actions and fill menu and toolbar with actions
82 a = sgPyQt.createAction( GUIcontext.CREATE_CASE_ID, "Create case", "Create case", "Create a new case", "CaseGENERICSOLVER.png" )
83 sgPyQt.createMenu( a, mid )
84 sgPyQt.createTool( a, tid )
85 a = sgPyQt.createAction( GUIcontext.SOLVER_ID, "Run Solver", "Run Solver", "Run Solver on selected case", "ExecGENERICSOLVER.png" )
86 sgPyQt.createMenu( a, mid )
87 sgPyQt.createTool( a, tid )
88 a = sgPyQt.createSeparator()
89 sgPyQt.createMenu( a, mid )
90 #a = sgPyQt.createAction( GUIcontext.CREATE_OBJECT_ID, "Create object", "Create object", "Create object" )
91 #sgPyQt.createMenu( a, mid )
92 #a = sgPyQt.createAction( GUIcontext.CREATE_CASE_ID, "Create case", "Create case", "Create case" )
93 #sgPyQt.createMenu( a, mid )
94 a = sgPyQt.createSeparator()
95 sgPyQt.createMenu( a, mid )
97 ag = sgPyQt.createActionGroup( GUIcontext.OPTIONS_ID )
98 ag.setText( "Creation mode" )
99 ag.setUsesDropDown(True)
100 a = sgPyQt.createAction( GUIcontext.OPTION_1_ID, "Default name", "Default name", "Use default name for the objects" )
101 a.setCheckable( True )
103 a = sgPyQt.createAction( GUIcontext.OPTION_2_ID, "Generate name", "Generate name", "Generate name for the objects" )
104 a.setCheckable( True )
106 a = sgPyQt.createAction( GUIcontext.OPTION_3_ID, "Ask name", "Ask name", "Request object name from the user" )
107 a.setCheckable( True )
109 sgPyQt.createMenu( ag, mid )
110 sgPyQt.createTool( ag, tid )
111 default_mode = sgPyQt.integerSetting( "GENERICSOLVER", "creation_mode", 0 )
112 sgPyQt.action( GUIcontext.OPTION_1_ID + default_mode ).setChecked( True )
115 # the following action are used in context popup
116 a = sgPyQt.createAction( GUIcontext.DELETE_ALL_ID, "Delete all", "Delete all", "Delete all objects" )
117 a = sgPyQt.createAction( GUIcontext.SHOW_ME_ID, "Show", "Show", "Show object name" )
118 a = sgPyQt.createAction( GUIcontext.DELETE_ME_ID, "Delete", "Delete", "Remove object" )
119 a = sgPyQt.createAction( GUIcontext.RENAME_ME_ID, "Rename", "Rename", "Rename object" )
120 a = sgPyQt.createAction( GUIcontext.SET_VALUE_ID, "Set value", "Set Value", "Set a new value to variable" )
124 ################################################
126 ################################################
128 # study-to-context map
129 __study2context__ = {}
131 __current_context__ = None
136 ################################################
138 # Get SALOME PyQt interface
140 sgPyQt = SalomePyQt.SalomePyQt()
142 # Get SALOME Swig interface
143 import libSALOME_Swig
144 sg = libSALOME_Swig.SALOMEGUI_Swig()
146 ################################################
149 orb = CORBA.ORB_init( [''], CORBA.ORB_ID )
151 # create naming service instance
152 naming_service = SALOME_NamingServicePy_i( orb )
154 # create life cycle CORBA instance
155 lcc = LifeCycleCORBA( orb )
158 obj = naming_service.Resolve( '/myStudyManager' )
159 studyManager = obj._narrow( SALOMEDS.StudyManager )
161 ################################################
163 ################################################
171 if __verbose__ is None:
173 __verbose__ = int( os.getenv('SALOME_VERBOSE', 0) )
181 # get GENERICSOLVER engine
184 engine = lcc.FindOrLoadComponent( "FactoryServerPy", GUIcontext.MODULE_NAME )
188 # get active study ID
191 return sgPyQt.getStudyId()
197 studyId = getStudyId()
198 study = studyManager.GetStudyByID( studyId )
202 # returns True if object has children
204 def hasChildren( sobj ):
207 iter = study.NewChildIterator( sobj )
209 name = iter.Value().GetName()
218 # finds or creates component object
220 def findOrCreateComponent():
222 father = study.FindComponent( GUIcontext.MODULE_NAME )
224 builder = study.NewBuilder()
225 father = builder.NewComponent( GUIcontext.MODULE_NAME )
226 attr = builder.FindOrCreateAttribute( father, "AttributeName" )
227 attr.SetValue( GUIcontext.MODULE_NAME )
228 attr = builder.FindOrCreateAttribute( father, "AttributePixMap" )
229 attr.SetPixMap( GUIcontext.MODULE_PIXMAP )
230 attr = builder.FindOrCreateAttribute( father, "AttributeLocalID" )
231 attr.SetValue( GUIcontext.MODULE_ID )
233 builder.DefineComponentInstance( father, getEngine() )
241 # get current GUI context
244 global __current_context__
245 return __current_context__
248 # set and return current GUI context
249 # study ID is passed as parameter
251 def setContext( studyID ):
252 global __study2context__, __current_context__
253 if not __study2context__.has_key(studyID):
254 __study2context__[studyID] = GUIcontext()
256 __current_context__ = __study2context__[studyID]
257 return __current_context__
260 # increment object counter in the map
262 def _incObjToMap( m, id ):
263 if id not in m: m[id] = 0
271 selcount = sg.SelectedCount()
274 for i in range( selcount ):
275 entry = sg.getSelected( i )
277 sobj = study.FindObjectID( entry )
279 test, anAttr = sobj.FindAttribute( "AttributeLocalID" )
281 ID = anAttr._narrow( SALOMEDS.AttributeLocalID ).Value()
283 _incObjToMap( seltypes, ID )
288 _incObjToMap( seltypes, GUIcontext.FOREIGN_ID )
290 return selcount, seltypes
292 ################################################
294 ################################################
296 # called when module is initialized
297 # perform initialization actions
299 if verbose() : print "GENERICSOLVERGUI.initialize() : study : %d" % getStudyId()
300 # set default preferences values
301 if not sgPyQt.hasSetting( "GENERICSOLVER", "def_obj_name"):
302 sgPyQt.addSetting( "GENERICSOLVER", "def_obj_name", GUIcontext.DEFAULT_NAME )
303 if not sgPyQt.hasSetting( "GENERICSOLVER", "def_case_name"):
304 sgPyQt.addSetting( "GENERICSOLVER", "def_case_name", GUIcontext.DEFAULT_CASE_NAME )
305 if not sgPyQt.hasSetting( "GENERICSOLVER", "creation_mode"):
306 sgPyQt.addSetting( "GENERICSOLVER", "creation_mode", 0 )
309 # called when module is initialized
310 # return map of popup windows to be used by the module
312 if verbose() : print "GENERICSOLVERGUI.windows() : study : %d" % getStudyId()
314 wm[SalomePyQt.WT_ObjectBrowser] = Qt.LeftDockWidgetArea
315 wm[SalomePyQt.WT_PyConsole] = Qt.BottomDockWidgetArea
318 # called when module is initialized
319 # return list of 2d/3d views to be used ny the module
321 if verbose() : print "GENERICSOLVERGUI.views() : study : %d" % getStudyId()
324 # called when module is initialized
325 # export module's preferences
326 def createPreferences():
327 if verbose() : print "GENERICSOLVERGUI.createPreferences() : study : %d" % getStudyId()
328 gid = sgPyQt.addPreference( "General" )
329 gid = sgPyQt.addPreference( "Object creation", gid )
330 pid = sgPyQt.addPreference( "Default object name", gid, SalomePyQt.PT_String, "GENERICSOLVER", "def_obj_name" )
331 pid = sgPyQt.addPreference( "Default case name", gid, SalomePyQt.PT_String, "GENERICSOLVER", "def_case_name" )
332 pid = sgPyQt.addPreference( "Default creation mode", gid, SalomePyQt.PT_Selector, "GENERICSOLVER", "creation_mode" )
333 strings = QStringList()
334 strings.append( "Default name" )
335 strings.append( "Generate name" )
336 strings.append( "Ask name" )
338 indexes.append( QVariant(0) )
339 indexes.append( QVariant(1) )
340 indexes.append( QVariant(2) )
341 sgPyQt.setPreferenceProperty( pid, "strings", QVariant( strings ) )
342 sgPyQt.setPreferenceProperty( pid, "indexes", QVariant( indexes ) )
345 # called when module is activated
346 # returns True if activating is successfull and False otherwise
348 if verbose() : print "GENERICSOLVERGUI.activate() : study : %d" % getStudyId()
349 ctx = setContext( getStudyId() )
352 # called when module is deactivated
354 if verbose() : print "GENERICSOLVERGUI.deactivate() : study : %d" % getStudyId()
357 # called when active study is changed
358 # active study ID is passed as parameter
359 def activeStudyChanged( studyID ):
360 if verbose() : print "GENERICSOLVERGUI.activeStudyChanged(): study : %d" % studyID
361 ctx = setContext( getStudyId() )
364 # called when popup menu is invoked
365 # popup menu and menu context are passed as parameters
366 def createPopupMenu( popup, context ):
367 if verbose() : print "GENERICSOLVERGUI.createPopupMenu(): context = %s" % context
368 ctx = setContext( getStudyId() )
370 selcount, selected = getSelection()
371 print selcount, selected
373 # one object is selected
374 if GUIcontext.MODULE_ID in selected:
376 popup.addAction( sgPyQt.action( GUIcontext.DELETE_ALL_ID ) )
377 ## elif GUIcontext.OBJECT_ID in selected:
379 ## popup.addAction( sgPyQt.action( GUIcontext.SHOW_ME_ID ) )
380 ## popup.addAction( sgPyQt.action( GUIcontext.RENAME_ME_ID ) )
381 ## popup.addSeparator()
382 ## popup.addAction( sgPyQt.action( GUIcontext.DELETE_ME_ID ) )
383 elif GUIcontext.CASE_ID in selected:
385 popup.addAction( sgPyQt.action( GUIcontext.SOLVER_ID ) )
386 elif GUIcontext.VARIABLE_ID in selected:
388 popup.addAction( sgPyQt.action( GUIcontext.SET_VALUE_ID ) )
389 popup.addAction( sgPyQt.action( GUIcontext.RENAME_ME_ID ) )
393 # several objects are selected
394 if len( selected ) == 1:
395 if GUIcontext.MODULE_ID in selected:
397 popup.addAction( sgPyQt.action( GUIcontext.DELETE_ALL_ID ) )
398 ## elif GUIcontext.OBJECT_ID in selected:
399 ## # menu for list of objects
400 ## popup.addAction( sgPyQt.action( GUIcontext.DELETE_ME_ID ) )
406 # called when GUI action is activated
407 # action ID is passed as parameter
408 def OnGUIEvent( commandID ):
409 if verbose() : print "GENERICSOLVERGUI.OnGUIEvent(): command = %d" % commandID
410 if dict_command.has_key( commandID ):
412 dict_command[commandID]()
414 traceback.print_exc()
416 if verbose() : print "The command is not implemented: %d" % commandID
419 # called when module's preferences are changed
420 # preference's resources section and setting name are passed as parameters
421 def preferenceChanged( section, setting ):
422 if verbose() : print "GENERICSOLVERGUI.preferenceChanged(): %s / %s" % ( section, setting )
425 # called when active view is changed
426 # view ID is passed as parameter
427 def activeViewChanged( viewID ):
428 if verbose() : print "GENERICSOLVERGUI.activeViewChanged(): %d" % viewID
431 # called when active view is cloned
432 # cloned view ID is passed as parameter
433 def viewCloned( viewID ):
434 if verbose() : print "GENERICSOLVERGUI.viewCloned(): %d" % viewID
437 # called when active view is viewClosed
438 # view ID is passed as parameter
439 def viewClosed( viewID ):
440 if verbose() : print "GENERICSOLVERGUI.viewClosed(): %d" % viewID
443 ################################################
444 # GUI actions implementation
445 ################################################
448 # 'SOLVER' dialog box
450 ##class MyDialog( QDialog ):
452 ## def __init__( self, parent = None, modal = 0):
453 ## QDialog.__init__( self, parent )
454 ## self.setObjectName( "MyDialog" )
455 ## self.setModal( modal )
456 ## self.setWindowTitle( "SOLVER!" )
457 ## vb = QVBoxLayout( self )
460 ## hb0 = QHBoxLayout( self )
461 ## label = QLabel( "Prenom: ", self )
462 ## hb0.addWidget( label )
463 ## self.entry = QLineEdit( self )
464 ## self.entry.setMinimumWidth( 200 )
465 ## hb0.addWidget( self.entry )
466 ## vb.addLayout( hb0 )
468 ## hb1 = QHBoxLayout( self )
469 ## bOk = QPushButton( "&OK", self )
470 ## self.connect( bOk, SIGNAL( 'clicked()' ), self, SLOT( 'accept()' ) )
471 ## hb1.addWidget( bOk )
473 ## hb1.addStretch( 10 )
475 ## bCancel = QPushButton( "&Cancel", self )
476 ## self.connect( bCancel, SIGNAL( 'clicked()' ), self, SLOT( 'close()' ) )
477 ## hb1.addWidget( bCancel )
479 ## vb.addLayout( hb1 )
483 ## def accept( self ):
484 ## name = str( self.entry.text() )
486 ## inPoint = [1, 2, 3]
488 ## print "GENERICSOLVERGUI.accept (1): inPoint = ", inPoint
489 ## print "GENERICSOLVERGUI.accept (1): outPoint = ", outPoint
490 ## (ok,outPoint) = getEngine().Exec( inPoint, outPoint )
491 ## QMessageBox.information( self, 'Info', "Exec() method returned %d" % ok )
492 ## print "GENERICSOLVERGUI.accept (2): inPoint = ", inPoint
493 ## print "GENERICSOLVERGUI.accept (2): outPoint = ", outPoint
496 ## QMessageBox.warning( self, 'Error!', 'Please, enter the name!' )
502 def addObjectInStudy( builder, father, objname, objid ):
503 obj = getSubSObjectByName( father, objname )
505 obj = builder.NewObject( father )
506 attr = builder.FindOrCreateAttribute( obj, "AttributeName" )
507 attr.SetValue( objname )
508 attr = builder.FindOrCreateAttribute( obj, "AttributeLocalID" )
509 attr.SetValue( objid )
512 def setValueToVariable( builder, varobj, value ):
513 attr = builder.FindOrCreateAttribute( varobj, "AttributeLocalID" )
515 if (objid == GUIcontext.VARIABLE_ID):
516 attr = builder.FindOrCreateAttribute( varobj, "AttributeReal" )
517 attr.SetValue( value )
519 attr = builder.FindOrCreateAttribute( varobj, "AttributeName" )
520 QMessageBox.information( sgPyQt.getDesktop(), 'Info', "Object '%s' isn't a variable. Can't set value." % attr.Value() )
523 def getValueOfVariable( builder, varobj ):
524 attr = builder.FindOrCreateAttribute( varobj, "AttributeLocalID" )
526 if (objid == GUIcontext.VARIABLE_ID):
527 attr = builder.FindOrCreateAttribute( varobj, "AttributeReal" )
530 attr = builder.FindOrCreateAttribute( varobj, "AttributeName" )
531 QMessageBox.information( sgPyQt.getDesktop(), 'Info', "Object '%s' isn't a variable. Can't set value." % attr.Value() )
534 def getSubSObjectByName( sobjFather, childName ):
536 iter = study.NewChildIterator( sobjFather )
537 #builder = study.NewBuilder()
540 if sobj.GetName() == childName:
547 # Create a deterministic case
550 print "GENERICSOLVERGUI.CreateCase : enter"
551 default_case_name = str( sgPyQt.stringSetting( "GENERICSOLVER", "def_case_name", GUIcontext.DEFAULT_CASE_NAME ).trimmed() )
553 if sgPyQt.action( GUIcontext.OPTION_3_ID ).isChecked():
554 # request object name from the user
555 name, ok = QInputDialog.getText( sgPyQt.getDesktop(),
561 name = str( name.trimmed() )
562 elif sgPyQt.action( GUIcontext.OPTION_2_ID ).isChecked():
563 # generate object name
566 name = "%s %d" % ( default_case_name, __id__ )
568 name = default_case_name
572 # generate object name
575 name = "%s %d" % ( default_case_name, __id__ )
579 builder = study.NewBuilder()
580 father = findOrCreateComponent()
581 case = addObjectInStudy( builder, father, name, GUIcontext.CASE_ID )
582 varE = addObjectInStudy( builder, case, "E", GUIcontext.VARIABLE_ID )
583 setValueToVariable( builder, varE, 210.e9 )
584 varF = addObjectInStudy( builder, case, "F", GUIcontext.VARIABLE_ID )
585 setValueToVariable( builder, varF, 1000. )
586 varL = addObjectInStudy( builder, case, "L", GUIcontext.VARIABLE_ID )
587 setValueToVariable( builder, varL, 1.5 )
588 varI = addObjectInStudy( builder, case, "I", GUIcontext.VARIABLE_ID )
589 setValueToVariable( builder, varI, 2.e-6 )
590 sg.updateObjBrowser( True )
591 print "GENERICSOLVERGUI.CreateCase : exit"
595 # Get the selected deterministic case
597 def GetSelectedCase():
598 entry = sg.getSelected( 0 )
601 sobj = study.FindObjectID( entry )
603 test, attr = sobj.FindAttribute( "AttributeLocalID" )
604 print "GENERICSOLVERGUI.GetSelectedCase : test=%d attr=%d" % (test,attr.Value())
605 if attr.Value() == GUIcontext.CASE_ID: # This is a case entry
606 if hasChildren( sobj ):
609 print "GENERICSOLVERGUI.GetSelectedCase : ERROR! no child for case"
612 print "GENERICSOLVERGUI.GetSelectedCase : ERROR! not a case"
615 print "GENERICSOLVERGUI.GetSelectedCase : ERROR! selected object not found in study"
618 print "GENERICSOLVERGUI.GetSelectedCase : ERROR! no selection"
622 # Retrieve data from selected case
624 def GetDataFromCase( caseEntry ):
627 case = study.FindObjectID( caseEntry )
628 builder = study.NewBuilder()
629 # Get the values of the variables and make them a list
630 for name in ("E", "F", "L", "I"):
631 var = getSubSObjectByName( case, name )
633 print "GENERICSOLVERGUI.GetDataFromCase : ERROR! no variable '%s'" % name
635 theCase.append( getValueOfVariable( builder, var ) )
639 # Add some variable to the case
641 def AddDataToCase( caseEntry, varName, varValue ):
643 case = study.FindObjectID( caseEntry )
644 builder = study.NewBuilder()
645 var = addObjectInStudy( builder, case, varName, GUIcontext.VARIABLE_ID )
646 setValueToVariable( builder, var, varValue )
647 sg.updateObjBrowser( True )
654 case = GetSelectedCase()
655 getEngine().Init( getStudyId(), case, "" )
657 inPoint = GetDataFromCase( case )[:2]
659 print "GENERICSOLVERGUI.RunSOLVER (1): inPoint = ", inPoint
660 print "GENERICSOLVERGUI.RunSOLVER (1): outPoint = ", outPoint
661 (ok,outPoint) = getEngine().Exec( inPoint, outPoint )
662 print "GENERICSOLVERGUI.RunSOLVER (2): inPoint = ", inPoint
663 print "GENERICSOLVERGUI.RunSOLVER (2): outPoint = ", outPoint
664 AddDataToCase( case, "Deviation", outPoint[0] )
666 getEngine().Finalize()
673 ##def CreateObject():
674 ## default_name = str( sgPyQt.stringSetting( "GENERICSOLVER", "def_obj_name", GUIcontext.DEFAULT_NAME ).trimmed() )
676 ## if sgPyQt.action( GUIcontext.OPTION_3_ID ).isChecked():
677 ## # request object name from the user
678 ## name, ok = QInputDialog.getText( sgPyQt.getDesktop(),
680 ## "Enter object name:",
684 ## name = str( name.trimmed() )
685 ## elif sgPyQt.action( GUIcontext.OPTION_2_ID ).isChecked():
686 ## # generate object name
688 ## __id__ = __id__ + 1
689 ## name = "%s %d" % ( default_name, __id__ )
691 ## name = default_name
695 ## # generate object name
697 ## __id__ = __id__ + 1
698 ## name = "%s %d" % ( default_name, __id__ )
700 ## if not name: return
701 ## study = getStudy()
702 ## builder = study.NewBuilder()
703 ## father = findOrCreateComponent()
704 ## obj = addObjectInStudy( builder, father, name, GUIcontext.OBJECT_ID )
705 ## sg.updateObjBrowser( True )
713 father = study.FindComponent( GUIcontext.MODULE_NAME )
715 iter = study.NewChildIterator( father )
716 builder = study.NewBuilder()
720 builder.RemoveObjectWithChildren( sobj )
722 sg.updateObjBrowser( True )
731 entry = sg.getSelected( 0 )
733 sobj = study.FindObjectID( entry )
735 test, attr = sobj.FindAttribute( "AttributeName" )
737 QMessageBox.information( sgPyQt.getDesktop(), 'Info', "My name is '%s'" % attr.Value() )
744 # Delete selected object(s)
748 builder = study.NewBuilder()
749 if sg.SelectedCount() <= 0: return
750 for i in range( sg.SelectedCount() ):
751 entry = sg.getSelected( i )
753 sobj = study.FindObjectID( entry )
755 builder.RemoveObject( sobj )
759 sg.updateObjBrowser( True )
763 # Rename selected object
767 builder = study.NewBuilder()
768 entry = sg.getSelected( 0 )
770 sobj = study.FindObjectID( entry )
772 name, ok = QInputDialog.getText( sgPyQt.getDesktop(),
774 "Enter object name:",
777 name = str( name.trimmed() )
778 if not ok or not name: return
779 attr = builder.FindOrCreateAttribute( sobj, "AttributeName" )
780 attr.SetValue( name )
781 sg.updateObjBrowser( True )
787 # Set value to variable
791 builder = study.NewBuilder()
792 entry = sg.getSelected( 0 )
794 sobj = study.FindObjectID( entry )
796 name, ok = QInputDialog.getText( sgPyQt.getDesktop(),
800 str(getValueOfVariable( builder, sobj)) )
801 value = float( name.trimmed() )
802 if not ok or not value: return
803 setValueToVariable( builder, sobj, value )
804 sg.updateObjBrowser( True )
810 # Commands dictionary
813 GUIcontext.SOLVER_ID : RunSOLVER,
814 GUIcontext.CREATE_CASE_ID : CreateCase,
815 ## GUIcontext.CREATE_OBJECT_ID : CreateObject,
816 GUIcontext.DELETE_ALL_ID : DeleteAll,
817 GUIcontext.SHOW_ME_ID : ShowMe,
818 GUIcontext.DELETE_ME_ID : Delete,
819 GUIcontext.RENAME_ME_ID : Rename,
820 GUIcontext.SET_VALUE_ID : SetValue,