1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2017 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=1,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False):
55 QMainWindow.__init__(self,parent)
56 Ui_Eficas.__init__(self)
60 version=getEficasVersion()
61 self.VERSION_EFICAS="Eficas QT5 Salome " + version
63 self.parentMainWindow=parent
66 self.top = self #(pour CONFIGURATION)
67 self.QWParent=None #(Pour lancement sans IHM)
76 self.ListePathCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
77 self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
78 self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
85 Accas.SalomeEntry = eficasSalome.SalomeEntry
87 print ('eficas hors salome')
90 self.demande=multi # specifique PSEN
92 if langue=='fr': self.langue=langue
93 else : self.langue="ang"
95 if self.multi == False :
96 self.definitCode(code,ssCode)
103 self.suiteTelemac=False
104 if hasattr (self, 'CONFIGURATION') :
105 if self.CONFIGURATION.force_langue :
106 from .monChoixLangue import MonChoixLangue
107 widgetLangue = MonChoixLangue(self)
108 ret=widgetLangue.exec_()
109 self.suiteTelemac=self.CONFIGURATION.suiteTelemac
112 if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : self.langue=self.CONFIGURATION.lang
113 from Extensions import localisation
115 if hasattr (self, 'CONFIGURATION') : localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
118 #if parent != None : self.parentCentralWidget = parent.centralWidget()
119 #else : self.parentCentralWidget = None
122 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
123 else : self.taille=1700
125 if self.code in ['MAP',] : self.resize(1440,self.height())
126 else : self.resize(self.taille,self.height())
129 icon = QIcon(self.repIcon+"/parametres.png")
130 self.actionParametres.setIcon(icon)
133 self.myQtab.removeTab(0)
134 self.blEntete= QBoxLayout(0,self.frameEntete)
135 self.blEntete.insertWidget(0,self.toolBar)
136 self.blEntete.insertWidget(0,self.menubar)
138 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
140 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
143 self.viewmanager = MyTabview(self)
144 self.recentMenu=QMenu(tr('&Recents'))
145 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
146 # actionARemplacer ne sert que pour l insert Menu
147 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
148 self.menuFichier.removeAction(self.actionARemplacer)
149 self.connecterSignaux()
150 self.toolBar.addSeparator()
151 if self.code != None : self.construitMenu()
153 self.setWindowTitle(self.VERSION_EFICAS)
157 #except EficasException, exc:
159 # print "je suis dans le except"
160 #if self.salome == 0 : exit()
164 def closeEntete(self):
165 self.menuBar().close()
167 self.frameEntete.close()
169 def definitCode(self,code,ssCode) :
174 from .monChoixCode import MonChoixCode
175 widgetChoix = MonChoixCode(self)
176 ret=widgetChoix.exec_()
178 if self.code == None:return # pour le cancel de la fenetre choix code
179 name='prefs_'+self.code
180 prefsCode=__import__(name)
182 self.repIni=prefsCode.repIni
184 self.format_fichier= ssCode #par defaut
185 prefsCode.NAME_SCHEME=ssCode
187 self.format_fichier="python" #par defaut
189 nameConf='configuration_'+self.code
190 configuration=__import__(nameConf)
191 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
192 self.CONFIGStyle = None
193 if hasattr(configuration,'make_config_style'):
194 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
196 #from Extensions import localisation
198 #if hasattr (self, 'CONFIGURATION') : localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
199 #PN --> pb d exception qui font planter salome
200 # plus supporte en python 3
201 #if hasattr(prefsCode,'encoding'):
204 # sys.setdefaultencoding(prefsCode.encoding)
206 def construitMenu(self):
210 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
211 if hasattr(self,intituleMenu):
212 menu=getattr(self,intituleMenu)
213 menu.setAttribute(Qt.WA_DeleteOnClose)
215 delattr(self,intituleMenu)
216 for intituleAction in ("actionExecution","actionSaveRun"):
217 if hasattr(self,intituleAction):
218 action=getattr(self,intituleAction)
219 self.toolBar.removeAction(action)
220 if self.code.upper() in Appli.__dict__:
221 Appli.__dict__[self.code.upper()](self,)
222 if self.suiteTelemac : self.lookSuiteTelemac()
226 repAide=os.path.dirname(os.path.abspath(__file__))
227 fileName='index.html'
228 self.docPath=repAide+"/../Aide"
229 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
230 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
231 self.fileDoc=os.path.join(self.docPath,fileName)
232 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
233 if not os.path.isfile(self.fileDoc) :
236 self.actionCode.setEnabled(False)
239 self.actionCode.setEnabled(True)
240 self.menuAide.addAction(self.actionCode)
246 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
247 sys.path.insert(0,dirCode)
249 self.definitCode(code,ssCode)
259 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
260 sys.path.insert(0,dirCode)
262 self.definitCode(code,ssCode)
268 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
269 self.actionN1 = QAction(self)
270 self.actionN1.setText(tr("Process Output"))
271 self.menuN1.addAction(self.actionN1)
272 self.actionN1.triggered.connect(self.newN1)
275 if hasattr(self,'actionOpenProcess'):return
277 self.actionOpenProcess = QAction(self)
278 self.actionOpenProcess.setText(tr("Open Process_Output File"))
279 self.menuN1.addAction(self.actionOpenProcess)
280 self.actionOpenProcess.triggered.connect(self.openProcess)
282 def ajoutExecution(self):
283 self.menuExecution = self.menubar.addMenu(tr("&Run"))
284 self.actionExecution = QAction(self)
285 if sys.platform[0:5]=="linux":
286 icon6 = QIcon(self.repIcon+"/roue.png")
287 self.actionExecution.setIcon(icon6)
289 self.actionExecution.setText(tr("Run"))
290 self.actionExecution.setObjectName("actionExecution")
291 self.menuExecution.addAction(self.actionExecution)
292 if not(self.actionExecution in self.toolBar.actions()):
293 self.toolBar.addAction(self.actionExecution)
294 self.actionExecution.setText(tr("Run"))
295 self.actionExecution.triggered.connect(self.run)
297 def ajoutSauveExecution(self):
298 self.actionSaveRun = QAction(self)
299 icon7 = QIcon(self.repIcon+"/export_MAP.png")
300 self.actionSaveRun.setIcon(icon7)
301 self.actionSaveRun.setObjectName("actionSaveRun")
302 self.menuExecution.addAction(self.actionSaveRun)
303 if not(self.actionSaveRun in self.toolBar.actions()):
304 self.toolBar.addAction(self.actionSaveRun)
305 self.actionSaveRun.setText(tr("Save Run"))
306 self.actionSaveRun.triggered.connect(self.saveRun)
308 def griserActionsStructures(self):
309 self.actionCouper.setEnabled(False)
310 self.actionColler.setEnabled(False)
311 self.actionCopier.setEnabled(False)
312 self.actionSupprimer.setEnabled(False)
314 def enleverActionsStructures(self):
315 self.toolBar.removeAction(self.actionCopier)
316 self.toolBar.removeAction(self.actionColler)
317 self.toolBar.removeAction(self.actionCouper)
318 self.menuEdition.removeAction(self.actionCouper)
319 self.menuEdition.removeAction(self.actionCopier)
320 self.menuEdition.removeAction(self.actionColler)
323 def enleverParametres(self):
324 self.toolBar.removeAction(self.actionParametres)
325 self.menuJdC.removeAction(self.actionParametres)
327 def enleverSupprimer(self):
328 self.toolBar.removeAction(self.actionSupprimer)
330 def enleverNewInclude(self):
331 self.actionNouvel_Include.setVisible(False)
333 def enleverRechercherDsCatalogue(self):
334 self.actionRechercherDsCatalogue.setVisible(False)
336 def connectRechercherDsCatalogue(self):
337 if hasattr(self,'rechercherDejaLa') : return
338 self.rechercherDejaLa=True
339 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
341 def ajoutSortieLegere(self):
342 if hasattr(self,'actionSortieLegere') : return
343 self.actionSortieLegere = QAction(self)
344 self.actionSortieLegere.setText(tr("Sortie Legere"))
345 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
346 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
350 self.enleverNewInclude()
351 self.toolBar.addSeparator()
352 self.ajoutExecution()
354 self.menuOptions = self.menubar.addMenu("menuOptions")
355 self.menuOptions.addAction(self.actionParametres_Eficas)
356 self.menuOptions.setTitle(tr("Options"))
359 self.enleverActionsStructures()
360 self.enleverNewInclude()
363 self.menuTraduction = self.menubar.addMenu("menuTraduction")
364 self.menuTraduction.addAction(self.actionTraduitV11V12)
365 self.menuTraduction.addAction(self.actionTraduitV10V11)
366 self.menuTraduction.addAction(self.actionTraduitV9V10)
367 self.menuTraduction.setTitle(tr("Traduction"))
369 self.menuFichier.addAction(self.actionSauveLigne)
371 self.menuOptions = self.menubar.addMenu("menuOptions")
372 self.menuOptions.addAction(self.actionParametres_Eficas)
373 self.menuOptions.addAction(self.actionLecteur_Pdf)
374 self.menuOptions.setTitle(tr("Options"))
377 #if self.salome == 0 : return
378 self.enleverNewInclude()
379 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
380 self.menuMesh.setObjectName("Mesh")
381 self.menuMesh.addAction(self.actionChercheGrpMaille)
382 #self.griserActionsStructures()
385 self.enleverNewInclude()
386 self.enleverRechercherDsCatalogue()
387 self.ajoutExecution()
388 self.ajoutSauveExecution()
389 self.griserActionsStructures()
392 self.enleverNewInclude()
393 self.toolBar.addSeparator()
394 self.ajoutExecution()
395 self.ajoutSauveExecution()
396 self.menuOptions = self.menubar.addMenu("menuOptions")
397 self.menuOptions.addAction(self.actionParametres_Eficas)
398 self.menuOptions.setTitle(tr("Options"))
401 if self.first: self.first=0
402 try : self.action_Nouveau.triggered.disconnect(self.fileNew)
404 try : self.action_Nouveau.triggered.disconnect(self.newPSEN)
407 self.action_Nouveau.triggered.connect(self.newPSEN)
408 self.enleverActionsStructures()
409 self.enleverParametres()
410 self.enleverRechercherDsCatalogue()
411 self.enleverNewInclude()
412 self.ajoutExecution()
418 self.enleverActionsStructures()
419 self.enleverParametres()
420 self.enleverRechercherDsCatalogue()
421 self.enleverNewInclude()
422 self.ajoutExecution()
426 self.enleverActionsStructures()
427 self.enleverNewInclude()
428 self.connectRechercherDsCatalogue()
429 self.ajoutSortieLegere()
431 def lookSuiteTelemac(self):
432 self.enleverActionsStructures()
433 self.enleverNewInclude()
434 self.enleverParametres()
435 self.enleverSupprimer()
436 self.enleverRechercherDsCatalogue()
438 def ajoutHelpPSEN(self):
439 self.actionParametres_Eficas.setText('Help PSEN')
440 self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
444 def ChercheGrpMesh(self):
445 Msg,listeGroup=self.ChercheGrpMeshInSalome()
447 self.viewmanager.handleAjoutGroup(listeGroup)
449 print ("il faut gerer les erreurs")
451 def ChercheGrpMaille(self):
452 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
454 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
455 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
457 raise ValueError('Salome non ouvert')
459 self.viewmanager.handleAjoutGroup(listeGroup)
461 print ("il faut gerer les erreurs")
464 def ChercheGrp(self):
465 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
467 # self.viewmanager.handleAjoutGroup(listeGroup)
469 #print "il faut gerer "
473 def ajoutIcones(self) :
474 # Pour pallier les soucis de repertoire d icone
476 icon = QIcon(self.repIcon+"/new_file.png")
477 self.action_Nouveau.setIcon(icon)
478 icon1 = QIcon(self.repIcon+"/ouvrir.png")
479 self.actionOuvrir.setIcon(icon1)
480 icon2 = QIcon(self.repIcon+"/save.png")
481 self.actionEnregistrer.setIcon(icon2)
482 icon6 = QIcon(self.repIcon+"/delete.png")
483 self.actionSupprimer.setIcon(icon6)
484 icon7 = QIcon(self.repIcon+"/roue.png")
485 self.actionExecution.setIcon(icon7)
490 def connecterSignauxQT4(self) :
491 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
493 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
494 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
495 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
496 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
497 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
498 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
499 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
500 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
502 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
503 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
504 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
506 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
507 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
508 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
509 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
510 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
511 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
513 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
514 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
515 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
516 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
522 self.actionTraduitV9V10 = QAction(self)
523 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
524 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
525 self.actionTraduitV10V11 = QAction(self)
526 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
527 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
528 self.actionTraduitV11V12 = QAction(self)
529 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
530 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
531 self.actionSauveLigne = QAction(self)
532 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
534 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
535 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
536 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
537 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
538 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
539 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
543 self.actionChercheGrpMaille = QAction(self)
544 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
545 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
548 self.actionChercheGrp = QAction(self)
549 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
550 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
553 self.actionCode = QAction(self)
554 self.actionCode.setText(tr("Specificites Maille"))
555 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
557 def connecterSignaux(self) :
559 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
560 self.action_Nouveau.triggered.connect(self.fileNew)
561 self.actionNouvel_Include.triggered.connect(self.NewInclude)
562 self.actionOuvrir.triggered.connect(self.fileOpen)
563 self.actionEnregistrer.triggered.connect(self.fileSave)
564 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
565 self.actionFermer.triggered.connect(self.fileClose)
566 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
567 self.actionQuitter.triggered.connect(self.fileExit)
569 self.actionEficas.triggered.connect(self.aidePPal)
570 self.actionVersion.triggered.connect(self.version)
571 self.actionParametres.triggered.connect(self.gestionParam)
572 self.actionCommentaire.triggered.connect(self.ajoutCommentaire)
574 self.actionCouper.triggered.connect(self.editCut)
575 self.actionCopier.triggered.connect(self.editCopy)
576 self.actionColler.triggered.connect(self.editPaste)
577 self.actionSupprimer.triggered.connect(self.supprimer)
578 self.actionRechercher.triggered.connect(self.rechercher)
579 self.actionDeplier_replier.triggered.connect(self.Deplier)
581 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
582 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
583 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
584 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
585 self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
586 self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
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"))
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)
609 self.actionChercheGrpMaille = QAction(self)
610 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
613 self.actionChercheGrp = QAction(self)
614 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
615 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
618 self.actionCode = QAction(self)
619 self.actionCode.setText(tr("Specificites Maille"))
620 self.actionCode.triggered.connect(self.aideCode)
624 self.viewmanager.handleDeplier()
626 def ajoutCommentaire(self):
627 self.viewmanager.ajoutCommentaire()
629 def ouvreFichiers(self) :
630 # Ouverture des fichiers de commandes donnes sur la ligne de commande
633 for study in session.d_env.studies:
635 d=session.get_unit(study,self)
636 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
639 def get_source(self,file):
640 # appele par Editeur/session.py
642 p=convert.plugins['python']()
644 texte=p.convert('execnoparseur')
647 def initPatrons(self) :
648 # Mise a jour du menu des fichiers recemment ouverts
649 from Editeur import listePatrons
650 if not(self.code in listePatrons.sous_menus) :
651 if hasattr(self,"menuPatrons"):
652 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
653 self.menuPatrons.close()
654 delattr(self,"menuPatrons")
656 if (not hasattr(self,"menuPatrons")):
657 self.menuPatrons = QMenu(self.menubar)
658 self.menuPatrons.setObjectName("menuPatrons")
659 self.menubar.addAction(self.menuPatrons.menuAction())
660 self.menuPatrons.setTitle(tr("Patrons"))
662 self.menuPatrons.clear()
663 self.listePatrons = listePatrons.listePatrons(self.code)
665 for nomSsMenu in self.listePatrons.liste:
666 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
667 for fichier in self.listePatrons.liste[nomSsMenu]:
668 id = ssmenu.addAction(fichier)
669 self.ficPatrons[id]=fichier
670 self.id.triggered.connect(self.handleOpenPatrons)
671 # self.Patrons.setItemParameter(id,idx)
674 def initRecents(self):
677 if sys.platform[0:5]=="linux" :
678 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
680 rep=os.path.join('C:/','.config/Eficas',self.code)
681 monFichier=rep+"/listefichiers_"+self.code
687 l=(ligne.split("\n"))[0]
688 self.recent.append(l)
696 def addToRecentList(self, fn):
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]
703 def addToRecentListQT4(self, fn):
705 Public slot to add a filename to the list of recently opened files.
707 @param fn name of the file to be added
709 self.recent.removeAll(fn)
710 self.recent.prepend(fn)
711 if len(self.recent) > 9:
712 self.recent = self.recent[:9]
716 def sauveRecents(self) :
718 rep=self.CONFIGURATION.rep_user
719 monFichier=rep+"/listefichiers_"+self.code
723 f=open(monFichier,'w')
724 if len(self.recent) == 0 : return
726 while ( index < len(self.recent)):
727 ligne=str(self.recent[index])+"\n"
739 def traductionV11V12(self):
740 from .gereTraduction import traduction
741 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
743 def traductionV10V11(self):
744 from .gereTraduction import traduction
745 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
747 def traductionV9V10(self):
748 from .gereTraduction import traduction
749 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
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()
761 repAide=os.path.dirname(os.path.abspath(__file__))
762 maD=os.path.join( repAide,'..','Doc')
764 indexAide=os.path.join(maD,'index.html')
765 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
766 else : cmd="start "+indexAide
769 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
772 repAide=os.path.dirname(os.path.abspath(__file__))
773 maD=os.path.join( repAide,'..','Doc')
775 indexAide=os.path.join(maD,'index.html')
776 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
777 else : cmd="start "+indexAide
780 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
783 if self.code==None : return
786 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
787 else : cmd="start "+self.fileDoc
791 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
794 def optionEditeur(self) :
796 name='monOptions_'+self.code
798 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
802 optionCode=__import__(name)
805 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
807 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
810 def optionPdf(self) :
811 from monOptionsPdf import OptionPdf
812 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
815 def handleSortieLegere(self):
816 return self.viewmanager.saveLegerCurrentEditor()
818 def handleShowRecentMenu(self):
820 Private method to set up recent files menu.
822 self.recentMenu.clear()
824 for rp in self.recent:
825 id = self.recentMenu.addAction(rp)
826 self.ficRecents[id]=rp
827 id.triggered.connect(self.handleOpenRecent)
828 self.recentMenu.addSeparator()
829 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
831 def handleOpenPatrons(self):
833 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
834 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
836 def handleOpenRecent(self):
838 fichier=self.ficRecents[idx]
839 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
841 def handleClearRecent(self):
842 self.recent = QStringList()
845 def handleRechercherDsCatalogue(self):
846 if not self.viewmanager : return
847 self.viewmanager.handleRechercherDsCatalogue()
851 self.viewmanager.newEditor()
852 except EficasException as exc:
853 msg = six.text_type(exc)
854 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
856 def openProcess(self):
860 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
861 sys.path.insert(0,dirCode)
863 self.definitCode(code,ssCode)
872 self.viewmanager.handleOpen()
873 except EficasException as exc:
874 msg = six.text_type(exc)
876 QMessageBox.warning(self, tr(u"Erreur"), msg)
878 def sauveLigne(self):
879 return self.viewmanager.sauveLigneCurrentEditor()
882 return self.viewmanager.saveCurrentEditor()
884 def fileSaveAs(self):
885 return self.viewmanager.saveAsCurrentEditor()
888 self.viewmanager.handleClose(texte='&Fermer')
890 def fileCloseAll(self):
891 self.viewmanager.handleCloseAll(texte='&Fermer')
894 # On peut sortir sur Abort
895 res=self.viewmanager.handleCloseAll()
901 self.viewmanager.handleEditCopy()
904 self.viewmanager.handleEditCut()
907 self.viewmanager.handleEditPaste()
909 def rechercher(self):
910 self.viewmanager.handleRechercher()
913 self.viewmanager.run()
916 self.viewmanager.saveRun()
920 self.viewmanager.handleSupprimer()
922 def jdcFichierSource(self):
923 self.viewmanager.handleViewJdcFichierSource()
925 def jdcRapport(self):
926 self.viewmanager.handleViewJdcRapport()
929 self.viewmanager.handleViewJdcRegles()
931 def gestionParam(self):
932 self.viewmanager.handlegestionParam()
935 self.viewmanager.handleViewJdcPy()
937 def ouvreArbre(self):
938 self.viewmanager.ouvreArbre()
940 def fermeArbre(self):
941 self.viewmanager.fermeArbre()
943 def NewInclude(self):
944 self.viewmanager.newIncludeEditor()
947 for pathCode in self.ListePathCode:
949 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
950 sys.path.remove(aEnlever)
953 for pathCode in self.listeAEnlever:
955 sys.path.remove(aEnlever)
960 def closeEvent(self,event):
962 if res==2 : event.ignore()
965 if __name__=='__main__':
968 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
970 from Aster import prefsCode
971 if hasattr(prefsCode,'encoding'):
972 # Hack pour changer le codage par defaut des strings
975 sys.setdefaultencoding(prefsCode.encoding)
976 del sys.setdefaultencoding
979 from Editeur import import_code
980 from Editeur import session
982 # Analyse des arguments de la ligne de commande
983 options=session.parse(sys.argv)
987 app = QApplication(sys.argv)
988 #app.setMainWidget(mw) (qt3)