Salome HOME
e25b0626fda5044af8869325b03038e4cfad82bd
[tools/eficas.git] / InterfaceQT4 / qtEficas.py
1 # -*- coding: iso-8859-1 -*-
2
3 import os, sys
4
5 from PyQt4.QtGui  import *
6 from PyQt4.QtCore import *
7 from PyQt4.QtAssistant import *
8 from myMain import Ui_Eficas
9 from viewManager import MyTabview
10
11 from Editeur import session
12
13
14 class Appli(Ui_Eficas,QMainWindow):    
15     """
16     Class implementing the main user interface.
17     """
18     def __init__(self,code="ASTER",salome=0,parent=None,ssCode=None):
19         """
20         Constructor
21         """
22         self.VERSION_EFICAS="Eficas QT4 V2.0"
23
24         self.ihm="QT"
25         self.code=code
26         self.ssCode=ssCode
27         self.salome=salome
28         self.top = self #(pour CONFIGURATION)
29         self.QWParent=None #(Pour lancement sans IHM)
30         self.indice=0
31         self.dict_reels={}
32
33         import prefs
34         prefs.code=code
35         name='prefs_'+prefs.code
36         prefsCode=__import__(name)
37         self.REPINI=prefsCode.REPINI
38         self.RepIcon=prefsCode.INSTALLDIR+"/Editeur/icons"
39         self.INSTALLDIR=prefsCode.INSTALLDIR
40         if ssCode != None :
41            self.format_fichier= ssCode  #par defaut
42            prefsCode.NAME_SCHEME=ssCode
43         else :
44            self.format_fichier="python" #par defaut
45
46         if salome :
47            import sys
48         nameConf='configuration_'+prefs.code
49         configuration=__import__(nameConf)
50         self.CONFIGURATION = configuration.make_config(self,prefsCode.REPINI)
51         self.CONFIGStyle = None
52         if hasattr(configuration,'make_config_style'):
53            self.CONFIGStyle = configuration.make_config_style(self,prefsCode.REPINI)
54         if hasattr(prefsCode,'encoding'):
55            import sys
56            reload(sys)
57            sys.setdefaultencoding(prefsCode.encoding)
58
59         QMainWindow.__init__(self,parent)
60         Ui_Eficas.__init__(self)
61         self.setupUi(self)
62         self.ajoutIcones()
63         if code in Appli.__dict__.keys():
64           listeTexte=apply(Appli.__dict__[code],(self,))
65
66         self.viewmanager = MyTabview(self) 
67         self.recentMenu=self.menuFichier.addMenu(self.trUtf8('&Recents'))
68         self.connecterSignaux() 
69
70
71         #if self.salome :
72         #   from Editeur import session
73         #   self.ouvreFichiers()
74
75         self.recent =  QStringList()
76         self.ficPatrons={}
77         self.initPatrons()
78         self.ficRecents={}
79         self.initRecents()
80
81         self.ouvreFichiers()
82         self.setWindowTitle(self.VERSION_EFICAS)
83         
84     def ASTER(self) :
85         self.menuTraduction = self.menubar.addMenu("menuTraduction")
86         self.actionTraduitV7V8 = QAction(self)
87         self.actionTraduitV7V8.setObjectName("actionTraduitV7V8")
88         self.actionTraduitV8V9 = QAction(self)
89         self.actionTraduitV8V9.setObjectName("actionTraduitV8V9")
90         self.menuTraduction.addAction(self.actionTraduitV7V8)
91         self.menuTraduction.addAction(self.actionTraduitV8V9)
92         self.menuTraduction.setTitle(QApplication.translate("Eficas", "Traduction", None, QApplication.UnicodeUTF8))
93         self.actionTraduitV7V8.setText(QApplication.translate("Eficas","TraduitV7V8", None, QApplication.UnicodeUTF8))
94         self.actionTraduitV8V9.setText(QApplication.translate("Eficas","TraduitV8V9", None, QApplication.UnicodeUTF8))
95         self.connect(self.actionTraduitV7V8,SIGNAL("activated()"),self.traductionV7V8)
96         self.connect(self.actionTraduitV8V9,SIGNAL("activated()"),self.traductionV8V9)
97
98
99     def Map(self): 
100         self.MAP()
101
102     def MAP(self): 
103         self.actionExecution = QAction(self)
104         icon6 = QIcon(self.RepIcon+"/compute.png")
105         self.actionExecution.setIcon(icon6)
106         self.actionExecution.setObjectName("actionExecution")
107         self.menuJdC.addAction(self.actionExecution)
108         self.toolBar.addAction(self.actionExecution)
109         self.actionExecution.setText(QApplication.translate("Eficas", "Execution", None, QApplication.UnicodeUTF8))
110         self.connect(self.actionExecution,SIGNAL("activated()"),self.run)
111
112         self.actionEnregistrer_Python = QAction(self)
113         self.actionEnregistrer_Python.setObjectName("actionEnregistrer_Python")
114         self.menuFichier.addAction(self.actionEnregistrer_Python)
115         self.actionEnregistrer_Python.setText(QApplication.translate("Eficas", "Sauve Python", None,QApplication.UnicodeUTF8))
116         self.connect(self.actionEnregistrer_Python,SIGNAL("activated()"),self.saveRun)
117
118         self.actionEnregistrerYACS = QAction(self)
119         self.actionEnregistrerYACS.setObjectName("actionEnregistrerYACS")
120         self.menuFichier.addAction(self.actionEnregistrerYACS)
121         self.actionEnregistrerYACS.setText(QApplication.translate("Eficas", "Sauve Schema YACS", None,QApplication.UnicodeUTF8))
122         self.connect(self.actionEnregistrerYACS,SIGNAL("activated()"),self.saveYACS)
123
124         self.actionExecutionYACS = QAction(self)
125         icon7 = QIcon(self.RepIcon+"/application.gif")
126         self.actionExecutionYACS.setIcon(icon7)
127         self.actionExecutionYACS.setObjectName("actionExecutionYACS")
128         self.menuJdC.addAction(self.actionExecutionYACS)
129         self.toolBar.addAction(self.actionExecutionYACS)
130         self.actionExecutionYACS.setText(QApplication.translate("Eficas", "Execution YACS", None, QApplication.UnicodeUTF8))
131         self.connect(self.actionExecutionYACS,SIGNAL("activated()"),self.runYACS)
132
133     def ajoutIcones(self) :
134         # Pour pallier les soucis de repertoire d icone
135         icon = QIcon(self.RepIcon+"/New24.png")
136         self.action_Nouveau.setIcon(icon)
137         icon1 = QIcon(self.RepIcon+"/Open24.png")
138         self.action_Ouvrir.setIcon(icon1)
139         icon2 = QIcon(self.RepIcon+"/Save24.png")
140         self.actionEnregistrer.setIcon(icon2)
141         icon3 = QIcon(self.RepIcon+"/Cut24.png")
142         self.actionCouper.setIcon(icon3)
143         icon4 = QIcon(self.RepIcon+"/Copy24.png")
144         self.actionCopier.setIcon(icon4)
145         icon5 = QIcon(self.RepIcon+"/Paste24.png")
146         self.actionColler.setIcon(icon5)
147
148
149     def connecterSignaux(self) :
150         self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
151
152         self.connect(self.action_Nouveau,SIGNAL("activated()"),self.fileNew)
153         self.connect(self.actionNouvel_Include,SIGNAL("activated()"),self.NewInclude)
154         self.connect(self.action_Ouvrir,SIGNAL("activated()"),self.fileOpen)
155         self.connect(self.actionEnregistrer,SIGNAL("activated()"),self.fileSave)
156         self.connect(self.actionEnregistrer_sous,SIGNAL("activated()"),self.fileSaveAs)
157         self.connect(self.actionFermer,SIGNAL("activated()"),self.fileClose)
158         self.connect(self.actionFermer_tout,SIGNAL("activated()"),self.fileCloseAll)
159         self.connect(self.actionQuitter,SIGNAL("activated()"),self.fileExit)
160
161         self.connect(self.actionEficas,SIGNAL("activated()"),self.aidePPal)
162         self.connect(self.actionVersion,SIGNAL("activated()"),self.version)
163
164         self.connect(self.actionCouper,SIGNAL("activated()"),self.editCut)
165         self.connect(self.actionCopier,SIGNAL("activated()"),self.editCopy)
166         self.connect(self.actionColler,SIGNAL("activated()"),self.editPaste)
167         self.connect(self.actionSupprimer,SIGNAL("activated()"),self.supprimer)
168
169         self.connect(self.actionRapport_de_Validation,SIGNAL("activated()"),self.jdcRapport)
170         self.connect(self.actionFichier_Source,SIGNAL("activated()"),self.jdcFichierSource)
171         self.connect(self.actionFichier_Resultat,SIGNAL("activated()"),self.visuJdcPy)
172
173         self.connect(self.actionParametres_Eficas,SIGNAL("activated()"),self.optionEditeur)
174         self.connect(self.actionLecteur_Pdf,SIGNAL("activated()"),self.optionPdf)
175
176         #self.connect(self.helpIndexAction,SIGNAL("activated()"),self.helpIndex)
177         #self.connect(self.helpContentsAction,SIGNAL("activated()"),self.helpContents)
178                              
179
180     def ouvreFichiers(self) :
181     # Ouverture des fichiers de commandes donnes sur la ligne de commande
182         cwd=os.getcwd()
183         self.dir=cwd
184         for study in session.d_env.studies:
185             os.chdir(cwd)
186             d=session.get_unit(study,self)
187             self.viewmanager.handleOpen(fichier=study["comm"],units=d)
188
189     def  get_source(self,file):
190     # appele par Editeur/session.py
191         import convert
192         p=convert.plugins['python']()
193         p.readfile(file)
194         texte=p.convert('execnoparseur')
195         return texte
196
197
198         
199     def initPatrons(self) :
200     # Mise Ã  jour du menu des fichiers recemment ouverts
201         from Editeur import listePatrons
202         self.listePatrons = listePatrons.listePatrons(self.code)
203         idx = 0
204         for nomSsMenu in self.listePatrons.liste.keys():
205             ssmenu=self.menuPatrons.addMenu(nomSsMenu)
206             for fichier in self.listePatrons.liste[nomSsMenu]:
207                id = ssmenu.addAction(fichier)
208                self.ficPatrons[id]=fichier
209                self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
210             #   self.Patrons.setItemParameter(id,idx)
211                idx=idx+1
212
213     def initRecents(self):
214        try :
215            rep=self.CONFIGURATION.rep_user
216            monFichier=rep+"/listefichiers_"+self.code
217            index=0
218            f=open(monFichier)
219            while ( index < 9) :
220               ligne=f.readline()
221               if ligne != "" :
222                  l=(ligne.split("\n"))[0]
223                  self.recent.append(l)
224               index=index+1
225        except :
226            pass
227
228        try    : f.close()
229        except : pass
230
231     def addToRecentList(self, fn):
232         """
233         Public slot to add a filename to the list of recently opened files.
234
235         @param fn name of the file to be added
236         """
237         self.recent.removeAll(fn)
238         self.recent.prepend(fn)
239         if len(self.recent) > 9:
240             self.recent = self.recent[:9]
241
242     def sauveRecents(self) :
243        rep=self.CONFIGURATION.rep_user
244        monFichier=rep+"/listefichiers_"+self.code
245        try :
246             f=open(monFichier,'w')
247             if len(self.recent) == 0 : return
248             index=0
249             while ( index <  len(self.recent)):
250               ligne=str(self.recent[index])+"\n"
251               f.write(ligne)
252               index=index+1
253        except :
254             pass
255        try :
256             f.close()
257        except :
258             pass
259
260
261
262     def traductionV7V8(self):
263         from gereTraduction import traduction
264         traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V7V8")
265
266     def traductionV8V9(self):
267         from gereTraduction import traduction
268         traduction(self.CONFIGURATION.rep_ini,self.viewmanager,"V8V9")
269
270     def version(self) :
271         from monVisu import DVisu
272         titre = "version "
273         monVisuDialg=DVisu(parent=self,fl=0)
274         monVisuDialg.setWindowTitle(titre)
275         monVisuDialg.TB.setText(self.VERSION_EFICAS +QString(" pour ") + self.code)
276         monVisuDialg.adjustSize()
277         monVisuDialg.show()
278
279     def aidePPal(self) :
280         maD=self.INSTALLDIR+"/Aide"
281         docsPath = QDir(maD).absolutePath()
282         monAssistant=QAssistantClient(QString(""), self)
283         arguments=QStringList()
284         arguments << "-profile" <<docsPath+QDir.separator()+QString("eficas_")+QString(self.code)+QString(".adp");
285         monAssistant.setArguments(arguments);
286         monAssistant.showPage(docsPath+QDir.separator()+QString("fichiers_"+QString(self.code)+QString("/index.html")))
287
288     def optionEditeur(self) :
289         name='monOptions_'+self.code
290         try :
291         #if 1 :
292            optionCode=__import__(name)
293         except :
294         #else :
295            QMessageBox.critical( self, "Parametrage", "Pas de possibilite de personnalisation de la configuration ")
296            return
297         monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
298         monOption.show()
299         
300     def optionPdf(self) :
301         from monOptionsPdf import OptionPdf
302         monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
303         monOption.show()
304         
305     def handleShowRecentMenu(self):
306         """
307         Private method to set up recent files menu.
308         """
309         self.recentMenu.clear()
310         
311         for rp in self.recent:
312             id = self.recentMenu.addAction(rp)
313             self.ficRecents[id]=rp
314             self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
315         self.recentMenu.addSeparator()
316         self.recentMenu.addAction(self.trUtf8('&Clear'), self.handleClearRecent)
317         
318     def handleOpenPatrons(self):
319         idx=self.sender()
320         fichier=self.REPINI+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
321         self.viewmanager.handleOpen(fichier=fichier, patron = 1)
322
323     def handleOpenRecent(self):
324         idx=self.sender()
325         fichier=self.ficRecents[idx]
326         self.viewmanager.handleOpen(fichier=fichier, patron =0 )
327         
328     def handleClearRecent(self):
329         self.recent = QStringList()
330         self.sauveRecents()
331         
332     def fileNew(self):        
333         self.viewmanager.newEditor()        
334         
335     def fileOpen(self ):
336         self.viewmanager.handleOpen()        
337         
338     def fileSave(self):
339         self.viewmanager.saveCurrentEditor()
340         
341     def fileSaveAs(self):
342         self.viewmanager.saveAsCurrentEditor()
343         
344     def fileClose(self):
345         self.viewmanager.handleClose()
346         
347     def fileCloseAll(self):
348         self.viewmanager.handleCloseAll()
349         
350     def fileExit(self):
351         # On peut sortir sur Abort
352         res=self.viewmanager.handleCloseAll()
353         if (res != 2) : 
354            if self.salome :
355               self.close()
356            else :
357               qApp.closeAllWindows()
358         
359     def editCopy(self):
360         self.viewmanager.handleEditCopy()
361       
362     def editCut(self):
363         self.viewmanager.handleEditCut()
364     
365     def editPaste(self):
366         self.viewmanager.handleEditPaste()
367         
368     def run(self):
369         self.viewmanager.run()
370         
371     def saveRun(self):
372         self.viewmanager.saveRun()
373         
374     def runYACS(self):
375         self.viewmanager.runYACS()
376         
377     def saveYACS(self):
378         self.viewmanager.saveYACS()
379         
380     def supprimer(self):
381         self.viewmanager.handleSupprimer()
382         
383     def jdcFichierSource(self):
384         self.viewmanager.handleViewJdcFichierSource()
385         
386     def jdcRapport(self):
387         self.viewmanager.handleViewJdcRapport()
388         
389     def visuJdcPy(self):
390         self.viewmanager.handleViewJdcPy()
391
392
393     def NewInclude(self):
394         self.viewmanager.newIncludeEditor()
395
396     def getName(self):
397         self.indice=self.indice+1
398         texte="tempo"+str(self.indice)
399         return texte
400         
401
402 if __name__=='__main__':
403
404     # Modules Eficas
405     sys.path.append(INSTALLDIR+"/Aster")
406     from Aster import prefsCode
407     if hasattr(prefsCode,'encoding'):
408        # Hack pour changer le codage par defaut des strings
409        import sys
410        reload(sys)
411        sys.setdefaultencoding(prefsCode.encoding)
412        del sys.setdefaultencoding
413        # Fin hack
414
415     from Editeur import import_code
416     from Editeur import session
417
418     # Analyse des arguments de la ligne de commande
419     options=session.parse(sys.argv)
420     code=options.code
421
422
423     app = QApplication(sys.argv)
424     #app.setMainWidget(mw) (qt3)
425     Eficas=Appli()
426     Eficas.show()
427
428     #app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
429     #mw.ouvreFichiers()
430     #mw.show()
431
432     res=app.exec_()
433     sys.exit(res)