]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/qtEficas.py
Salome HOME
1872094b7bc9adf69aa9a0ad3455699bd087dfe2
[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=1500
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.multi=True
228         self.demande=False
229         self.fileNew()
230
231     def newPSEN(self):
232         ssCode=None
233         code="PSEN"
234         self.cleanPath()
235         dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
236         sys.path.insert(0,dirCode)
237         self.code=code
238         self.definitCode(code,ssCode)
239         self.multi=True
240         self.demande=False
241         self.fileNew()
242
243     def ajoutN1(self):
244         self.menuN1 = self.menubar.addMenu(tr("Process Output"))
245         self.actionN1 = QAction(self)
246         self.actionN1.setText(tr("Process Output"))
247         self.menuN1.addAction(self.actionN1)
248         if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
249         else         : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
250
251     def ajoutExecution(self):
252         self.menuExecution = self.menubar.addMenu(tr("Run"))
253         self.actionExecution = QAction(self)
254         if sys.platform[0:5]=="linux":
255           icon6 = QIcon(self.repIcon+"/roue.png")
256           self.actionExecution.setIcon(icon6)
257         else :
258           self.actionExecution.setText(tr("Run"))
259         self.actionExecution.setObjectName("actionExecution")
260         self.menuExecution.addAction(self.actionExecution)
261         if not(self.actionExecution in self.toolBar.actions()):
262            self.toolBar.addAction(self.actionExecution)
263         self.actionExecution.setText(tr("Run"))
264         if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
265         else         : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
266
267     def ajoutSauveExecution(self):
268         self.actionSaveRun = QAction(self)
269         icon7 = QIcon(self.repIcon+"/export_MAP.png")
270         self.actionSaveRun.setIcon(icon7)
271         self.actionSaveRun.setObjectName("actionSaveRun")
272         self.menuExecution.addAction(self.actionSaveRun)
273         if not(self.actionSaveRun in self.toolBar.actions()):
274            self.toolBar.addAction(self.actionSaveRun)
275         self.actionSaveRun.setText(tr("Save Run"))
276         if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
277         else         : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
278
279     def griserActionsStructures(self):
280         self.actionCouper.setEnabled(False)
281         self.actionColler.setEnabled(False)
282         self.actionCopier.setEnabled(False)
283         self.actionSupprimer.setEnabled(False)
284
285     def enleverActionsStructures(self):
286         self.toolBar.removeAction(self.actionCopier)
287         self.toolBar.removeAction(self.actionColler)
288         self.toolBar.removeAction(self.actionCouper)
289         self.menuEdition.removeAction(self.actionCouper)
290         self.menuEdition.removeAction(self.actionCopier)
291         self.menuEdition.removeAction(self.actionColler)
292
293
294     def enleverParametres(self):
295         self.toolBar.removeAction(self.actionParametres)
296         self.menuJdC.removeAction(self.actionParametres)
297
298
299     def enleverNewInclude(self):
300         self.actionNouvel_Include.setVisible(False)
301
302     def enleverRechercherDsCatalogue(self):
303         self.actionRechercherDsCatalogue.setVisible(False)
304
305     def connectRechercherDsCatalogue(self):
306         if monEnvQT5:
307           self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
308         else :
309           self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
310
311     def ZCRACKS(self):
312         self.enleverNewInclude()
313         self.toolBar.addSeparator()
314         self.ajoutExecution()
315
316         self.menuOptions = self.menubar.addMenu("menuOptions")
317         self.menuOptions.addAction(self.actionParametres_Eficas)
318         self.menuOptions.setTitle(tr("Options"))
319
320     def ADAO(self):
321         self.enleverActionsStructures()
322         self.enleverNewInclude()
323
324     def ASTER(self) :
325         self.menuTraduction = self.menubar.addMenu("menuTraduction")
326         self.menuTraduction.addAction(self.actionTraduitV11V12)
327         self.menuTraduction.addAction(self.actionTraduitV10V11)
328         self.menuTraduction.addAction(self.actionTraduitV9V10)
329         self.menuTraduction.setTitle(tr("Traduction"))
330
331         self.menuFichier.addAction(self.actionSauveLigne)
332
333         self.menuOptions = self.menubar.addMenu("menuOptions")
334         self.menuOptions.addAction(self.actionParametres_Eficas)
335         self.menuOptions.addAction(self.actionLecteur_Pdf)
336         self.menuOptions.setTitle(tr("Options"))
337
338     def CARMEL3D(self):
339         #if self.salome == 0 : return
340         self.enleverNewInclude()
341         self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
342         self.menuMesh.setObjectName("Mesh")
343         self.menuMesh.addAction(self.actionChercheGrpMaille)
344         #self.griserActionsStructures()
345
346     def CARMELCND(self):
347         self.enleverNewInclude()
348         self.enleverRechercherDsCatalogue()
349         self.ajoutExecution()
350         self.ajoutSauveExecution()
351         self.griserActionsStructures()
352         
353     def MAP(self):
354         self.enleverNewInclude()
355         self.toolBar.addSeparator()
356         self.ajoutExecution()
357         self.ajoutSauveExecution()
358         self.menuOptions = self.menubar.addMenu("menuOptions")
359         self.menuOptions.addAction(self.actionParametres_Eficas)
360         self.menuOptions.setTitle(tr("Options"))
361
362     def PSEN(self):
363         if self.first:
364          self.first=0
365          if monEnvQT5:
366            self.action_Nouveau.triggered.disconnect(self.fileNew)
367            self.action_Nouveau.triggered.connect(self.newPSEN)
368            self
369          else :
370            self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
371            self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
372         self.enleverActionsStructures()
373         self.enleverParametres()
374         self.enleverRechercherDsCatalogue()
375         self.enleverNewInclude()
376         self.ajoutExecution()
377         self.ajoutN1()
378         self.ajoutHelpPSEN()
379         self.ajoutIcones()
380
381     def PSEN_N1(self):
382         self.enleverActionsStructures()
383         self.enleverParametres()
384         self.enleverRechercherDsCatalogue()
385         self.enleverNewInclude()
386         self.ajoutExecution()
387         self.ajoutIcones()
388
389     def TELEMAC(self):
390         self.enleverActionsStructures()
391         self.enleverNewInclude()
392         self.connectRechercherDsCatalogue()
393
394     def ajoutHelpPSEN(self):
395         self.actionParametres_Eficas.setText('Help PSEN')
396 #
397         #Oself.disconnect(self.actionParametres_Eficas)
398         if monEnvQT5 :  self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
399         else  : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
400         
401
402
403     def ChercheGrpMesh(self):
404         Msg,listeGroup=self.ChercheGrpMeshInSalome()
405         if Msg == None :
406            self.viewmanager.handleAjoutGroup(listeGroup)
407         else :
408            print "il faut gerer les erreurs"
409
410     def ChercheGrpMaille(self):
411         # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
412         try:
413             Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salomé
414             #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salomé si ligne précédente commentée
415         except:
416             raise ValueError('Salome non ouvert')
417         if Msg == None :
418            self.viewmanager.handleAjoutGroup(listeGroup)
419         else :
420            print "il faut gerer les erreurs"
421
422
423     def ChercheGrp(self):
424         #Msg,listeGroup=self.ChercheGrpMailleInSalome()
425         #if Msg == None :
426         #   self.viewmanager.handleAjoutGroup(listeGroup)
427         #else :
428         #print "il faut gerer "
429         pass
430
431
432     def ajoutIcones(self) :
433         # Pour pallier les soucis de repertoire d icone
434         #print self.repIcon
435         icon = QIcon(self.repIcon+"/new_file.png")
436         self.action_Nouveau.setIcon(icon)
437         icon1 = QIcon(self.repIcon+"/ouvrir.png")
438         self.actionOuvrir.setIcon(icon1)
439         icon2 = QIcon(self.repIcon+"/save.png")
440         self.actionEnregistrer.setIcon(icon2)
441         icon6 = QIcon(self.repIcon+"/delete.png")
442         self.actionSupprimer.setIcon(icon6)
443         icon7 = QIcon(self.repIcon+"/roue.png")
444         self.actionExecution.setIcon(icon7)
445
446
447
448    
449     def connecterSignauxQT4(self) :
450         self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
451
452         self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
453         self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
454         self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
455         self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
456         self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
457         self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
458         self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
459         self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
460
461         self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
462         self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
463         self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
464
465         self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
466         self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
467         self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
468         self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
469         self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
470         self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
471
472         self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
473         self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
474         self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
475         self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
476
477
478
479         # Pour Aster
480         self.actionTraduitV9V10 = QAction(self)
481         self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
482         self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
483         self.actionTraduitV10V11 = QAction(self)
484         self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
485         self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
486         self.actionTraduitV11V12 = QAction(self)
487         self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
488         self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
489         self.actionSauveLigne = QAction(self)
490         self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
491
492         #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
493         self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
494         self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
495         self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
496         self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
497         self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
498
499
500         # Pour Carmel
501         self.actionChercheGrpMaille = QAction(self)
502         self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
503         self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
504
505         # Pour CarmelCND
506         self.actionChercheGrp = QAction(self)
507         self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
508         self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
509
510         # Pour Aide
511         self.actionCode = QAction(self)
512         self.actionCode.setText(tr("Specificites Maille"))
513         self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
514
515     def connecterSignaux(self) :
516
517         self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
518         self.action_Nouveau.triggered.connect(self.fileNew)
519         self.actionNouvel_Include.triggered.connect(self.NewInclude)
520         self.actionOuvrir.triggered.connect(self.fileOpen)
521         self.actionEnregistrer.triggered.connect(self.fileSave)
522         self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
523         self.actionFermer.triggered.connect(self.fileClose)
524         self.actionFermer_tout.triggered.connect(self.fileCloseAll)
525         self.actionQuitter.triggered.connect(self.fileExit)
526
527         self.actionEficas.triggered.connect(self.aidePPal)
528         self.actionVersion.triggered.connect(self.version)
529         self.actionParametres.triggered.connect(self.gestionParam)
530
531         self.actionCouper.triggered.connect(self.editCut)
532         self.actionCopier.triggered.connect(self.editCopy)
533         self.actionColler.triggered.connect(self.editPaste)
534         self.actionSupprimer.triggered.connect(self.supprimer)
535         self.actionRechercher.triggered.connect(self.rechercher)
536         self.actionDeplier_replier.triggered.connect(self.Deplier)
537
538         self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
539         self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
540         self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
541         self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
542
543
544         # Pour Aster
545         self.actionTraduitV9V10 = QAction(self)
546         self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
547         self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
548         self.actionTraduitV10V11 = QAction(self)
549         self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
550         self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
551         self.actionTraduitV11V12 = QAction(self)
552         self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
553         self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
554         self.actionSauveLigne = QAction(self)
555         self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
556
557         #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
558         self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
559         self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
560         self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
561         self.actionSauveLigne.triggered.connect(self.sauveLigne)
562
563         # Pour Carmel
564         self.actionChercheGrpMaille = QAction(self)
565         self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
566
567         # Pour CarmelCND
568         self.actionChercheGrp = QAction(self)
569         self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
570         self.actionChercheGrp.triggered.connect(self.ChercheGrp)
571
572         # Pour Aide
573         self.actionCode = QAction(self)
574         self.actionCode.setText(tr("Specificites Maille"))
575         self.actionCode.triggered.connect(self.aideCode)
576
577
578     def Deplier(self):
579         self.viewmanager.handleDeplier()
580
581     def ouvreFichiers(self) :
582     # Ouverture des fichiers de commandes donnes sur la ligne de commande
583         cwd=os.getcwd()
584         self.dir=cwd
585         for study in session.d_env.studies:
586             os.chdir(cwd)
587             d=session.get_unit(study,self)
588             self.viewmanager.handleOpen(fichier=study["comm"],units=d)
589
590
591     def  get_source(self,file):
592     # appele par Editeur/session.py
593         import convert
594         p=convert.plugins['python']()
595         p.readfile(file)
596         texte=p.convert('execnoparseur')
597         return texte
598
599     def initPatrons(self) :
600     # Mise a jour du menu des fichiers recemment ouverts
601         from Editeur import listePatrons
602         if not(self.code in listePatrons.sous_menus.keys()) :
603            if hasattr(self,"menuPatrons"):
604               self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
605               self.menuPatrons.close()
606               delattr(self,"menuPatrons")
607            return
608         if (not hasattr(self,"menuPatrons")):
609            self.menuPatrons = QMenu(self.menubar)
610            self.menuPatrons.setObjectName("menuPatrons")
611            self.menubar.addAction(self.menuPatrons.menuAction())
612            self.menuPatrons.setTitle(tr("Patrons"))
613         else :
614            self.menuPatrons.clear()
615         self.listePatrons = listePatrons.listePatrons(self.code)
616         idx = 0
617         for nomSsMenu in self.listePatrons.liste.keys():
618             ssmenu=self.menuPatrons.addMenu(nomSsMenu)
619             for fichier in self.listePatrons.liste[nomSsMenu]:
620                id = ssmenu.addAction(fichier)
621                self.ficPatrons[id]=fichier
622                if monEnvQT5 :  self.id.triggered.connect(self.handleOpenPatrons)
623                else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
624             #   self.Patrons.setItemParameter(id,idx)
625                idx=idx+1
626
627     def initRecents(self):
628        try :
629            if sys.platform[0:5]=="linux" :
630               rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
631            else :
632               rep=os.path.join('C:/','.config/Eficas',self.code)
633            monFichier=rep+"/listefichiers_"+self.code
634            index=0
635            f=open(monFichier)
636            while ( index < 9) :
637               ligne=f.readline()
638               if ligne != "" :
639                  l=(ligne.split("\n"))[0]
640                  self.recent.append(l)
641               index=index+1
642        except :
643            pass
644
645        try    : f.close()
646        except : pass
647
648     def addToRecentList(self, fn):
649       if not monEnvQT5 : self.addToRecentListQT4(fn); return
650       while fn in self.recent: self.recent.remove(fn)
651       self.recent.insert(0,fn)
652       if len(self.recent) > 9:
653          self.recent = self.recent[:9]
654
655
656     def addToRecentListQT4(self, fn):
657         """
658         Public slot to add a filename to the list of recently opened files.
659
660         @param fn name of the file to be added
661         """
662         self.recent.removeAll(fn)
663         self.recent.prepend(fn)
664         if len(self.recent) > 9:
665             self.recent = self.recent[:9]
666         index=0
667         self.sauveRecents()
668
669     def sauveRecents(self) :
670        try :
671          rep=self.CONFIGURATION.rep_user
672          monFichier=rep+"/listefichiers_"+self.code
673        except :
674          return
675        try :
676             f=open(monFichier,'w')
677             if len(self.recent) == 0 : return
678             index=0
679             while ( index <  len(self.recent)):
680               ligne=str(self.recent[index])+"\n"
681               f.write(ligne)
682               index=index+1
683        except :
684             pass
685        try :
686             f.close()
687        except :
688             pass
689
690
691
692     def traductionV11V12(self):
693         from gereTraduction import traduction
694         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
695
696     def traductionV10V11(self):
697         from gereTraduction import traduction
698         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
699
700     def traductionV9V10(self):
701         from gereTraduction import traduction
702         traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
703
704     def version(self) :
705         from monVisu import DVisu
706         titre = tr("version ")
707         monVisuDialg=DVisu(parent=self,fl=0)
708         monVisuDialg.setWindowTitle(titre)
709         monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
710         monVisuDialg.adjustSize()
711         monVisuDialg.show()
712
713     def aidePPal(self) :
714         repAide=os.path.dirname(os.path.abspath(__file__))
715         maD=os.path.join( repAide,'..','Doc','html')
716         try :
717           indexAide=os.path.join(maD,'index.html')
718           if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
719           else                          : cmd="start "+indexAide
720           os.system(cmd)
721         except:
722           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
723
724     def aidePSEN(self) :
725         repAide=os.path.dirname(os.path.abspath(__file__))
726         maD=os.path.join( repAide,'..','Doc','html')
727         try :
728           indexAide=os.path.join(maD,'index.html')
729           if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
730           else                          : cmd="start "+indexAide
731           os.system(cmd)
732         except:
733           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
734
735     def aideCode(self) :
736         if self.code==None : return
737         try :
738         #if 1 :
739           if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
740           else                          : cmd="start "+self.fileDoc
741           os.system(cmd)
742         except:
743         #else:
744           QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
745
746
747     def optionEditeur(self) :
748         try :
749            name='monOptions_'+self.code
750         except :
751            QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
752            return
753         try :
754         #if 1:
755            optionCode=__import__(name)
756         except :
757         #else :
758            QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
759            return
760         monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
761         monOption.show()
762
763     def optionPdf(self) :
764         from monOptionsPdf import OptionPdf
765         monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
766         monOption.show()
767
768     def handleShowRecentMenu(self):
769         """
770         Private method to set up recent files menu.
771         """
772         self.recentMenu.clear()
773
774         for rp in self.recent:
775             id = self.recentMenu.addAction(rp)
776             self.ficRecents[id]=rp
777             if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
778             else         : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
779         self.recentMenu.addSeparator()
780         self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
781
782     def handleOpenPatrons(self):
783         idx=self.sender()
784         fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
785         self.viewmanager.handleOpen(fichier=fichier, patron = 1)
786
787     def handleOpenRecent(self):
788         idx=self.sender()
789         fichier=self.ficRecents[idx]
790         self.viewmanager.handleOpen(fichier=fichier, patron =0 )
791
792     def handleClearRecent(self):
793         self.recent = QStringList()
794         self.sauveRecents()
795
796     def handleRechercherDsCatalogue(self):
797         if not self.viewmanager : return
798         self.viewmanager.handleRechercherDsCatalogue()
799
800     def fileNew(self):
801         try:
802             self.viewmanager.newEditor()
803         except EficasException, exc:
804             msg = unicode(exc)
805             if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
806
807     def fileOpen(self):
808         try:
809             self.viewmanager.handleOpen()
810         except EficasException, exc:
811             msg = unicode(exc)
812             if msg != "":
813                 QMessageBox.warning(self, tr(u"Erreur"), msg)
814
815     def sauveLigne(self):
816         return self.viewmanager.sauveLigneCurrentEditor()
817
818     def fileSave(self):
819         return self.viewmanager.saveCurrentEditor()
820
821     def fileSaveAs(self):
822         return self.viewmanager.saveAsCurrentEditor()
823
824     def fileClose(self):
825         self.viewmanager.handleClose(texte='&Fermer')
826
827     def fileCloseAll(self):
828         self.viewmanager.handleCloseAll(texte='&Fermer')
829
830     def fileExit(self):
831         # On peut sortir sur Abort
832         res=self.viewmanager.handleCloseAll()
833         if (res != 2) :
834             self.close()
835         return res
836
837     def editCopy(self):
838         self.viewmanager.handleEditCopy()
839
840     def editCut(self):
841         self.viewmanager.handleEditCut()
842
843     def editPaste(self):
844         self.viewmanager.handleEditPaste()
845
846     def rechercher(self):
847         self.viewmanager.handleRechercher()
848
849     def run(self):
850         self.viewmanager.run()
851
852     def saveRun(self):
853         self.viewmanager.saveRun()
854
855
856     def supprimer(self):
857         self.viewmanager.handleSupprimer()
858
859     def jdcFichierSource(self):
860         self.viewmanager.handleViewJdcFichierSource()
861
862     def jdcRapport(self):
863         self.viewmanager.handleViewJdcRapport()
864
865     def jdcRegles(self):
866         self.viewmanager.handleViewJdcRegles()
867
868     def gestionParam(self):
869         self.viewmanager.handlegestionParam()
870
871     def visuJdcPy(self):
872         self.viewmanager.handleViewJdcPy()
873
874
875     def NewInclude(self):
876         self.viewmanager.newIncludeEditor()
877
878     def cleanPath(self):
879         for pathCode in self.ListePathCode:
880             try:
881               aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
882               sys.path.remove(aEnlever)
883             except :
884               pass
885         for pathCode in self.listeAEnlever:
886             try:
887               sys.path.remove(aEnlever)
888             except :
889               pass
890
891
892     def closeEvent(self,event):
893       res=self.fileExit()
894       if res==2 : event.ignore()
895
896
897 if __name__=='__main__':
898
899     # Modules Eficas
900     rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
901     sys.path.append(rep)
902     from Aster import prefsCode
903     if hasattr(prefsCode,'encoding'):
904        # Hack pour changer le codage par defaut des strings
905        import sys
906        reload(sys)
907        sys.setdefaultencoding(prefsCode.encoding)
908        del sys.setdefaultencoding
909        # Fin hack
910
911     from Editeur import import_code
912     from Editeur import session
913
914     # Analyse des arguments de la ligne de commande
915     options=session.parse(sys.argv)
916     code=options.code
917
918
919     app = QApplication(sys.argv)
920     #app.setMainWidget(mw) (qt3)
921     Eficas=Appli()
922     Eficas.show()
923
924     #mw.ouvreFichiers()
925     #mw.show()
926
927     res=app.exec_()
928     sys.exit(res)