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 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
336 def ajoutSortieLegere(self):
337 if hasattr(self,'actionSortieLegere') : return
338 self.actionSortieLegere = QAction(self)
339 self.actionSortieLegere.setText(tr("Sortie Legere"))
340 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
341 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
345 self.enleverNewInclude()
346 self.toolBar.addSeparator()
347 self.ajoutExecution()
349 self.menuOptions = self.menubar.addMenu("menuOptions")
350 self.menuOptions.addAction(self.actionParametres_Eficas)
351 self.menuOptions.setTitle(tr("Options"))
354 self.enleverActionsStructures()
355 self.enleverNewInclude()
358 self.menuTraduction = self.menubar.addMenu("menuTraduction")
359 self.menuTraduction.addAction(self.actionTraduitV11V12)
360 self.menuTraduction.addAction(self.actionTraduitV10V11)
361 self.menuTraduction.addAction(self.actionTraduitV9V10)
362 self.menuTraduction.setTitle(tr("Traduction"))
364 self.menuFichier.addAction(self.actionSauveLigne)
366 self.menuOptions = self.menubar.addMenu("menuOptions")
367 self.menuOptions.addAction(self.actionParametres_Eficas)
368 self.menuOptions.addAction(self.actionLecteur_Pdf)
369 self.menuOptions.setTitle(tr("Options"))
372 #if self.salome == 0 : return
373 self.enleverNewInclude()
374 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
375 self.menuMesh.setObjectName("Mesh")
376 self.menuMesh.addAction(self.actionChercheGrpMaille)
377 #self.griserActionsStructures()
380 self.enleverNewInclude()
381 self.enleverRechercherDsCatalogue()
382 self.ajoutExecution()
383 self.ajoutSauveExecution()
384 self.griserActionsStructures()
387 self.enleverNewInclude()
388 self.toolBar.addSeparator()
389 self.ajoutExecution()
390 self.ajoutSauveExecution()
391 self.menuOptions = self.menubar.addMenu("menuOptions")
392 self.menuOptions.addAction(self.actionParametres_Eficas)
393 self.menuOptions.setTitle(tr("Options"))
396 if self.first: self.first=0
397 self.action_Nouveau.triggered.disconnect(self.fileNew)
398 self.action_Nouveau.triggered.connect(self.newPSEN)
399 self.enleverActionsStructures()
400 self.enleverParametres()
401 self.enleverRechercherDsCatalogue()
402 self.enleverNewInclude()
403 self.ajoutExecution()
409 self.enleverActionsStructures()
410 self.enleverParametres()
411 self.enleverRechercherDsCatalogue()
412 self.enleverNewInclude()
413 self.ajoutExecution()
417 self.enleverActionsStructures()
418 self.enleverNewInclude()
419 self.connectRechercherDsCatalogue()
420 self.ajoutSortieLegere()
422 def lookSuiteTelemac(self):
423 self.enleverActionsStructures()
424 self.enleverNewInclude()
425 self.enleverParametres()
426 self.enleverSupprimer()
427 self.enleverRechercherDsCatalogue()
429 def ajoutHelpPSEN(self):
430 self.actionParametres_Eficas.setText('Help PSEN')
431 self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
435 def ChercheGrpMesh(self):
436 Msg,listeGroup=self.ChercheGrpMeshInSalome()
438 self.viewmanager.handleAjoutGroup(listeGroup)
440 print ("il faut gerer les erreurs")
442 def ChercheGrpMaille(self):
443 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
445 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
446 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
448 raise ValueError('Salome non ouvert')
450 self.viewmanager.handleAjoutGroup(listeGroup)
452 print ("il faut gerer les erreurs")
455 def ChercheGrp(self):
456 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
458 # self.viewmanager.handleAjoutGroup(listeGroup)
460 #print "il faut gerer "
464 def ajoutIcones(self) :
465 # Pour pallier les soucis de repertoire d icone
467 icon = QIcon(self.repIcon+"/new_file.png")
468 self.action_Nouveau.setIcon(icon)
469 icon1 = QIcon(self.repIcon+"/ouvrir.png")
470 self.actionOuvrir.setIcon(icon1)
471 icon2 = QIcon(self.repIcon+"/save.png")
472 self.actionEnregistrer.setIcon(icon2)
473 icon6 = QIcon(self.repIcon+"/delete.png")
474 self.actionSupprimer.setIcon(icon6)
475 icon7 = QIcon(self.repIcon+"/roue.png")
476 self.actionExecution.setIcon(icon7)
481 def connecterSignauxQT4(self) :
482 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
484 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
485 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
486 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
487 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
488 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
489 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
490 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
491 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
493 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
494 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
495 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
497 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
498 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
499 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
500 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
501 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
502 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
504 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
505 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
506 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
507 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
513 self.actionTraduitV9V10 = QAction(self)
514 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
515 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
516 self.actionTraduitV10V11 = QAction(self)
517 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
518 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
519 self.actionTraduitV11V12 = QAction(self)
520 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
521 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
522 self.actionSauveLigne = QAction(self)
523 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
525 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
526 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
527 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
528 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
529 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
530 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
534 self.actionChercheGrpMaille = QAction(self)
535 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
536 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
539 self.actionChercheGrp = QAction(self)
540 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
541 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
544 self.actionCode = QAction(self)
545 self.actionCode.setText(tr("Specificites Maille"))
546 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
548 def connecterSignaux(self) :
550 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
551 self.action_Nouveau.triggered.connect(self.fileNew)
552 self.actionNouvel_Include.triggered.connect(self.NewInclude)
553 self.actionOuvrir.triggered.connect(self.fileOpen)
554 self.actionEnregistrer.triggered.connect(self.fileSave)
555 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
556 self.actionFermer.triggered.connect(self.fileClose)
557 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
558 self.actionQuitter.triggered.connect(self.fileExit)
560 self.actionEficas.triggered.connect(self.aidePPal)
561 self.actionVersion.triggered.connect(self.version)
562 self.actionParametres.triggered.connect(self.gestionParam)
563 self.actionCommentaire.triggered.connect(self.ajoutCommentaire)
565 self.actionCouper.triggered.connect(self.editCut)
566 self.actionCopier.triggered.connect(self.editCopy)
567 self.actionColler.triggered.connect(self.editPaste)
568 self.actionSupprimer.triggered.connect(self.supprimer)
569 self.actionRechercher.triggered.connect(self.rechercher)
570 self.actionDeplier_replier.triggered.connect(self.Deplier)
572 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
573 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
574 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
575 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
576 self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
577 self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
581 self.actionTraduitV9V10 = QAction(self)
582 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
583 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
584 self.actionTraduitV10V11 = QAction(self)
585 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
586 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
587 self.actionTraduitV11V12 = QAction(self)
588 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
589 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
590 self.actionSauveLigne = QAction(self)
591 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
593 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
594 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
595 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
596 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
597 self.actionSauveLigne.triggered.connect(self.sauveLigne)
600 self.actionChercheGrpMaille = QAction(self)
601 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
604 self.actionChercheGrp = QAction(self)
605 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
606 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
609 self.actionCode = QAction(self)
610 self.actionCode.setText(tr("Specificites Maille"))
611 self.actionCode.triggered.connect(self.aideCode)
615 self.viewmanager.handleDeplier()
617 def ajoutCommentaire(self):
618 self.viewmanager.ajoutCommentaire()
620 def ouvreFichiers(self) :
621 # Ouverture des fichiers de commandes donnes sur la ligne de commande
624 for study in session.d_env.studies:
626 d=session.get_unit(study,self)
627 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
630 def get_source(self,file):
631 # appele par Editeur/session.py
633 p=convert.plugins['python']()
635 texte=p.convert('execnoparseur')
638 def initPatrons(self) :
639 # Mise a jour du menu des fichiers recemment ouverts
640 from Editeur import listePatrons
641 if not(self.code in listePatrons.sous_menus) :
642 if hasattr(self,"menuPatrons"):
643 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
644 self.menuPatrons.close()
645 delattr(self,"menuPatrons")
647 if (not hasattr(self,"menuPatrons")):
648 self.menuPatrons = QMenu(self.menubar)
649 self.menuPatrons.setObjectName("menuPatrons")
650 self.menubar.addAction(self.menuPatrons.menuAction())
651 self.menuPatrons.setTitle(tr("Patrons"))
653 self.menuPatrons.clear()
654 self.listePatrons = listePatrons.listePatrons(self.code)
656 for nomSsMenu in self.listePatrons.liste:
657 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
658 for fichier in self.listePatrons.liste[nomSsMenu]:
659 id = ssmenu.addAction(fichier)
660 self.ficPatrons[id]=fichier
661 self.id.triggered.connect(self.handleOpenPatrons)
662 # self.Patrons.setItemParameter(id,idx)
665 def initRecents(self):
668 if sys.platform[0:5]=="linux" :
669 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
671 rep=os.path.join('C:/','.config/Eficas',self.code)
672 monFichier=rep+"/listefichiers_"+self.code
678 l=(ligne.split("\n"))[0]
679 self.recent.append(l)
687 def addToRecentList(self, fn):
688 while fn in self.recent: self.recent.remove(fn)
689 self.recent.insert(0,fn)
690 if len(self.recent) > 9:
691 self.recent = self.recent[:9]
694 def addToRecentListQT4(self, fn):
696 Public slot to add a filename to the list of recently opened files.
698 @param fn name of the file to be added
700 self.recent.removeAll(fn)
701 self.recent.prepend(fn)
702 if len(self.recent) > 9:
703 self.recent = self.recent[:9]
707 def sauveRecents(self) :
709 rep=self.CONFIGURATION.rep_user
710 monFichier=rep+"/listefichiers_"+self.code
714 f=open(monFichier,'w')
715 if len(self.recent) == 0 : return
717 while ( index < len(self.recent)):
718 ligne=str(self.recent[index])+"\n"
730 def traductionV11V12(self):
731 from .gereTraduction import traduction
732 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
734 def traductionV10V11(self):
735 from .gereTraduction import traduction
736 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
738 def traductionV9V10(self):
739 from .gereTraduction import traduction
740 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
743 from .monVisu import DVisu
744 titre = tr("version ")
745 monVisuDialg=DVisu(parent=self,fl=0)
746 monVisuDialg.setWindowTitle(titre)
747 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
748 monVisuDialg.adjustSize()
752 repAide=os.path.dirname(os.path.abspath(__file__))
753 maD=os.path.join( repAide,'..','Doc','html')
755 indexAide=os.path.join(maD,'index.html')
756 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
757 else : cmd="start "+indexAide
760 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
763 repAide=os.path.dirname(os.path.abspath(__file__))
764 maD=os.path.join( repAide,'..','Doc','html')
766 indexAide=os.path.join(maD,'index.html')
767 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
768 else : cmd="start "+indexAide
771 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
774 if self.code==None : return
777 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
778 else : cmd="start "+self.fileDoc
782 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
785 def optionEditeur(self) :
787 name='monOptions_'+self.code
789 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
793 optionCode=__import__(name)
796 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
798 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
801 def optionPdf(self) :
802 from monOptionsPdf import OptionPdf
803 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
806 def handleSortieLegere(self):
807 return self.viewmanager.saveLegerCurrentEditor()
809 def handleShowRecentMenu(self):
811 Private method to set up recent files menu.
813 self.recentMenu.clear()
815 for rp in self.recent:
816 id = self.recentMenu.addAction(rp)
817 self.ficRecents[id]=rp
818 id.triggered.connect(self.handleOpenRecent)
819 self.recentMenu.addSeparator()
820 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
822 def handleOpenPatrons(self):
824 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
825 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
827 def handleOpenRecent(self):
829 fichier=self.ficRecents[idx]
830 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
832 def handleClearRecent(self):
833 self.recent = QStringList()
836 def handleRechercherDsCatalogue(self):
837 if not self.viewmanager : return
838 self.viewmanager.handleRechercherDsCatalogue()
842 self.viewmanager.newEditor()
843 except EficasException as exc:
844 msg = six.text_type(exc)
845 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
847 def openProcess(self):
851 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
852 sys.path.insert(0,dirCode)
854 self.definitCode(code,ssCode)
863 self.viewmanager.handleOpen()
864 except EficasException as exc:
865 msg = six.text_type(exc)
867 QMessageBox.warning(self, tr(u"Erreur"), msg)
869 def sauveLigne(self):
870 return self.viewmanager.sauveLigneCurrentEditor()
873 return self.viewmanager.saveCurrentEditor()
875 def fileSaveAs(self):
876 return self.viewmanager.saveAsCurrentEditor()
879 self.viewmanager.handleClose(texte='&Fermer')
881 def fileCloseAll(self):
882 self.viewmanager.handleCloseAll(texte='&Fermer')
885 # On peut sortir sur Abort
886 res=self.viewmanager.handleCloseAll()
892 self.viewmanager.handleEditCopy()
895 self.viewmanager.handleEditCut()
898 self.viewmanager.handleEditPaste()
900 def rechercher(self):
901 self.viewmanager.handleRechercher()
904 self.viewmanager.run()
907 self.viewmanager.saveRun()
911 self.viewmanager.handleSupprimer()
913 def jdcFichierSource(self):
914 self.viewmanager.handleViewJdcFichierSource()
916 def jdcRapport(self):
917 self.viewmanager.handleViewJdcRapport()
920 self.viewmanager.handleViewJdcRegles()
922 def gestionParam(self):
923 self.viewmanager.handlegestionParam()
926 self.viewmanager.handleViewJdcPy()
928 def ouvreArbre(self):
929 self.viewmanager.ouvreArbre()
931 def fermeArbre(self):
932 self.viewmanager.fermeArbre()
934 def NewInclude(self):
935 self.viewmanager.newIncludeEditor()
938 for pathCode in self.ListePathCode:
940 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
941 sys.path.remove(aEnlever)
944 for pathCode in self.listeAEnlever:
946 sys.path.remove(aEnlever)
951 def closeEvent(self,event):
953 if res==2 : event.ignore()
956 if __name__=='__main__':
959 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
961 from Aster import prefsCode
962 if hasattr(prefsCode,'encoding'):
963 # Hack pour changer le codage par defaut des strings
966 sys.setdefaultencoding(prefsCode.encoding)
967 del sys.setdefaultencoding
970 from Editeur import import_code
971 from Editeur import session
973 # Analyse des arguments de la ligne de commande
974 options=session.parse(sys.argv)
978 app = QApplication(sys.argv)
979 #app.setMainWidget(mw) (qt3)