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