1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
22 from __future__ import print_function
24 from builtins import str
31 from PyQt5.QtWidgets import QApplication, QMainWindow, QBoxLayout, QMenu, QAction, QMessageBox
32 from PyQt5.QtGui import QIcon
33 from PyQt5.QtCore import Qt
35 from Extensions.i18n import tr
36 from Extensions.eficas_exception import EficasException
37 from Extensions import param2
40 from myMain import Ui_Eficas
41 from .viewManager import MyTabview
42 from .getVersion import getEficasVersion
43 from Editeur import session
47 class Appli(Ui_Eficas,QMainWindow):
49 Class implementing the main user interface.
51 def __init__(self,code=None,salome=0,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False):
55 QMainWindow.__init__(self,parent)
56 Ui_Eficas.__init__(self)
59 version=getEficasVersion()
60 self.VERSION_EFICAS="Eficas QT5 Salome " + version
62 self.parentMainWindow=parent
65 self.top = self #(pour CONFIGURATION)
66 self.QWParent=None #(Pour lancement sans IHM)
75 self.ListePathCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
76 self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
77 self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
79 if langue=='fr': self.langue=langue
80 else : self.langue="ang"
85 Accas.SalomeEntry = eficasSalome.SalomeEntry
88 self.demande=multi # specifique PSEN
91 if self.multi == False :
92 self.definitCode(code,ssCode)
97 if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang
100 self.suiteTelemac=False
101 if hasattr (self, 'CONFIGURATION') :
102 if self.CONFIGURATION.force_langue :
103 from .monChoixLangue import MonChoixLangue
104 widgetLangue = MonChoixLangue(self)
105 ret=widgetLangue.exec_()
106 self.suiteTelemac=self.CONFIGURATION.suiteTelemac
109 from Extensions import localisation
111 if hasattr (self, 'CONFIGURATION') : localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
116 #if parent != None : self.parentCentralWidget = parent.centralWidget()
117 #else : self.parentCentralWidget = None
120 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
121 else : self.taille=1700
123 if self.code in ['MAP',] : self.resize(1440,self.height())
124 else : self.resize(self.taille,self.height())
127 icon = QIcon(self.repIcon+"/parametres.png")
128 self.actionParametres.setIcon(icon)
131 self.myQtab.removeTab(0)
132 self.blEntete= QBoxLayout(0,self.frameEntete)
133 self.blEntete.insertWidget(0,self.toolBar)
134 self.blEntete.insertWidget(0,self.menubar)
136 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
138 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
141 self.viewmanager = MyTabview(self)
142 self.recentMenu=QMenu(tr('&Recents'))
143 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
144 # actionARemplacer ne sert que pour l insert Menu
145 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
146 self.menuFichier.removeAction(self.actionARemplacer)
147 self.connecterSignaux()
148 self.toolBar.addSeparator()
149 if self.code != None : self.construitMenu()
151 self.setWindowTitle(self.VERSION_EFICAS)
155 #except EficasException, exc:
157 # print "je suis dans le except"
158 #if self.salome == 0 : exit()
162 def closeEntete(self):
163 self.menuBar().close()
165 self.frameEntete.close()
167 def definitCode(self,code,ssCode) :
172 from .monChoixCode import MonChoixCode
173 widgetChoix = MonChoixCode(self)
174 ret=widgetChoix.exec_()
176 if self.code == None:return # pour le cancel de la fenetre choix code
177 name='prefs_'+self.code
178 prefsCode=__import__(name)
180 self.repIni=prefsCode.repIni
182 self.format_fichier= ssCode #par defaut
183 prefsCode.NAME_SCHEME=ssCode
185 self.format_fichier="python" #par defaut
187 nameConf='configuration_'+self.code
188 configuration=__import__(nameConf)
189 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
190 self.CONFIGStyle = None
191 if hasattr(configuration,'make_config_style'):
192 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
193 from Extensions import localisation
195 if hasattr (self, 'CONFIGURATION') : localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
196 #PN --> pb d exception qui font planter salome
197 # plus supporte en python 3
198 #if hasattr(prefsCode,'encoding'):
201 # sys.setdefaultencoding(prefsCode.encoding)
203 def construitMenu(self):
207 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
208 if hasattr(self,intituleMenu):
209 menu=getattr(self,intituleMenu)
210 menu.setAttribute(Qt.WA_DeleteOnClose)
212 delattr(self,intituleMenu)
213 for intituleAction in ("actionExecution","actionSaveRun"):
214 if hasattr(self,intituleAction):
215 action=getattr(self,intituleAction)
216 self.toolBar.removeAction(action)
217 if self.code.upper() in Appli.__dict__:
218 Appli.__dict__[self.code.upper()](self,)
219 if self.suiteTelemac : self.lookSuiteTelemac()
223 repAide=os.path.dirname(os.path.abspath(__file__))
224 fileName='index.html'
225 self.docPath=repAide+"/../Aide"
226 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
227 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
228 self.fileDoc=os.path.join(self.docPath,fileName)
229 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
230 if not os.path.isfile(self.fileDoc) :
233 self.actionCode.setEnabled(False)
236 self.actionCode.setEnabled(True)
237 self.menuAide.addAction(self.actionCode)
243 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
244 sys.path.insert(0,dirCode)
246 self.definitCode(code,ssCode)
256 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
257 sys.path.insert(0,dirCode)
259 self.definitCode(code,ssCode)
265 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
266 self.actionN1 = QAction(self)
267 self.actionN1.setText(tr("Process Output"))
268 self.menuN1.addAction(self.actionN1)
269 self.actionN1.triggered.connect(self.newN1)
272 if hasattr(self,'actionOpenProcess'):return
274 self.actionOpenProcess = QAction(self)
275 self.actionOpenProcess.setText(tr("Open Process_Output File"))
276 self.menuN1.addAction(self.actionOpenProcess)
277 self.actionOpenProcess.triggered.connect(self.openProcess)
279 def ajoutExecution(self):
280 self.menuExecution = self.menubar.addMenu(tr("&Run"))
281 self.actionExecution = QAction(self)
282 if sys.platform[0:5]=="linux":
283 icon6 = QIcon(self.repIcon+"/roue.png")
284 self.actionExecution.setIcon(icon6)
286 self.actionExecution.setText(tr("Run"))
287 self.actionExecution.setObjectName("actionExecution")
288 self.menuExecution.addAction(self.actionExecution)
289 if not(self.actionExecution in self.toolBar.actions()):
290 self.toolBar.addAction(self.actionExecution)
291 self.actionExecution.setText(tr("Run"))
292 self.actionExecution.triggered.connect(self.run)
294 def ajoutSauveExecution(self):
295 self.actionSaveRun = QAction(self)
296 icon7 = QIcon(self.repIcon+"/export_MAP.png")
297 self.actionSaveRun.setIcon(icon7)
298 self.actionSaveRun.setObjectName("actionSaveRun")
299 self.menuExecution.addAction(self.actionSaveRun)
300 if not(self.actionSaveRun in self.toolBar.actions()):
301 self.toolBar.addAction(self.actionSaveRun)
302 self.actionSaveRun.setText(tr("Save Run"))
303 self.actionSaveRun.triggered.connect(self.saveRun)
305 def griserActionsStructures(self):
306 self.actionCouper.setEnabled(False)
307 self.actionColler.setEnabled(False)
308 self.actionCopier.setEnabled(False)
309 self.actionSupprimer.setEnabled(False)
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)
320 def enleverParametres(self):
321 self.toolBar.removeAction(self.actionParametres)
322 self.menuJdC.removeAction(self.actionParametres)
324 def enleverSupprimer(self):
325 self.toolBar.removeAction(self.actionSupprimer)
327 def enleverNewInclude(self):
328 self.actionNouvel_Include.setVisible(False)
330 def enleverRechercherDsCatalogue(self):
331 self.actionRechercherDsCatalogue.setVisible(False)
333 def connectRechercherDsCatalogue(self):
334 if hasattr(self,'rechercherDejaLa') : return
335 self.rechercherDejaLa=True
336 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
338 def ajoutSortieLegere(self):
339 if hasattr(self,'actionSortieLegere') : return
340 self.actionSortieLegere = QAction(self)
341 self.actionSortieLegere.setText(tr("Sortie Legere"))
342 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
343 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
347 self.enleverNewInclude()
348 self.toolBar.addSeparator()
349 self.ajoutExecution()
351 self.menuOptions = self.menubar.addMenu("menuOptions")
352 self.menuOptions.addAction(self.actionParametres_Eficas)
353 self.menuOptions.setTitle(tr("Options"))
356 self.enleverActionsStructures()
357 self.enleverNewInclude()
360 self.menuTraduction = self.menubar.addMenu("menuTraduction")
361 self.menuTraduction.addAction(self.actionTraduitV11V12)
362 self.menuTraduction.addAction(self.actionTraduitV10V11)
363 self.menuTraduction.addAction(self.actionTraduitV9V10)
364 self.menuTraduction.setTitle(tr("Traduction"))
366 self.menuFichier.addAction(self.actionSauveLigne)
368 self.menuOptions = self.menubar.addMenu("menuOptions")
369 self.menuOptions.addAction(self.actionParametres_Eficas)
370 self.menuOptions.addAction(self.actionLecteur_Pdf)
371 self.menuOptions.setTitle(tr("Options"))
374 #if self.salome == 0 : return
375 self.enleverNewInclude()
376 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
377 self.menuMesh.setObjectName("Mesh")
378 self.menuMesh.addAction(self.actionChercheGrpMaille)
379 #self.griserActionsStructures()
382 self.enleverNewInclude()
383 self.enleverRechercherDsCatalogue()
384 self.ajoutExecution()
385 self.ajoutSauveExecution()
386 self.griserActionsStructures()
389 self.enleverNewInclude()
390 self.toolBar.addSeparator()
391 self.ajoutExecution()
392 self.ajoutSauveExecution()
393 self.menuOptions = self.menubar.addMenu("menuOptions")
394 self.menuOptions.addAction(self.actionParametres_Eficas)
395 self.menuOptions.setTitle(tr("Options"))
398 if self.first: self.first=0
399 self.action_Nouveau.triggered.disconnect(self.fileNew)
400 self.action_Nouveau.triggered.connect(self.newPSEN)
401 self.enleverActionsStructures()
402 self.enleverParametres()
403 self.enleverRechercherDsCatalogue()
404 self.enleverNewInclude()
405 self.ajoutExecution()
411 self.enleverActionsStructures()
412 self.enleverParametres()
413 self.enleverRechercherDsCatalogue()
414 self.enleverNewInclude()
415 self.ajoutExecution()
419 self.enleverActionsStructures()
420 self.enleverNewInclude()
421 self.connectRechercherDsCatalogue()
422 self.ajoutSortieLegere()
424 def lookSuiteTelemac(self):
425 self.enleverActionsStructures()
426 self.enleverNewInclude()
427 self.enleverParametres()
428 self.enleverSupprimer()
429 self.enleverRechercherDsCatalogue()
431 def ajoutHelpPSEN(self):
432 self.actionParametres_Eficas.setText('Help PSEN')
433 self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
437 def ChercheGrpMesh(self):
438 Msg,listeGroup=self.ChercheGrpMeshInSalome()
440 self.viewmanager.handleAjoutGroup(listeGroup)
442 print ("il faut gerer les erreurs")
444 def ChercheGrpMaille(self):
445 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
447 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
448 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
450 raise ValueError('Salome non ouvert')
452 self.viewmanager.handleAjoutGroup(listeGroup)
454 print ("il faut gerer les erreurs")
457 def ChercheGrp(self):
458 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
460 # self.viewmanager.handleAjoutGroup(listeGroup)
462 #print "il faut gerer "
466 def ajoutIcones(self) :
467 # Pour pallier les soucis de repertoire d icone
469 icon = QIcon(self.repIcon+"/new_file.png")
470 self.action_Nouveau.setIcon(icon)
471 icon1 = QIcon(self.repIcon+"/ouvrir.png")
472 self.actionOuvrir.setIcon(icon1)
473 icon2 = QIcon(self.repIcon+"/save.png")
474 self.actionEnregistrer.setIcon(icon2)
475 icon6 = QIcon(self.repIcon+"/delete.png")
476 self.actionSupprimer.setIcon(icon6)
477 icon7 = QIcon(self.repIcon+"/roue.png")
478 self.actionExecution.setIcon(icon7)
483 def connecterSignauxQT4(self) :
484 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
486 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
487 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
488 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
489 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
490 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
491 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
492 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
493 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
495 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
496 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
497 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
499 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
500 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
501 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
502 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
503 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
504 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
506 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
507 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
508 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
509 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
515 self.actionTraduitV9V10 = QAction(self)
516 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
517 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
518 self.actionTraduitV10V11 = QAction(self)
519 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
520 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
521 self.actionTraduitV11V12 = QAction(self)
522 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
523 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
524 self.actionSauveLigne = QAction(self)
525 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
527 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
528 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
529 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
530 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
531 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
532 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
536 self.actionChercheGrpMaille = QAction(self)
537 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
538 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
541 self.actionChercheGrp = QAction(self)
542 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
543 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
546 self.actionCode = QAction(self)
547 self.actionCode.setText(tr("Specificites Maille"))
548 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
550 def connecterSignaux(self) :
552 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
553 self.action_Nouveau.triggered.connect(self.fileNew)
554 self.actionNouvel_Include.triggered.connect(self.NewInclude)
555 self.actionOuvrir.triggered.connect(self.fileOpen)
556 self.actionEnregistrer.triggered.connect(self.fileSave)
557 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
558 self.actionFermer.triggered.connect(self.fileClose)
559 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
560 self.actionQuitter.triggered.connect(self.fileExit)
562 self.actionEficas.triggered.connect(self.aidePPal)
563 self.actionVersion.triggered.connect(self.version)
564 self.actionParametres.triggered.connect(self.gestionParam)
565 self.actionCommentaire.triggered.connect(self.ajoutCommentaire)
567 self.actionCouper.triggered.connect(self.editCut)
568 self.actionCopier.triggered.connect(self.editCopy)
569 self.actionColler.triggered.connect(self.editPaste)
570 self.actionSupprimer.triggered.connect(self.supprimer)
571 self.actionRechercher.triggered.connect(self.rechercher)
572 self.actionDeplier_replier.triggered.connect(self.Deplier)
574 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
575 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
576 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
577 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
578 self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
579 self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
583 self.actionTraduitV9V10 = QAction(self)
584 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
585 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
586 self.actionTraduitV10V11 = QAction(self)
587 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
588 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
589 self.actionTraduitV11V12 = QAction(self)
590 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
591 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
592 self.actionSauveLigne = QAction(self)
593 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
595 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
596 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
597 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
598 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
599 self.actionSauveLigne.triggered.connect(self.sauveLigne)
602 self.actionChercheGrpMaille = QAction(self)
603 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
606 self.actionChercheGrp = QAction(self)
607 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
608 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
611 self.actionCode = QAction(self)
612 self.actionCode.setText(tr("Specificites Maille"))
613 self.actionCode.triggered.connect(self.aideCode)
617 self.viewmanager.handleDeplier()
619 def ajoutCommentaire(self):
620 self.viewmanager.ajoutCommentaire()
622 def ouvreFichiers(self) :
623 # Ouverture des fichiers de commandes donnes sur la ligne de commande
626 for study in session.d_env.studies:
628 d=session.get_unit(study,self)
629 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
632 def get_source(self,file):
633 # appele par Editeur/session.py
635 p=convert.plugins['python']()
637 texte=p.convert('execnoparseur')
640 def initPatrons(self) :
641 # Mise a jour du menu des fichiers recemment ouverts
642 from Editeur import listePatrons
643 if not(self.code in listePatrons.sous_menus) :
644 if hasattr(self,"menuPatrons"):
645 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
646 self.menuPatrons.close()
647 delattr(self,"menuPatrons")
649 if (not hasattr(self,"menuPatrons")):
650 self.menuPatrons = QMenu(self.menubar)
651 self.menuPatrons.setObjectName("menuPatrons")
652 self.menubar.addAction(self.menuPatrons.menuAction())
653 self.menuPatrons.setTitle(tr("Patrons"))
655 self.menuPatrons.clear()
656 self.listePatrons = listePatrons.listePatrons(self.code)
658 for nomSsMenu in self.listePatrons.liste:
659 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
660 for fichier in self.listePatrons.liste[nomSsMenu]:
661 id = ssmenu.addAction(fichier)
662 self.ficPatrons[id]=fichier
663 self.id.triggered.connect(self.handleOpenPatrons)
664 # self.Patrons.setItemParameter(id,idx)
667 def initRecents(self):
670 if sys.platform[0:5]=="linux" :
671 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
673 rep=os.path.join('C:/','.config/Eficas',self.code)
674 monFichier=rep+"/listefichiers_"+self.code
680 l=(ligne.split("\n"))[0]
681 self.recent.append(l)
689 def addToRecentList(self, fn):
690 while fn in self.recent: self.recent.remove(fn)
691 self.recent.insert(0,fn)
692 if len(self.recent) > 9:
693 self.recent = self.recent[:9]
696 def addToRecentListQT4(self, fn):
698 Public slot to add a filename to the list of recently opened files.
700 @param fn name of the file to be added
702 self.recent.removeAll(fn)
703 self.recent.prepend(fn)
704 if len(self.recent) > 9:
705 self.recent = self.recent[:9]
709 def sauveRecents(self) :
711 rep=self.CONFIGURATION.rep_user
712 monFichier=rep+"/listefichiers_"+self.code
716 f=open(monFichier,'w')
717 if len(self.recent) == 0 : return
719 while ( index < len(self.recent)):
720 ligne=str(self.recent[index])+"\n"
732 def traductionV11V12(self):
733 from .gereTraduction import traduction
734 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
736 def traductionV10V11(self):
737 from .gereTraduction import traduction
738 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
740 def traductionV9V10(self):
741 from .gereTraduction import traduction
742 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
745 from .monVisu import DVisu
746 titre = tr("version ")
747 monVisuDialg=DVisu(parent=self,fl=0)
748 monVisuDialg.setWindowTitle(titre)
749 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
750 monVisuDialg.adjustSize()
754 repAide=os.path.dirname(os.path.abspath(__file__))
755 maD=os.path.join( repAide,'..','Doc','html')
757 indexAide=os.path.join(maD,'index.html')
758 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
759 else : cmd="start "+indexAide
762 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
765 repAide=os.path.dirname(os.path.abspath(__file__))
766 maD=os.path.join( repAide,'..','Doc','html')
768 indexAide=os.path.join(maD,'index.html')
769 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
770 else : cmd="start "+indexAide
773 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
776 if self.code==None : return
779 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
780 else : cmd="start "+self.fileDoc
784 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
787 def optionEditeur(self) :
789 name='monOptions_'+self.code
791 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
795 optionCode=__import__(name)
798 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
800 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
803 def optionPdf(self) :
804 from monOptionsPdf import OptionPdf
805 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
808 def handleSortieLegere(self):
809 return self.viewmanager.saveLegerCurrentEditor()
811 def handleShowRecentMenu(self):
813 Private method to set up recent files menu.
815 self.recentMenu.clear()
817 for rp in self.recent:
818 id = self.recentMenu.addAction(rp)
819 self.ficRecents[id]=rp
820 id.triggered.connect(self.handleOpenRecent)
821 self.recentMenu.addSeparator()
822 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
824 def handleOpenPatrons(self):
826 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
827 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
829 def handleOpenRecent(self):
831 fichier=self.ficRecents[idx]
832 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
834 def handleClearRecent(self):
835 self.recent = QStringList()
838 def handleRechercherDsCatalogue(self):
839 if not self.viewmanager : return
840 self.viewmanager.handleRechercherDsCatalogue()
844 self.viewmanager.newEditor()
845 except EficasException as exc:
846 msg = six.text_type(exc)
847 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
849 def openProcess(self):
853 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
854 sys.path.insert(0,dirCode)
856 self.definitCode(code,ssCode)
865 self.viewmanager.handleOpen()
866 except EficasException as exc:
867 msg = six.text_type(exc)
869 QMessageBox.warning(self, tr(u"Erreur"), msg)
871 def sauveLigne(self):
872 return self.viewmanager.sauveLigneCurrentEditor()
875 return self.viewmanager.saveCurrentEditor()
877 def fileSaveAs(self):
878 return self.viewmanager.saveAsCurrentEditor()
881 self.viewmanager.handleClose(texte='&Fermer')
883 def fileCloseAll(self):
884 self.viewmanager.handleCloseAll(texte='&Fermer')
887 # On peut sortir sur Abort
888 res=self.viewmanager.handleCloseAll()
894 self.viewmanager.handleEditCopy()
897 self.viewmanager.handleEditCut()
900 self.viewmanager.handleEditPaste()
902 def rechercher(self):
903 self.viewmanager.handleRechercher()
906 self.viewmanager.run()
909 self.viewmanager.saveRun()
913 self.viewmanager.handleSupprimer()
915 def jdcFichierSource(self):
916 self.viewmanager.handleViewJdcFichierSource()
918 def jdcRapport(self):
919 self.viewmanager.handleViewJdcRapport()
922 self.viewmanager.handleViewJdcRegles()
924 def gestionParam(self):
925 self.viewmanager.handlegestionParam()
928 self.viewmanager.handleViewJdcPy()
930 def ouvreArbre(self):
931 self.viewmanager.ouvreArbre()
933 def fermeArbre(self):
934 self.viewmanager.fermeArbre()
936 def NewInclude(self):
937 self.viewmanager.newIncludeEditor()
940 for pathCode in self.ListePathCode:
942 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
943 sys.path.remove(aEnlever)
946 for pathCode in self.listeAEnlever:
948 sys.path.remove(aEnlever)
953 def closeEvent(self,event):
955 if res==2 : event.ignore()
958 if __name__=='__main__':
961 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
963 from Aster import prefsCode
964 if hasattr(prefsCode,'encoding'):
965 # Hack pour changer le codage par defaut des strings
968 sys.setdefaultencoding(prefsCode.encoding)
969 del sys.setdefaultencoding
972 from Editeur import import_code
973 from Editeur import session
975 # Analyse des arguments de la ligne de commande
976 options=session.parse(sys.argv)
980 app = QApplication(sys.argv)
981 #app.setMainWidget(mw) (qt3)