]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/qtEficas.py
Salome HOME
5eb82cc6a9333fb543f7d1425d094a6d9f589c18
[tools/eficas.git] / InterfaceQT4 / qtEficas.py
1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 import os, sys
22 from  determine import monEnvQT5
23 if monEnvQT5 :
24   from PyQt5.QtWidgets import QApplication, QMainWindow, QBoxLayout, QMenu, QAction, QMessageBox
25   from PyQt5.QtGui import QIcon
26   from PyQt5.QtCore import Qt
27 else:
28   from PyQt4.QtGui  import *
29   from PyQt4.QtCore import *
30
31 from Extensions.i18n import tr
32 from Extensions.eficas_exception import EficasException
33 from Extensions import param2
34
35
36 from myMain import Ui_Eficas
37 from viewManager import MyTabview
38 from getVersion import getEficasVersion
39 from Editeur import session
40
41
42
43 class Appli(Ui_Eficas,QMainWindow):
44     """
45     Class implementing the main user interface.
46     """
47     def __init__(self,code=None,salome=0,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False):
48         """
49         Constructor
50         """
51         QMainWindow.__init__(self,parent)
52         Ui_Eficas.__init__(self)
53
54
55         version=getEficasVersion()
56         self.VERSION_EFICAS="Eficas QT4 Salome "+version
57         if monEnvQT5 : self.VERSION_EFICAS="Eficas QT5 Salome "
58         self.salome=salome
59         self.parentMainWindow=parent
60         self.ihm="QT"
61         self.ssIhm=ssIhm
62         self.top = self    #(pour CONFIGURATION)
63         self.QWParent=None #(Pour lancement sans IHM)
64         self.code=code
65         self.indice=0
66         self.first=1
67         self.dict_reels={}
68         if monEnvQT5 : self.recent =  []
69         else : self.recent =  QStringList()
70         self.ficRecents={}
71         self.mesScripts={}
72         self.listeAEnlever=[]
73         self.ListePathCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
74         self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
75         self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
76
77
78         if self.salome:
79           import Accas
80           import eficasSalome
81           Accas.SalomeEntry = eficasSalome.SalomeEntry
82
83         self.multi=multi
84         self.demande=multi # specifique PSEN
85
86
87         if self.multi == False :
88              self.definitCode(code,ssCode)
89              if code==None: return
90
91
92         if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang
93         if langue=='fr': self.langue=langue
94         else           : self.langue="ang"
95
96         from Extensions import localisation
97         app=QApplication
98         localisation.localise(None,langue)
99
100         self.setupUi(self)
101         #if parent != None : self.parentCentralWidget = parent.centralWidget()
102         #else              : self.parentCentralWidget = None 
103
104         if  hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
105         else : self.taille=1700
106
107         if self.code in ['MAP',] : self.resize(1440,self.height())
108         else : self.resize(self.taille,self.height())
109
110         icon = QIcon(self.repIcon+"/parametres.png")
111         self.actionParametres.setIcon(icon)
112
113
114         self.myQtab.removeTab(0)
115         self.blEntete= QBoxLayout(0,self.frameEntete)
116         self.blEntete.insertWidget(0,self.toolBar)
117         self.blEntete.insertWidget(0,self.menubar)
118
119         if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
120
121         eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
122
123         #self.resize(20,20)
124         self.viewmanager = MyTabview(self)
125         self.recentMenu=QMenu(tr('&Recents'))
126         #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
127         # actionARemplacer ne sert que pour l insert Menu
128         self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
129         self.menuFichier.removeAction(self.actionARemplacer)
130         if monEnvQT5 : self.connecterSignaux()
131         else         : self.connecterSignauxQT4()
132         self.toolBar.addSeparator()
133         if self.code != None : self.construitMenu()
134
135         self.setWindowTitle(self.VERSION_EFICAS)
136         #try :
137         if 1 :
138           self.ouvreFichiers()
139         #except EficasException, exc:
140         #except:
141         #  print "je suis dans le except"
142           #if self.salome == 0 : exit()
143
144         #self.adjustSize()
145
146     def closeEntete(self):
147         self.menuBar().close()
148         self.toolBar.close()
149         self.frameEntete.close()
150
151     def definitCode(self,code,ssCode) :
152         self.code=code
153         self.ssCode=ssCode
154         if self.code==None :
155            self.cleanPath()
156            from monChoixCode import MonChoixCode
157            widgetChoix = MonChoixCode(self)
158            ret=widgetChoix.exec_()
159         import sys
160         if self.code == None:return # pour le cancel de la fenetre choix code
161         name='prefs_'+self.code
162         prefsCode=__import__(name)
163
164         self.repIni=prefsCode.repIni
165         if ssCode != None :
166            self.format_fichier= ssCode  #par defaut
167            prefsCode.NAME_SCHEME=ssCode
168         else :
169            self.format_fichier="python" #par defaut
170
171         nameConf='configuration_'+self.code
172         configuration=__import__(nameConf)
173         self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
174         self.CONFIGStyle = None
175         if hasattr(configuration,'make_config_style'):
176            self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
177         #PN --> pb d exception qui font planter salome
178         # plus supporte en python 3
179         #if hasattr(prefsCode,'encoding'):
180         #   import sys
181         #   reload(sys)
182         #   sys.setdefaultencoding(prefsCode.encoding)
183
184     def construitMenu(self):
185         self.initPatrons()
186         self.initRecents()
187         self.initAides()
188         for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
189               if hasattr(self,intituleMenu):
190                  menu=getattr(self,intituleMenu)
191                  menu.setAttribute(Qt.WA_DeleteOnClose)
192                  menu.close()
193                  delattr(self,intituleMenu)
194         for intituleAction in ("actionExecution","actionSaveRun",):
195             if hasattr(self,intituleAction):
196               action=getattr(self,intituleAction)
197               self.toolBar.removeAction(action)
198         if self.code.upper() in Appli.__dict__.keys():
199           listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
200
201     def initAides(self):
202         #print "je passe la"
203         repAide=os.path.dirname(os.path.abspath(__file__))
204         fileName='index.html'
205         self.docPath=repAide+"/../Aide"
206         if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
207         if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
208         self.fileDoc=os.path.join(self.docPath,fileName)
209         self.actionCode.setText(tr("Aide specifique ")+str(self.code))
210         if not os.path.isfile(self.fileDoc) :
211                self.fileDoc=""
212                self.docPath=""
213                self.actionCode.setEnabled(False)
214                return
215
216         self.actionCode.setEnabled(True)
217         self.menuAide.addAction(self.actionCode)
218
219     def newN1(self):
220         ssCode=None
221         code="PSEN_N1"
222         self.cleanPath()
223         dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
224         sys.path.insert(0,dirCode)
225         self.code=code
226         self.definitCode(code,ssCode)
227         self.initRecents()
228         self.multi=True
229         self.demande=False
230         self.fileNew()
231
232     def newPSEN(self):
233         ssCode=None
234         code="PSEN"
235         self.cleanPath()
236         dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
237         sys.path.insert(0,dirCode)
238         self.code=code
239         self.definitCode(code,ssCode)
240         self.multi=True
241         self.demande=False
242         self.fileNew()
243
244     def ajoutN1(self):
245         self.menuN1 = self.menubar.addMenu(tr("Process Output"))
246         self.actionN1 = QAction(self)
247         self.actionN1.setText(tr("Process Output"))
248         self.menuN1.addAction(self.actionN1)
249         if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
250         else         : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
251
252
253
254         if hasattr(self,'actionOpenProcess'):return
255         
256         self.actionOpenProcess = QAction(self)
257         self.actionOpenProcess.setText(tr("Open Process_Output File"))
258         self.menuN1.addAction(self.actionOpenProcess)
259         if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
260         else         : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
261
262     def ajoutExecution(self):
263         self.menuExecution = self.menubar.addMenu(tr("&Run"))
264         self.actionExecution = QAction(self)
265         if sys.platform[0:5]=="linux":
266           icon6 = QIcon(self.repIcon+"/roue.png")
267           self.actionExecution.setIcon(icon6)
268         else :
269           self.actionExecution.setText(tr("Run"))
270         self.actionExecution.setObjectName("actionExecution")
271         self.menuExecution.addAction(self.actionExecution)
272         if not(self.actionExecution in self.toolBar.actions()):
273            self.toolBar.addAction(self.actionExecution)
274         self.actionExecution.setText(tr("Run"))
275         if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
276         else         : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
277
278     def ajoutSauveExecution(self):
279         self.actionSaveRun = QAction(self)
280         icon7 = QIcon(self.repIcon+"/export_MAP.png")
281         self.actionSaveRun.setIcon(icon7)
282         self.actionSaveRun.setObjectName("actionSaveRun")
283         self.menuExecution.addAction(self.actionSaveRun)
284         if not(self.actionSaveRun in self.toolBar.actions()):
285            self.toolBar.addAction(self.actionSaveRun)
286         self.actionSaveRun.setText(tr("Save Run"))
287         if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
288         else         : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
289
290     def griserActionsStructures(self):
291         self.actionCouper.setEnabled(False)
292         self.actionColler.setEnabled(False)
293         self.actionCopier.setEnabled(False)
294         self.actionSupprimer.setEnabled(False)
295
296     def enleverActionsStructures(self):
297         self.toolBar.removeAction(self.actionCopier)
298         self.toolBar.removeAction(self.actionColler)
299         self.toolBar.removeAction(self.actionCouper)
300         self.menuEdition.removeAction(self.actionCouper)
301         self.menuEdition.removeAction(self.actionCopier)
302         self.menuEdition.removeAction(self.actionColler)
303
304
305     def enleverParametres(self):
306         self.toolBar.removeAction(self.actionParametres)
307         self.menuJdC.removeAction(self.actionParametres)
308
309
310     def enleverNewInclude(self):
311         self.actionNouvel_Include.setVisible(False)
312
313     def enleverRechercherDsCatalogue(self):
314         self.actionRechercherDsCatalogue.setVisible(False)
315
316     def connectRechercherDsCatalogue(self):
317         if monEnvQT5:
318           self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
319         else :
320           self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
321
322     def ajoutSortieLegere(self):
323         self.actionSortieLegere = QAction(self)
324         self.actionSortieLegere.setText(tr("Sortie Legere"))
325         self.menuFichier.addAction(self.actionSortieLegere)
326         if monEnvQT5:
327           self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
328         else :
329           self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
330
331
332     def ZCRACKS(self):
333         self.enleverNewInclude()
334         self.toolBar.addSeparator()
335         self.ajoutExecution()
336
337         self.menuOptions = self.menubar.addMenu("menuOptions")
338         self.menuOptions.addAction(self.actionParametres_Eficas)
339         self.menuOptions.setTitle(tr("Options"))
340
341     def ADAO(self):
342         self.enleverActionsStructures()
343         self.enleverNewInclude()
344
345     def ASTER(self) :
346         self.menuTraduction = self.menubar.addMenu("menuTraduction")
347         self.menuTraduction.addAction(self.actionTraduitV11V12)
348         self.menuTraduction.addAction(self.actionTraduitV10V11)
349         self.menuTraduction.addAction(self.actionTraduitV9V10)
350         self.menuTraduction.setTitle(tr("Traduction"))
351
352         self.menuFichier.addAction(self.actionSauveLigne)
353
354         self.menuOptions = self.menubar.addMenu("menuOptions")
355         self.menuOptions.addAction(self.actionParametres_Eficas)
356         self.menuOptions.addAction(self.actionLecteur_Pdf)
357         self.menuOptions.setTitle(tr("Options"))
358
359     def CARMEL3D(self):
360         #if self.salome == 0 : return
361         self.enleverNewInclude()
362         self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
363         self.menuMesh.setObjectName("Mesh")
364         self.menuMesh.addAction(self.actionChercheGrpMaille)
365         #self.griserActionsStructures()
366
367     def CARMELCND(self):
368         self.enleverNewInclude()
369         self.enleverRechercherDsCatalogue()
370         self.ajoutExecution()
371         self.ajoutSauveExecution()
372         self.griserActionsStructures()
373         
374     def MAP(self):
375         self.enleverNewInclude()
376         self.toolBar.addSeparator()
377         self.ajoutExecution()
378         self.ajoutSauveExecution()
379         self.menuOptions = self.menubar.addMenu("menuOptions")
380         self.menuOptions.addAction(self.actionParametres_Eficas)
381         self.menuOptions.setTitle(tr("Options"))
382
383     def PSEN(self):
384         if self.first:
385          self.first=0
386          if monEnvQT5:
387            self.action_Nouveau.triggered.disconnect(self.fileNew)
388            self.action_Nouveau.triggered.connect(self.newPSEN)
389            self
390          else :
391            self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
392            self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
393         self.enleverActionsStructures()
394         self.enleverParametres()
395         self.enleverRechercherDsCatalogue()
396         self.enleverNewInclude()
397         self.ajoutExecution()
398         self.ajoutN1()
399         self.ajoutHelpPSEN()
400         self.ajoutIcones()
401
402     def PSEN_N1(self):
403         self.enleverActionsStructures()
404         self.enleverParametres()
405         self.enleverRechercherDsCatalogue()
406         self.enleverNewInclude()
407         self.ajoutExecution()
408         self.ajoutIcones()
409
410     def TELEMAC(self):
411         self.enleverActionsStructures()
412         self.enleverNewInclude()
413         self.connectRechercherDsCatalogue()
414         self.ajoutSortieLegere()
415
416     def ajoutHelpPSEN(self):
417         self.actionParametres_Eficas.setText('Help PSEN')
418         if monEnvQT5 :  self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
419         else  : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
420         
421
422
423     def ChercheGrpMesh(self):
424         Msg,listeGroup=self.ChercheGrpMeshInSalome()
425         if Msg == None :
426            self.viewmanager.handleAjoutGroup(listeGroup)
427         else :
428            print "il faut gerer les erreurs"
429
430     def ChercheGrpMaille(self):
431         # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
432         try:
433             Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salomé
434             #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salomé si ligne précédente commentée
435         except:
436             raise ValueError('Salome non ouvert')
437         if Msg == None :
438            self.viewmanager.handleAjoutGroup(listeGroup)
439         else :
440            print "il faut gerer les erreurs"
441
442
443     def ChercheGrp(self):
444         #Msg,listeGroup=self.ChercheGrpMailleInSalome()
445         #if Msg == None :
446         #   self.viewmanager.handleAjoutGroup(listeGroup)
447         #else :
448         #print "il faut gerer "
449         pass
450
451
452     def ajoutIcones(self) :
453         # Pour pallier les soucis de repertoire d icone
454         #print self.repIcon
455         icon = QIcon(self.repIcon+"/new_file.png")
456         self.action_Nouveau.setIcon(icon)
457         icon1 = QIcon(self.repIcon+"/ouvrir.png")
458         self.actionOuvrir.setIcon(icon1)
459         icon2 = QIcon(self.repIcon+"/save.png")
460         self.actionEnregistrer.setIcon(icon2)
461         icon6 = QIcon(self.repIcon+"/delete.png")
462         self.actionSupprimer.setIcon(icon6)
463         icon7 = QIcon(self.repIcon+"/roue.png")
464         self.actionExecution.setIcon(icon7)
465
466
467
468    
469     def connecterSignauxQT4(self) :
470         self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
471
472         self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
473         self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
474         self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
475         self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
476         self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
477         self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
478         self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
479         self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
480
481         self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
482         self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
483         self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
484
485         self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
486         self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
487         self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
488         self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
489         self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
490         self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
491
492         self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
493         self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
494         self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
495         self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
496
497
498
499         # Pour Aster
500         self.actionTraduitV9V10 = QAction(self)
501         self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
502         self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
503         self.actionTraduitV10V11 = QAction(self)
504         self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
505         self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
506         self.actionTraduitV11V12 = QAction(self)
507         self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
508         self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
509         self.actionSauveLigne = QAction(self)
510         self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
511
512         #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
513         self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
514         self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
515         self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
516         self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
517         self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
518
519
520         # Pour Carmel
521         self.actionChercheGrpMaille = QAction(self)
522         self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
523         self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
524
525         # Pour CarmelCND
526         self.actionChercheGrp = QAction(self)
527         self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
528         self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
529
530         # Pour Aide
531         self.actionCode = QAction(self)
532         self.actionCode.setText(tr("Specificites Maille"))
533         self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
534
535     def connecterSignaux(self) :
536
537         self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
538         self.action_Nouveau.triggered.connect(self.fileNew)
539         self.actionNouvel_Include.triggered.connect(self.NewInclude)
540         self.actionOuvrir.triggered.connect(self.fileOpen)
541         self.actionEnregistrer.triggered.connect(self.fileSave)
542         self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
543         self.actionFermer.triggered.connect(self.fileClose)
544         self.actionFermer_tout.triggered.connect(self.fileCloseAll)
545         self.actionQuitter.triggered.connect(self.fileExit)
546
547         self.actionEficas.triggered.connect(self.aidePPal)
548         self.actionVersion.triggered.connect(self.version)
549         self.actionParametres.triggered.connect(self.gestionParam)
550
551         self.actionCouper.triggered.connect(self.editCut)
552         self.actionCopier.triggered.connect(self.editCopy)
553         self.actionColler.triggered.connect(self.editPaste)
554         self.actionSupprimer.triggered.connect(self.supprimer)
555         self.actionRechercher.triggered.connect(self.rechercher)
556         self.actionDeplier_replier.triggered.connect(self.Deplier)
557
558         self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
559         self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
560         self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
561         self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
562
563
564         # Pour Aster
565         self.actionTraduitV9V10 = QAction(self)
566         self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
567         self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
568         self.actionTraduitV10V11 = QAction(self)
569         self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
570         self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
571         self.actionTraduitV11V12 = QAction(self)
572         self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
573         self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
574         self.actionSauveLigne = QAction(self)
575         self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
576
577         #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
578         self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
579         self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
580         self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
581         self.actionSauveLigne.triggered.connect(self.sauveLigne)
582
583         # Pour Carmel
584         self.actionChercheGrpMaille = QAction(self)
585         self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
586
587         # Pour CarmelCND
588         self.actionChercheGrp = QAction(self)
589         self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
590         self.actionChercheGrp.triggered.connect(self.ChercheGrp)
591
592         # Pour Aide
593         self.actionCode = QAction(self)
594         self.actionCode.setText(tr("Specificites Maille"))
595         self.actionCode.triggered.connect(self.aideCode)
596
597
598     def Deplier(self):
599         self.viewmanager.handleDeplier()
600
601     def ouvreFichiers(self) :
602     # Ouverture des fichiers de commandes donnes sur la ligne de commande
603         cwd=os.getcwd()
604         self.dir=cwd
605         for study in session.d_env.studies:
606             os.chdir(cwd)
607             d=session.get_unit(study,self)
608             self.viewmanager.handleOpen(fichier=study["comm"],units=d)
609
610
611     def  get_source(self,file):
612     # appele par Editeur/session.py
613         import convert
614         p=convert.plugins['python']()
615         p.readfile(file)
616         texte=p.convert('execnoparseur')
617         return texte
618
619     def initPatrons(self) :
620     # Mise a jour du menu des fichiers recemment ouverts
621         from Editeur import listePatrons
622         if not(self.code in listePatrons.sous_menus.keys()) :
623            if hasattr(self,"menuPatrons"):
624               self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
625               self.menuPatrons.close()
626               delattr(self,"menuPatrons")
627            return
628         if (not hasattr(self,"menuPatrons")):
629            self.menuPatrons = QMenu(self.menubar)
630            self.menuPatrons.setObjectName("menuPatrons")
631            self.menubar.addAction(self.menuPatrons.menuAction())
632            self.menuPatrons.setTitle(tr("Patrons"))
633         else :
634            self.menuPatrons.clear()
635         self.listePatrons = listePatrons.listePatrons(self.code)
636         idx = 0
637         for nomSsMenu in self.listePatrons.liste.keys():
638             ssmenu=self.menuPatrons.addMenu(nomSsMenu)
639             for fichier in self.listePatrons.liste[nomSsMenu]:
640                id = ssmenu.addAction(fichier)
641                self.ficPatrons[id]=fichier
642                if monEnvQT5 :  self.id.triggered.connect(self.handleOpenPatrons)
643                else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
644             #   self.Patrons.setItemParameter(id,idx)
645                idx=idx+1
646
647     def initRecents(self):
648        if monEnvQT5 : self.recent =  []
649        else : self.recent =  QStringList()
650        try :
651            if sys.platform[0:5]=="linux" :
652               rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
653            else :
654               rep=os.path.join('C:/','.config/Eficas',self.code)
655            monFichier=rep+"/listefichiers_"+self.code
656            index=0
657            f=open(monFichier)
658            while ( index < 9) :
659               ligne=f.readline()
660               if ligne != "" : 
661                  l=(ligne.split("\n"))[0]
662                  self.recent.append(l)
663               index=index+1
664        except :
665            pass
666
667        try    : f.close()
668        except : pass
669
670     def addToRecentList(self, fn):
671       if not monEnvQT5 : self.addToRecentListQT4(fn); return
672       while fn in self.recent: self.recent.remove(fn)
673       self.recent.insert(0,fn)
674       if len(self.recent) > 9:
675          self.recent = self.recent[:9]
676
677
678     def addToRecentListQT4(self, fn):
679         """
680         Public slot to add a filename to the list of recently opened files.
681
682         @param fn name of the file to be added
683         """
684         self.recent.removeAll(fn)
685         self.recent.prepend(fn)
686         if len(self.recent) > 9:
687             self.recent = self.recent[:9]
688         index=0
689         self.sauveRecents()
690
691     def sauveRecents(self) :
692        try :
693          rep=self.CONFIGURATION.rep_user
694          monFichier=rep+"/listefichiers_"+self.code
695        except :
696          return
697        try :
698             f=open(monFichier,'w')
699             if len(self.recent) == 0 : return
700             index=0
701             while ( index <  len(self.recent)):
702               ligne=str(self.recent[index])+"\n"
703               f.write(ligne)
704               index=index+1
705        except :
706             pass
707        try :
708             f.close()
709        except :
710             pass
711
712
713
714     def traductionV11V12(self):
715         from gereTraduction import traduction
716         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
717
718     def traductionV10V11(self):
719         from gereTraduction import traduction
720         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
721
722     def traductionV9V10(self):
723         from gereTraduction import traduction
724         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
725
726     def version(self) :
727         from monVisu import DVisu
728         titre = tr("version ")
729         monVisuDialg=DVisu(parent=self,fl=0)
730         monVisuDialg.setWindowTitle(titre)
731         monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
732         monVisuDialg.adjustSize()
733         monVisuDialg.show()
734
735     def aidePPal(self) :
736         repAide=os.path.dirname(os.path.abspath(__file__))
737         maD=os.path.join( repAide,'..','Doc','html')
738         try :
739           indexAide=os.path.join(maD,'index.html')
740           if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
741           else                          : cmd="start "+indexAide
742           os.system(cmd)
743         except:
744           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
745
746     def aidePSEN(self) :
747         repAide=os.path.dirname(os.path.abspath(__file__))
748         maD=os.path.join( repAide,'..','Doc','html')
749         try :
750           indexAide=os.path.join(maD,'index.html')
751           if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
752           else                          : cmd="start "+indexAide
753           os.system(cmd)
754         except:
755           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
756
757     def aideCode(self) :
758         if self.code==None : return
759         try :
760         #if 1 :
761           if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
762           else                          : cmd="start "+self.fileDoc
763           os.system(cmd)
764         except:
765         #else:
766           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
767
768
769     def optionEditeur(self) :
770         try :
771            name='monOptions_'+self.code
772         except :
773            QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
774            return
775         try :
776         #if 1:
777            optionCode=__import__(name)
778         except :
779         #else :
780            QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
781            return
782         monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
783         monOption.show()
784
785     def optionPdf(self) :
786         from monOptionsPdf import OptionPdf
787         monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
788         monOption.show()
789
790     def handleSortieLegere(self):
791         print "coucou"
792
793     def handleShowRecentMenu(self):
794         """
795         Private method to set up recent files menu.
796         """
797         self.recentMenu.clear()
798
799         for rp in self.recent:
800             id = self.recentMenu.addAction(rp)
801             self.ficRecents[id]=rp
802             if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
803             else         : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
804         self.recentMenu.addSeparator()
805         self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
806
807     def handleOpenPatrons(self):
808         idx=self.sender()
809         fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
810         self.viewmanager.handleOpen(fichier=fichier, patron = 1)
811
812     def handleOpenRecent(self):
813         idx=self.sender()
814         fichier=self.ficRecents[idx]
815         self.viewmanager.handleOpen(fichier=fichier, patron =0 )
816
817     def handleClearRecent(self):
818         self.recent = QStringList()
819         self.sauveRecents()
820
821     def handleRechercherDsCatalogue(self):
822         if not self.viewmanager : return
823         self.viewmanager.handleRechercherDsCatalogue()
824
825     def fileNew(self):
826         try:
827             self.viewmanager.newEditor()
828         except EficasException, exc:
829             msg = unicode(exc)
830             if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
831
832     def openProcess(self):
833         ssCode=None
834         code="PSEN_N1"
835         self.cleanPath()
836         dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
837         sys.path.insert(0,dirCode)
838         self.code=code
839         self.definitCode(code,ssCode)
840         self.multi=True
841         self.demande=False
842         self.initRecents()
843         self.fileOpen()
844         
845
846     def fileOpen(self):
847         try:
848             self.viewmanager.handleOpen()
849         except EficasException, exc:
850             msg = unicode(exc)
851             if msg != "":
852                 QMessageBox.warning(self, tr(u"Erreur"), msg)
853
854     def sauveLigne(self):
855         return self.viewmanager.sauveLigneCurrentEditor()
856
857     def fileSave(self):
858         return self.viewmanager.saveCurrentEditor()
859
860     def fileSaveAs(self):
861         return self.viewmanager.saveAsCurrentEditor()
862
863     def fileClose(self):
864         self.viewmanager.handleClose(texte='&Fermer')
865
866     def fileCloseAll(self):
867         self.viewmanager.handleCloseAll(texte='&Fermer')
868
869     def fileExit(self):
870         # On peut sortir sur Abort
871         res=self.viewmanager.handleCloseAll()
872         if (res != 2) :
873             self.close()
874         return res
875
876     def editCopy(self):
877         self.viewmanager.handleEditCopy()
878
879     def editCut(self):
880         self.viewmanager.handleEditCut()
881
882     def editPaste(self):
883         self.viewmanager.handleEditPaste()
884
885     def rechercher(self):
886         self.viewmanager.handleRechercher()
887
888     def run(self):
889         self.viewmanager.run()
890
891     def saveRun(self):
892         self.viewmanager.saveRun()
893
894
895     def supprimer(self):
896         self.viewmanager.handleSupprimer()
897
898     def jdcFichierSource(self):
899         self.viewmanager.handleViewJdcFichierSource()
900
901     def jdcRapport(self):
902         self.viewmanager.handleViewJdcRapport()
903
904     def jdcRegles(self):
905         self.viewmanager.handleViewJdcRegles()
906
907     def gestionParam(self):
908         self.viewmanager.handlegestionParam()
909
910     def visuJdcPy(self):
911         self.viewmanager.handleViewJdcPy()
912
913
914     def NewInclude(self):
915         self.viewmanager.newIncludeEditor()
916
917     def cleanPath(self):
918         for pathCode in self.ListePathCode:
919             try:
920               aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
921               sys.path.remove(aEnlever)
922             except :
923               pass
924         for pathCode in self.listeAEnlever:
925             try:
926               sys.path.remove(aEnlever)
927             except :
928               pass
929
930
931     def closeEvent(self,event):
932       res=self.fileExit()
933       if res==2 : event.ignore()
934
935
936 if __name__=='__main__':
937
938     # Modules Eficas
939     rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
940     sys.path.append(rep)
941     from Aster import prefsCode
942     if hasattr(prefsCode,'encoding'):
943        # Hack pour changer le codage par defaut des strings
944        import sys
945        reload(sys)
946        sys.setdefaultencoding(prefsCode.encoding)
947        del sys.setdefaultencoding
948        # Fin hack
949
950     from Editeur import import_code
951     from Editeur import session
952
953     # Analyse des arguments de la ligne de commande
954     options=session.parse(sys.argv)
955     code=options.code
956
957
958     app = QApplication(sys.argv)
959     #app.setMainWidget(mw) (qt3)
960     Eficas=Appli()
961     Eficas.show()
962
963     #mw.ouvreFichiers()
964     #mw.show()
965
966     res=app.exec_()
967     sys.exit(res)