]> SALOME platform Git repositories - modules/eficas.git/blob - src/EFICASGUI/EFICASGUI.py
Salome HOME
755ec6aa15c52bfb2ed2b9a7573fc109167a56af
[modules/eficas.git] / src / EFICASGUI / EFICASGUI.py
1 # -*- coding: utf-8 -*-
2
3 import os
4
5 """
6     Interface PyQt
7 """
8 from PyQt4.QtGui import *
9 from PyQt4.QtCore import *
10
11 import salome
12 import SalomePyQt
13
14 from salome.kernel.studyedit import getStudyEditor
15
16 sgPyQt=SalomePyQt.SalomePyQt()
17
18 # -----------------------------------------------------------------------------
19
20 print "EFicasGUI :: :::::::::::::::::::::::::::::::::::::::::::::::::::::"
21
22 # Test Eficas directory
23 eficasRoot = os.getenv("EFICAS_ROOT")
24 if eficasRoot is None:
25     QMessageBox.critical(sgPyQt.getDesktop(), "Error",
26                          "Cannot initialize EFICAS module. Environment "
27                          "variable EFICAS_ROOT is not set.")
28 elif not os.path.isdir(eficasRoot):
29     QMessageBox.critical(sgPyQt.getDesktop(), "Error",
30                          "Cannot initialize EFICAS module. Directory %s does "
31                          "not exist (check EFICAS_ROOT environment "
32                          "variable)." % eficasRoot)
33
34
35 ################################################
36 # GUI context class
37 # Used to store actions, menus, toolbars, etc...
38 ################################################
39
40 class GUIcontext:
41     # menus/toolbars/actions IDs
42     EFICAS_MENU_ID = 90
43     ASTER_ID       = 941
44     OM_ID          = 942
45     MAP_ID         = 943
46     OT_STUDY_ID    = 944
47     OT_WRAPPER_ID  = 945
48     MULTICATALOG_ID = 946
49     CARMEL3D_ID    = 947
50
51     # constructor
52     def __init__(self):
53         # create top-level menu
54         self.mid = sgPyQt.createMenu("Eficas", -1, GUIcontext.EFICAS_MENU_ID,
55                                      sgPyQt.defaultMenuGroup())
56         # create toolbar
57         self.tid = sgPyQt.createTool("Eficas")
58
59         a = sgPyQt.createAction(GUIcontext.MULTICATALOG_ID, "Eficas MultiCatalogue","Lancer Eficas" , "Lancer Eficas",  "eficas.png")
60         sgPyQt.createMenu(a, self.mid)
61         sgPyQt.createTool(a, self.tid)
62
63         # create actions conditionally and fill menu and toolbar with actions
64         self.addActionConditionally("Aster/prefs.py", GUIcontext.ASTER_ID,
65                                     "Eficas pour Code_Aster",
66                                     "Editer un jeu de commande ASTER avec Eficas",
67                                     "eficaster.png")
68         self.addActionConditionally("Sep/prefs.py", GUIcontext.OM_ID,
69                                     "Eficas pour Outils Metier",
70                                     "Editer un jeu de commande Outils Metier avec Eficas",
71                                     "eficasOM.png")
72         self.addActionConditionally("MAP/prefs.py", GUIcontext.MAP_ID,
73                                     "Eficas pour Map",
74                                     "Editer un jeu de commande Map avec Eficas",
75                                     "plus.png")
76         self.addActionConditionally("Openturns_Study/prefs.py", GUIcontext.OT_STUDY_ID,
77                                     "Eficas pour Openturns Study",
78                                     "Editer un jeu de commande Openturns Study avec Eficas",
79                                     "eficasotstd.png")
80         self.addActionConditionally("Openturns_Wrapper/prefs.py", GUIcontext.OT_WRAPPER_ID,
81                                     "Eficas pour Openturns Wrapper",
82                                     "Editer un jeu de commande Openturns Wrapper avec Eficas",
83                                     "eficasotwrp.png")
84         self.addActionConditionally("Carmel3D/prefs.py", GUIcontext.CARMEL3D_ID,
85                                     "Eficas pour Carmel3D",
86                                     "Editer un jeu de commande Carmel3D avec Eficas",
87                                     "eficascarmel.png")
88
89     def addActionConditionally(self, fileToTest, commandId, menuLabel, tipLabel, icon):
90         global eficasRoot
91         if os.path.isfile(os.path.join(eficasRoot, fileToTest)):
92             a = sgPyQt.createAction(commandId, menuLabel, tipLabel, tipLabel, icon)
93             sgPyQt.createMenu(a, self.mid)
94             sgPyQt.createTool(a, self.tid)
95
96 ################################################
97 # Global variables
98 ################################################
99
100 # study-to-context map
101 __study2context__   = {}
102 # current context
103 __current_context__ = None
104
105 ###
106 # set and return current GUI context
107 # study ID is passed as parameter
108 ###
109 def _setContext( studyID ):
110     global eficasRoot
111     if eficasRoot is None:
112         return
113     global __study2context__, __current_context__
114     if not __study2context__.has_key(studyID):
115         __study2context__[studyID] = GUIcontext()
116         pass
117     __current_context__ = __study2context__[studyID]
118     return __current_context__
119
120
121 # -----------------------------------------------------------------------------
122
123 def OnGUIEvent(commandID) :
124    if dict_command.has_key(commandID):
125       print "OnGUIEvent ::::::::::  commande associée  : ",commandID      
126       dict_command[commandID]()
127    else:
128       print "Pas de commande associée a : ",commandID
129
130 # -----------------------------------------------------------------------------
131
132 def setSettings():
133    """
134    Cette méthode permet les initialisations.
135    """
136    _setContext(sgPyQt.getStudyId())
137
138 def activate():
139    """
140    Cette méthode permet l'activation du module, s'il a été chargé mais pas encore
141    activé dans une étude précédente.
142    
143    Portage V3.
144    """
145    setSettings()
146
147
148 # -----------------------------------------------------------------------------
149
150 def activeStudyChanged(ID):
151    _setContext(ID)
152
153
154 #def definePopup(theContext, theObject, theParent):    
155 #   print "EFICASGUI --- definePopup"
156 #   print "EFICASGUI --- definePopup"
157 #   theContext= ""
158 #   theObject = "100"
159 #   theParent = "ObjectBrowser"
160 #   a=salome.sg.getAllSelected()
161     
162 #   selectedEntry = a[0]
163 #   mySO = monEditor.study.FindObjectID(selectedEntry);
164 #   aType = monEditor.getFileType(mySO)
165 #   print aType
166 #   return (theContext, theObject, theParent)
167
168
169 #def customPopup(popup, theContext, theObject, theParent):
170 #   a=salome.sg.getAllSelected()
171
172 #   selectedEntry = a[0]
173 #   mySO = monEditor.study.FindObjectID(selectedEntry);
174 #   aType = monEditor.getFileType(mySO)
175
176 #   print "EFICASGUI --- customPopup"
177 #   print "EFICASGUI --- customPopup"
178 #   print "EFICASGUI --- customPopup"
179 #   print "EFICASGUI --- customPopup"
180 #   print "EFICASGUI --- customPopup"
181 #   print "EFICASGUI --- customPopup"
182 #   print "EFICASGUI --- customPopup"
183 #   print "EFICASGUI --- customPopup"
184 #   popup.removeItem(99003)
185
186
187
188 # -----------------------------------------------------------------------------
189
190 def runEficas():
191    print "-------------------------EFICASGUI::runEficas-------------------------"
192    import eficasSalome
193    eficasSalome.runEficas(multi=True)
194    
195 def runEficaspourAster():
196    import eficasSalome
197    eficasSalome.runEficas( "ASTER" )
198    
199    
200 def runEficaspourOpenturnsStudy():
201    print "runEficas Pour Openturns Study"
202    import eficasSalome
203    eficasSalome.runEficas( "OPENTURNS_STUDY" ) 
204    
205 def runEficaspourOpenturnsWrapper():
206    print "runEficas Pour Openturns Wrapper"
207    import eficasSalome
208    eficasSalome.runEficas( "OPENTURNS_WRAPPER" ) 
209    
210 def runEficaspourOM():
211    print "runEficas Pour Outils Metier"
212    import eficasSalome
213    eficasSalome.runEficas( "SEP" )
214    
215 def runEficaspourMap():
216    print "runEficas Pour Map "
217    import eficasSalome
218    eficasSalome.runEficas( "MAP" )
219    
220    
221 def runEficaspourCarmel3D():
222    print "runEficas Pour Carmel3D "
223    import eficasSalome
224    eficasSalome.runEficas( "CARMEL3D" )
225    
226
227 def runEficasFichier(version=None):
228    """
229    Lancement d'eficas pour ASTER
230    si un fichier est sélectionné, il est ouvert dans eficas
231    """
232    fileName = None
233    code     = None
234    a=salome.sg.getAllSelected()
235    if len(a) == 1:
236       selectedEntry = a[0]
237       
238       editor = getStudyEditor()
239       mySO = editor.study.FindObjectID(selectedEntry);
240       aType = editor.getFileType(mySO)
241       aValue = editor.getFileName(mySO)
242       if aType !=  None :
243         fileName = aValue
244         code     = aType[15:]
245    else:        
246       QMessageBox.critical(None, "Selection Invalide",
247              "Selectionner un seul fichier SVP") 
248       return;
249  
250    import eficasSalome        
251    if code:
252         if version :
253             eficasSalome.runEficas( code, fileName, version=version)
254         else :
255             eficasSalome.runEficas( code, fileName)
256         
257
258 # Partie applicative
259
260 dict_command={
261                 GUIcontext.ASTER_ID      : runEficaspourAster,
262                 GUIcontext.OM_ID         : runEficaspourOM,
263                 GUIcontext.MAP_ID        : runEficaspourMap,
264                 GUIcontext.OT_STUDY_ID   : runEficaspourOpenturnsStudy,
265                 GUIcontext.OT_WRAPPER_ID : runEficaspourOpenturnsWrapper,
266                 GUIcontext.CARMEL3D_ID   : runEficaspourCarmel3D,
267                 GUIcontext.MULTICATALOG_ID : runEficas,
268
269                 9041:runEficasFichier,
270              }