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)
99 self.suiteTelemac=False
100 if hasattr (self, 'CONFIGURATION') :
101 if self.CONFIGURATION.force_langue :
102 from .monChoixLangue import MonChoixLangue
103 widgetLangue = MonChoixLangue(self)
104 ret=widgetLangue.exec_()
105 self.suiteTelemac=self.CONFIGURATION.suiteTelemac
108 if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : self.langue=self.CONFIGURATION.lang
109 from Extensions import localisation
111 if hasattr (self, 'CONFIGURATION') : localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
114 #if parent != None : self.parentCentralWidget = parent.centralWidget()
115 #else : self.parentCentralWidget = None
118 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
119 else : self.taille=1700
121 if self.code in ['MAP',] : self.resize(1440,self.height())
122 else : self.resize(self.taille,self.height())
125 icon = QIcon(self.repIcon+"/parametres.png")
126 self.actionParametres.setIcon(icon)
129 self.myQtab.removeTab(0)
130 self.blEntete= QBoxLayout(0,self.frameEntete)
131 self.blEntete.insertWidget(0,self.toolBar)
132 self.blEntete.insertWidget(0,self.menubar)
134 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
136 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
139 self.viewmanager = MyTabview(self)
140 self.recentMenu=QMenu(tr('&Recents'))
141 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
142 # actionARemplacer ne sert que pour l insert Menu
143 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
144 self.menuFichier.removeAction(self.actionARemplacer)
145 self.connecterSignaux()
146 self.toolBar.addSeparator()
147 if self.code != None : self.construitMenu()
149 self.setWindowTitle(self.VERSION_EFICAS)
153 #except EficasException, exc:
155 # print "je suis dans le except"
156 #if self.salome == 0 : exit()
160 def closeEntete(self):
161 self.menuBar().close()
163 self.frameEntete.close()
165 def definitCode(self,code,ssCode) :
170 from .monChoixCode import MonChoixCode
171 widgetChoix = MonChoixCode(self)
172 ret=widgetChoix.exec_()
174 if self.code == None:return # pour le cancel de la fenetre choix code
175 name='prefs_'+self.code
176 prefsCode=__import__(name)
178 self.repIni=prefsCode.repIni
180 self.format_fichier= ssCode #par defaut
181 prefsCode.NAME_SCHEME=ssCode
183 self.format_fichier="python" #par defaut
185 nameConf='configuration_'+self.code
186 configuration=__import__(nameConf)
187 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
188 self.CONFIGStyle = None
189 if hasattr(configuration,'make_config_style'):
190 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
192 if hasattr (self,'CONFIGURATION') and self.CONFIGURATION.translatorFichier :
193 from Extensions import localisation
194 localisation.localise(None,self.langue,translatorFichier=self.CONFIGURATION.translatorFichier)
196 #PN --> pb d exception qui font planter salome
197 # plus supporte en python 3
199 #if hasattr(prefsCode,'encoding'):
202 # sys.setdefaultencoding(prefsCode.encoding)
204 def construitMenu(self):
208 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
209 if hasattr(self,intituleMenu):
210 menu=getattr(self,intituleMenu)
211 menu.setAttribute(Qt.WA_DeleteOnClose)
213 delattr(self,intituleMenu)
214 for intituleAction in ("actionExecution","actionSaveRun"):
215 if hasattr(self,intituleAction):
216 action=getattr(self,intituleAction)
217 self.toolBar.removeAction(action)
218 if self.code.upper() in Appli.__dict__:
219 Appli.__dict__[self.code.upper()](self,)
220 if self.suiteTelemac : self.lookSuiteTelemac()
224 repAide=os.path.dirname(os.path.abspath(__file__))
225 fileName='index.html'
226 self.docPath=repAide+"/../Aide"
227 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
228 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
229 self.fileDoc=os.path.join(self.docPath,fileName)
230 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
231 if not os.path.isfile(self.fileDoc) :
234 self.actionCode.setEnabled(False)
237 self.actionCode.setEnabled(True)
238 self.menuAide.addAction(self.actionCode)
244 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
245 sys.path.insert(0,dirCode)
247 self.definitCode(code,ssCode)
257 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
258 sys.path.insert(0,dirCode)
260 self.definitCode(code,ssCode)
267 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
268 self.actionN1 = QAction(self)
269 self.actionN1.setText(tr("Process Output"))
270 self.menuN1.addAction(self.actionN1)
271 self.actionN1.triggered.connect(self.newN1)
274 if hasattr(self,'actionOpenProcess'):return
276 self.actionOpenProcess = QAction(self)
277 self.actionOpenProcess.setText(tr("Open Process_Output File"))
278 self.menuN1.addAction(self.actionOpenProcess)
279 self.actionOpenProcess.triggered.connect(self.openProcess)
281 def ajoutExecution(self):
282 self.menuExecution = self.menubar.addMenu(tr("&Run"))
283 self.actionExecution = QAction(self)
284 if sys.platform[0:5]=="linux":
285 icon6 = QIcon(self.repIcon+"/roue.png")
286 self.actionExecution.setIcon(icon6)
288 self.actionExecution.setText(tr("Run"))
289 self.actionExecution.setObjectName("actionExecution")
290 self.menuExecution.addAction(self.actionExecution)
291 if not(self.actionExecution in self.toolBar.actions()):
292 self.toolBar.addAction(self.actionExecution)
293 self.actionExecution.setText(tr("Run"))
294 self.actionExecution.triggered.connect(self.run)
296 def ajoutSauveExecution(self):
297 self.actionSaveRun = QAction(self)
298 icon7 = QIcon(self.repIcon+"/export_MAP.png")
299 self.actionSaveRun.setIcon(icon7)
300 self.actionSaveRun.setObjectName("actionSaveRun")
301 self.menuExecution.addAction(self.actionSaveRun)
302 if not(self.actionSaveRun in self.toolBar.actions()):
303 self.toolBar.addAction(self.actionSaveRun)
304 self.actionSaveRun.setText(tr("Save Run"))
305 self.actionSaveRun.triggered.connect(self.saveRun)
307 def griserActionsStructures(self):
308 self.actionCouper.setEnabled(False)
309 self.actionColler.setEnabled(False)
310 self.actionCopier.setEnabled(False)
311 self.actionSupprimer.setEnabled(False)
313 def enleverActionsStructures(self):
314 self.toolBar.removeAction(self.actionCopier)
315 self.toolBar.removeAction(self.actionColler)
316 self.toolBar.removeAction(self.actionCouper)
317 self.menuEdition.removeAction(self.actionCouper)
318 self.menuEdition.removeAction(self.actionCopier)
319 self.menuEdition.removeAction(self.actionColler)
322 def enleverParametres(self):
323 self.toolBar.removeAction(self.actionParametres)
324 self.menuJdC.removeAction(self.actionParametres)
326 def enleverSupprimer(self):
327 self.toolBar.removeAction(self.actionSupprimer)
329 def enleverNewInclude(self):
330 self.actionNouvel_Include.setVisible(False)
332 def enleverRechercherDsCatalogue(self):
333 self.actionRechercherDsCatalogue.setVisible(False)
335 def connectRechercherDsCatalogue(self):
336 if hasattr(self,'rechercherDejaLa') : return
337 self.rechercherDejaLa=True
338 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
340 def ajoutSortieLegere(self):
341 if hasattr(self,'actionSortieLegere') : return
342 self.actionSortieLegere = QAction(self)
343 self.actionSortieLegere.setText(tr("Sortie Legere"))
344 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
345 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
349 self.enleverNewInclude()
350 self.toolBar.addSeparator()
351 self.ajoutExecution()
353 self.menuOptions = self.menubar.addMenu("menuOptions")
354 self.menuOptions.addAction(self.actionParametres_Eficas)
355 self.menuOptions.setTitle(tr("Options"))
358 self.enleverActionsStructures()
359 self.enleverNewInclude()
362 self.menuTraduction = self.menubar.addMenu("menuTraduction")
363 self.menuTraduction.addAction(self.actionTraduitV11V12)
364 self.menuTraduction.addAction(self.actionTraduitV10V11)
365 self.menuTraduction.addAction(self.actionTraduitV9V10)
366 self.menuTraduction.setTitle(tr("Traduction"))
368 self.menuFichier.addAction(self.actionSauveLigne)
370 self.menuOptions = self.menubar.addMenu("menuOptions")
371 self.menuOptions.addAction(self.actionParametres_Eficas)
372 self.menuOptions.addAction(self.actionLecteur_Pdf)
373 self.menuOptions.setTitle(tr("Options"))
376 #if self.salome == 0 : return
377 self.enleverNewInclude()
378 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
379 self.menuMesh.setObjectName("Mesh")
380 self.menuMesh.addAction(self.actionChercheGrpMaille)
381 #self.griserActionsStructures()
384 self.enleverNewInclude()
385 self.enleverRechercherDsCatalogue()
386 self.ajoutExecution()
387 self.ajoutSauveExecution()
388 self.griserActionsStructures()
391 self.enleverNewInclude()
392 self.toolBar.addSeparator()
393 self.ajoutExecution()
394 self.ajoutSauveExecution()
395 self.menuOptions = self.menubar.addMenu("menuOptions")
396 self.menuOptions.addAction(self.actionParametres_Eficas)
397 self.menuOptions.setTitle(tr("Options"))
400 if self.first: self.first=0
401 try : self.action_Nouveau.triggered.disconnect(self.fileNew)
403 try : self.action_Nouveau.triggered.disconnect(self.newPSEN)
406 self.action_Nouveau.triggered.connect(self.newPSEN)
407 self.enleverActionsStructures()
408 self.enleverParametres()
409 self.enleverRechercherDsCatalogue()
410 self.enleverNewInclude()
411 self.ajoutExecution()
417 self.enleverActionsStructures()
418 self.enleverParametres()
419 self.enleverRechercherDsCatalogue()
420 self.enleverNewInclude()
421 self.ajoutExecution()
425 self.enleverActionsStructures()
426 self.enleverNewInclude()
427 self.connectRechercherDsCatalogue()
428 self.ajoutSortieLegere()
430 def lookSuiteTelemac(self):
431 self.enleverActionsStructures()
432 self.enleverNewInclude()
433 self.enleverParametres()
434 self.enleverSupprimer()
435 self.enleverRechercherDsCatalogue()
437 def ajoutHelpPSEN(self):
438 self.actionParametres_Eficas.setText('Help PSEN')
439 self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
443 def ChercheGrpMesh(self):
444 Msg,listeGroup=self.ChercheGrpMeshInSalome()
446 self.viewmanager.handleAjoutGroup(listeGroup)
448 print ("il faut gerer les erreurs")
450 def ChercheGrpMaille(self):
451 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
453 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
454 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
456 raise ValueError('Salome non ouvert')
458 self.viewmanager.handleAjoutGroup(listeGroup)
460 print ("il faut gerer les erreurs")
463 def ChercheGrp(self):
464 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
466 # self.viewmanager.handleAjoutGroup(listeGroup)
468 #print "il faut gerer "
472 def ajoutIcones(self) :
473 # Pour pallier les soucis de repertoire d icone
475 icon = QIcon(self.repIcon+"/new_file.png")
476 self.action_Nouveau.setIcon(icon)
477 icon1 = QIcon(self.repIcon+"/ouvrir.png")
478 self.actionOuvrir.setIcon(icon1)
479 icon2 = QIcon(self.repIcon+"/save.png")
480 self.actionEnregistrer.setIcon(icon2)
481 icon6 = QIcon(self.repIcon+"/delete.png")
482 self.actionSupprimer.setIcon(icon6)
483 icon7 = QIcon(self.repIcon+"/roue.png")
484 self.actionExecution.setIcon(icon7)
489 def connecterSignauxQT4(self) :
490 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
492 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
493 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
494 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
495 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
496 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
497 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
498 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
499 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
501 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
502 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
503 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
505 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
506 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
507 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
508 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
509 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
510 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
512 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
513 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
514 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
515 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
521 self.actionTraduitV9V10 = QAction(self)
522 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
523 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
524 self.actionTraduitV10V11 = QAction(self)
525 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
526 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
527 self.actionTraduitV11V12 = QAction(self)
528 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
529 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
530 self.actionSauveLigne = QAction(self)
531 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
533 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
534 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
535 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
536 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
537 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
538 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
542 self.actionChercheGrpMaille = QAction(self)
543 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
544 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
547 self.actionChercheGrp = QAction(self)
548 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
549 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
552 self.actionCode = QAction(self)
553 self.actionCode.setText(tr("Specificites Maille"))
554 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
556 def connecterSignaux(self) :
558 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
559 self.action_Nouveau.triggered.connect(self.fileNew)
560 self.actionNouvel_Include.triggered.connect(self.NewInclude)
561 self.actionOuvrir.triggered.connect(self.fileOpen)
562 self.actionEnregistrer.triggered.connect(self.fileSave)
563 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
564 self.actionFermer.triggered.connect(self.fileClose)
565 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
566 self.actionQuitter.triggered.connect(self.fileExit)
568 self.actionEficas.triggered.connect(self.aidePPal)
569 self.actionVersion.triggered.connect(self.version)
570 self.actionParametres.triggered.connect(self.gestionParam)
571 self.actionCommentaire.triggered.connect(self.ajoutCommentaire)
573 self.actionCouper.triggered.connect(self.editCut)
574 self.actionCopier.triggered.connect(self.editCopy)
575 self.actionColler.triggered.connect(self.editPaste)
576 self.actionSupprimer.triggered.connect(self.supprimer)
577 self.actionRechercher.triggered.connect(self.rechercher)
578 self.actionDeplier_replier.triggered.connect(self.Deplier)
580 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
581 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
582 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
583 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
584 self.actionAfficher_l_Arbre.triggered.connect(self.ouvreArbre)
585 self.actionCacher_l_Arbre.triggered.connect(self.fermeArbre)
589 self.actionTraduitV9V10 = QAction(self)
590 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
591 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
592 self.actionTraduitV10V11 = QAction(self)
593 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
594 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
595 self.actionTraduitV11V12 = QAction(self)
596 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
597 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
598 self.actionSauveLigne = QAction(self)
599 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
601 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
602 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
603 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
604 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
605 self.actionSauveLigne.triggered.connect(self.sauveLigne)
608 self.actionChercheGrpMaille = QAction(self)
609 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
612 self.actionChercheGrp = QAction(self)
613 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
614 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
617 self.actionCode = QAction(self)
618 self.actionCode.setText(tr("Specificites Maille"))
619 self.actionCode.triggered.connect(self.aideCode)
623 self.viewmanager.handleDeplier()
625 def ajoutCommentaire(self):
626 self.viewmanager.ajoutCommentaire()
628 def ouvreFichiers(self) :
629 # Ouverture des fichiers de commandes donnes sur la ligne de commande
632 for study in session.d_env.studies:
634 d=session.get_unit(study,self)
635 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
638 def get_source(self,file):
639 # appele par Editeur/session.py
641 p=convert.plugins['python']()
643 texte=p.convert('execnoparseur')
646 def initPatrons(self) :
647 # Mise a jour du menu des fichiers recemment ouverts
648 from Editeur import listePatrons
649 if not(self.code in listePatrons.sous_menus) :
650 if hasattr(self,"menuPatrons"):
651 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
652 self.menuPatrons.close()
653 delattr(self,"menuPatrons")
655 if (not hasattr(self,"menuPatrons")):
656 self.menuPatrons = QMenu(self.menubar)
657 self.menuPatrons.setObjectName("menuPatrons")
658 self.menubar.addAction(self.menuPatrons.menuAction())
659 self.menuPatrons.setTitle(tr("Patrons"))
661 self.menuPatrons.clear()
662 self.listePatrons = listePatrons.listePatrons(self.code)
664 for nomSsMenu in self.listePatrons.liste:
665 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
666 for fichier in self.listePatrons.liste[nomSsMenu]:
667 id = ssmenu.addAction(fichier)
668 self.ficPatrons[id]=fichier
669 self.id.triggered.connect(self.handleOpenPatrons)
670 # self.Patrons.setItemParameter(id,idx)
673 def initRecents(self):
676 if sys.platform[0:5]=="linux" :
677 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
679 rep=os.path.join('C:/','.config/Eficas',self.code)
680 monFichier=rep+"/listefichiers_"+self.code
686 l=(ligne.split("\n"))[0]
687 self.recent.append(l)
695 def addToRecentList(self, fn):
696 while fn in self.recent: self.recent.remove(fn)
697 self.recent.insert(0,fn)
698 if len(self.recent) > 9:
699 self.recent = self.recent[:9]
702 def addToRecentListQT4(self, fn):
704 Public slot to add a filename to the list of recently opened files.
706 @param fn name of the file to be added
708 self.recent.removeAll(fn)
709 self.recent.prepend(fn)
710 if len(self.recent) > 9:
711 self.recent = self.recent[:9]
715 def sauveRecents(self) :
717 rep=self.CONFIGURATION.rep_user
718 monFichier=rep+"/listefichiers_"+self.code
722 f=open(monFichier,'w')
723 if len(self.recent) == 0 : return
725 while ( index < len(self.recent)):
726 ligne=str(self.recent[index])+"\n"
738 def traductionV11V12(self):
739 from .gereTraduction import traduction
740 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
742 def traductionV10V11(self):
743 from .gereTraduction import traduction
744 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
746 def traductionV9V10(self):
747 from .gereTraduction import traduction
748 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
751 from .monVisu import DVisu
752 titre = tr("version ")
753 monVisuDialg=DVisu(parent=self,fl=0)
754 monVisuDialg.setWindowTitle(titre)
755 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
756 monVisuDialg.adjustSize()
760 repAide=os.path.dirname(os.path.abspath(__file__))
761 maD=os.path.join( repAide,'..','Doc')
763 indexAide=os.path.join(maD,'index.html')
764 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
765 else : cmd="start "+indexAide
768 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
771 repAide=os.path.dirname(os.path.abspath(__file__))
772 maD=os.path.join( repAide,'..','Doc')
774 indexAide=os.path.join(maD,'index.html')
775 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
776 else : cmd="start "+indexAide
779 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
782 if self.code==None : return
785 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
786 else : cmd="start "+self.fileDoc
790 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
793 def optionEditeur(self) :
795 name='monOptions_'+self.code
797 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
801 optionCode=__import__(name)
804 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
806 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
809 def optionPdf(self) :
810 from monOptionsPdf import OptionPdf
811 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
814 def handleSortieLegere(self):
815 return self.viewmanager.saveLegerCurrentEditor()
817 def handleShowRecentMenu(self):
819 Private method to set up recent files menu.
821 self.recentMenu.clear()
823 for rp in self.recent:
824 id = self.recentMenu.addAction(rp)
825 self.ficRecents[id]=rp
826 id.triggered.connect(self.handleOpenRecent)
827 self.recentMenu.addSeparator()
828 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
830 def handleOpenPatrons(self):
832 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
833 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
835 def handleOpenRecent(self):
837 fichier=self.ficRecents[idx]
838 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
840 def handleClearRecent(self):
841 self.recent = QStringList()
844 def handleRechercherDsCatalogue(self):
845 if not self.viewmanager : return
846 self.viewmanager.handleRechercherDsCatalogue()
850 self.viewmanager.newEditor()
851 except EficasException as exc:
852 msg = six.text_type(exc)
853 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
855 def openProcess(self):
859 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
860 sys.path.insert(0,dirCode)
862 self.definitCode(code,ssCode)
871 self.viewmanager.handleOpen()
872 except EficasException as exc:
873 msg = six.text_type(exc)
875 QMessageBox.warning(self, tr(u"Erreur"), msg)
877 def sauveLigne(self):
878 return self.viewmanager.sauveLigneCurrentEditor()
881 return self.viewmanager.saveCurrentEditor()
883 def fileSaveAs(self):
884 return self.viewmanager.saveAsCurrentEditor()
887 self.viewmanager.handleClose(texte='&Fermer')
889 def fileCloseAll(self):
890 self.viewmanager.handleCloseAll(texte='&Fermer')
893 # On peut sortir sur Abort
894 res=self.viewmanager.handleCloseAll()
900 self.viewmanager.handleEditCopy()
903 self.viewmanager.handleEditCut()
906 self.viewmanager.handleEditPaste()
908 def rechercher(self):
909 self.viewmanager.handleRechercher()
912 self.viewmanager.run()
915 self.viewmanager.saveRun()
919 self.viewmanager.handleSupprimer()
921 def jdcFichierSource(self):
922 self.viewmanager.handleViewJdcFichierSource()
924 def jdcRapport(self):
925 self.viewmanager.handleViewJdcRapport()
928 self.viewmanager.handleViewJdcRegles()
930 def gestionParam(self):
931 self.viewmanager.handlegestionParam()
934 self.viewmanager.handleViewJdcPy()
936 def ouvreArbre(self):
937 self.viewmanager.ouvreArbre()
939 def fermeArbre(self):
940 self.viewmanager.fermeArbre()
942 def NewInclude(self):
943 self.viewmanager.newIncludeEditor()
946 for pathCode in self.ListePathCode:
948 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
949 sys.path.remove(aEnlever)
952 for pathCode in self.listeAEnlever:
954 sys.path.remove(aEnlever)
959 def closeEvent(self,event):
961 if res==2 : event.ignore()
964 if __name__=='__main__':
967 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
969 from Aster import prefsCode
970 if hasattr(prefsCode,'encoding'):
971 # Hack pour changer le codage par defaut des strings
974 sys.setdefaultencoding(prefsCode.encoding)
975 del sys.setdefaultencoding
978 from Editeur import import_code
979 from Editeur import session
981 # Analyse des arguments de la ligne de commande
982 options=session.parse(sys.argv)
986 app = QApplication(sys.argv)
987 #app.setMainWidget(mw) (qt3)