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
22 from determine import monEnvQT5
24 from PyQt5.QtWidgets import QApplication, QMainWindow, QBoxLayout, QMenu, QAction, QMessageBox
25 from PyQt5.QtGui import QIcon
26 from PyQt5.QtCore import Qt
28 from PyQt4.QtGui import *
29 from PyQt4.QtCore import *
31 from Extensions.i18n import tr
32 from Extensions.eficas_exception import EficasException
33 from Extensions import param2
36 from myMain import Ui_Eficas
37 from viewManager import MyTabview
38 from getVersion import getEficasVersion
39 from Editeur import session
43 class Appli(Ui_Eficas,QMainWindow):
45 Class implementing the main user interface.
47 def __init__(self,code=None,salome=0,parent=None,ssCode=None,multi=False,langue='fr',ssIhm=False):
51 QMainWindow.__init__(self,parent)
52 Ui_Eficas.__init__(self)
55 version=getEficasVersion()
56 self.VERSION_EFICAS="Eficas QT4 Salome "+version
57 if monEnvQT5 : self.VERSION_EFICAS="Eficas QT5 Salome "
59 self.parentMainWindow=parent
62 self.top = self #(pour CONFIGURATION)
63 self.QWParent=None #(Pour lancement sans IHM)
68 if monEnvQT5 : self.recent = []
69 else : self.recent = QStringList()
73 self.ListePathCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
74 self.listeCode=['Adao','ADAO','Carmel3D','Telemac','CF','MAP','ZCracks', 'SEP','SPECA','PSEN_Eficas','PSEN_N1']
75 self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons')
81 Accas.SalomeEntry = eficasSalome.SalomeEntry
84 self.demande=multi # specifique PSEN
87 if self.multi == False :
88 self.definitCode(code,ssCode)
92 if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang
93 if langue=='fr': self.langue=langue
94 else : self.langue="ang"
96 from Extensions import localisation
98 localisation.localise(None,langue)
101 #if parent != None : self.parentCentralWidget = parent.centralWidget()
102 #else : self.parentCentralWidget = None
104 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
105 else : self.taille=1700
107 if self.code in ['MAP',] : self.resize(1440,self.height())
108 else : self.resize(self.taille,self.height())
110 icon = QIcon(self.repIcon+"/parametres.png")
111 self.actionParametres.setIcon(icon)
114 self.myQtab.removeTab(0)
115 self.blEntete= QBoxLayout(0,self.frameEntete)
116 self.blEntete.insertWidget(0,self.toolBar)
117 self.blEntete.insertWidget(0,self.menubar)
119 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
121 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
124 self.viewmanager = MyTabview(self)
125 self.recentMenu=QMenu(tr('&Recents'))
126 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
127 # actionARemplacer ne sert que pour l insert Menu
128 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
129 self.menuFichier.removeAction(self.actionARemplacer)
130 if monEnvQT5 : self.connecterSignaux()
131 else : self.connecterSignauxQT4()
132 self.toolBar.addSeparator()
133 if self.code != None : self.construitMenu()
135 self.setWindowTitle(self.VERSION_EFICAS)
139 #except EficasException, exc:
141 # print "je suis dans le except"
142 #if self.salome == 0 : exit()
146 def closeEntete(self):
147 self.menuBar().close()
149 self.frameEntete.close()
151 def definitCode(self,code,ssCode) :
156 from monChoixCode import MonChoixCode
157 widgetChoix = MonChoixCode(self)
158 ret=widgetChoix.exec_()
160 if self.code == None:return # pour le cancel de la fenetre choix code
161 name='prefs_'+self.code
162 prefsCode=__import__(name)
164 self.repIni=prefsCode.repIni
166 self.format_fichier= ssCode #par defaut
167 prefsCode.NAME_SCHEME=ssCode
169 self.format_fichier="python" #par defaut
171 nameConf='configuration_'+self.code
172 configuration=__import__(nameConf)
173 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
174 self.CONFIGStyle = None
175 if hasattr(configuration,'make_config_style'):
176 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
177 #PN --> pb d exception qui font planter salome
178 # plus supporte en python 3
179 #if hasattr(prefsCode,'encoding'):
182 # sys.setdefaultencoding(prefsCode.encoding)
184 def construitMenu(self):
188 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
189 if hasattr(self,intituleMenu):
190 menu=getattr(self,intituleMenu)
191 menu.setAttribute(Qt.WA_DeleteOnClose)
193 delattr(self,intituleMenu)
194 for intituleAction in ("actionExecution","actionSaveRun",):
195 if hasattr(self,intituleAction):
196 action=getattr(self,intituleAction)
197 self.toolBar.removeAction(action)
198 if self.code.upper() in Appli.__dict__.keys():
199 listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
203 repAide=os.path.dirname(os.path.abspath(__file__))
204 fileName='index.html'
205 self.docPath=repAide+"/../Aide"
206 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
207 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
208 self.fileDoc=os.path.join(self.docPath,fileName)
209 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
210 if not os.path.isfile(self.fileDoc) :
213 self.actionCode.setEnabled(False)
216 self.actionCode.setEnabled(True)
217 self.menuAide.addAction(self.actionCode)
223 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
224 sys.path.insert(0,dirCode)
226 self.definitCode(code,ssCode)
236 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
237 sys.path.insert(0,dirCode)
239 self.definitCode(code,ssCode)
245 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
246 self.actionN1 = QAction(self)
247 self.actionN1.setText(tr("Process Output"))
248 self.menuN1.addAction(self.actionN1)
249 if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
250 else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
254 if hasattr(self,'actionOpenProcess'):return
256 self.actionOpenProcess = QAction(self)
257 self.actionOpenProcess.setText(tr("Open Process_Output File"))
258 self.menuN1.addAction(self.actionOpenProcess)
259 if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
260 else : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
262 def ajoutExecution(self):
263 self.menuExecution = self.menubar.addMenu(tr("&Run"))
264 self.actionExecution = QAction(self)
265 if sys.platform[0:5]=="linux":
266 icon6 = QIcon(self.repIcon+"/roue.png")
267 self.actionExecution.setIcon(icon6)
269 self.actionExecution.setText(tr("Run"))
270 self.actionExecution.setObjectName("actionExecution")
271 self.menuExecution.addAction(self.actionExecution)
272 if not(self.actionExecution in self.toolBar.actions()):
273 self.toolBar.addAction(self.actionExecution)
274 self.actionExecution.setText(tr("Run"))
275 if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
276 else : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
278 def ajoutSauveExecution(self):
279 self.actionSaveRun = QAction(self)
280 icon7 = QIcon(self.repIcon+"/export_MAP.png")
281 self.actionSaveRun.setIcon(icon7)
282 self.actionSaveRun.setObjectName("actionSaveRun")
283 self.menuExecution.addAction(self.actionSaveRun)
284 if not(self.actionSaveRun in self.toolBar.actions()):
285 self.toolBar.addAction(self.actionSaveRun)
286 self.actionSaveRun.setText(tr("Save Run"))
287 if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
288 else : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
290 def griserActionsStructures(self):
291 self.actionCouper.setEnabled(False)
292 self.actionColler.setEnabled(False)
293 self.actionCopier.setEnabled(False)
294 self.actionSupprimer.setEnabled(False)
296 def enleverActionsStructures(self):
297 self.toolBar.removeAction(self.actionCopier)
298 self.toolBar.removeAction(self.actionColler)
299 self.toolBar.removeAction(self.actionCouper)
300 self.menuEdition.removeAction(self.actionCouper)
301 self.menuEdition.removeAction(self.actionCopier)
302 self.menuEdition.removeAction(self.actionColler)
305 def enleverParametres(self):
306 self.toolBar.removeAction(self.actionParametres)
307 self.menuJdC.removeAction(self.actionParametres)
310 def enleverNewInclude(self):
311 self.actionNouvel_Include.setVisible(False)
313 def enleverRechercherDsCatalogue(self):
314 self.actionRechercherDsCatalogue.setVisible(False)
316 def connectRechercherDsCatalogue(self):
318 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
320 self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
322 def ajoutSortieLegere(self):
323 self.actionSortieLegere = QAction(self)
324 self.actionSortieLegere.setText(tr("Sortie Legere"))
325 self.menuFichier.addAction(self.actionSortieLegere)
327 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
329 self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
333 self.enleverNewInclude()
334 self.toolBar.addSeparator()
335 self.ajoutExecution()
337 self.menuOptions = self.menubar.addMenu("menuOptions")
338 self.menuOptions.addAction(self.actionParametres_Eficas)
339 self.menuOptions.setTitle(tr("Options"))
342 self.enleverActionsStructures()
343 self.enleverNewInclude()
346 self.menuTraduction = self.menubar.addMenu("menuTraduction")
347 self.menuTraduction.addAction(self.actionTraduitV11V12)
348 self.menuTraduction.addAction(self.actionTraduitV10V11)
349 self.menuTraduction.addAction(self.actionTraduitV9V10)
350 self.menuTraduction.setTitle(tr("Traduction"))
352 self.menuFichier.addAction(self.actionSauveLigne)
354 self.menuOptions = self.menubar.addMenu("menuOptions")
355 self.menuOptions.addAction(self.actionParametres_Eficas)
356 self.menuOptions.addAction(self.actionLecteur_Pdf)
357 self.menuOptions.setTitle(tr("Options"))
360 #if self.salome == 0 : return
361 self.enleverNewInclude()
362 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
363 self.menuMesh.setObjectName("Mesh")
364 self.menuMesh.addAction(self.actionChercheGrpMaille)
365 #self.griserActionsStructures()
368 self.enleverNewInclude()
369 self.enleverRechercherDsCatalogue()
370 self.ajoutExecution()
371 self.ajoutSauveExecution()
372 self.griserActionsStructures()
375 self.enleverNewInclude()
376 self.toolBar.addSeparator()
377 self.ajoutExecution()
378 self.ajoutSauveExecution()
379 self.menuOptions = self.menubar.addMenu("menuOptions")
380 self.menuOptions.addAction(self.actionParametres_Eficas)
381 self.menuOptions.setTitle(tr("Options"))
387 self.action_Nouveau.triggered.disconnect(self.fileNew)
388 self.action_Nouveau.triggered.connect(self.newPSEN)
391 self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
392 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
393 self.enleverActionsStructures()
394 self.enleverParametres()
395 self.enleverRechercherDsCatalogue()
396 self.enleverNewInclude()
397 self.ajoutExecution()
403 self.enleverActionsStructures()
404 self.enleverParametres()
405 self.enleverRechercherDsCatalogue()
406 self.enleverNewInclude()
407 self.ajoutExecution()
411 self.enleverActionsStructures()
412 self.enleverNewInclude()
413 self.connectRechercherDsCatalogue()
414 self.ajoutSortieLegere()
416 def ajoutHelpPSEN(self):
417 self.actionParametres_Eficas.setText('Help PSEN')
418 if monEnvQT5 : self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
419 else : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
423 def ChercheGrpMesh(self):
424 Msg,listeGroup=self.ChercheGrpMeshInSalome()
426 self.viewmanager.handleAjoutGroup(listeGroup)
428 print "il faut gerer les erreurs"
430 def ChercheGrpMaille(self):
431 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
433 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salomé
434 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salomé si ligne précédente commentée
436 raise ValueError('Salome non ouvert')
438 self.viewmanager.handleAjoutGroup(listeGroup)
440 print "il faut gerer les erreurs"
443 def ChercheGrp(self):
444 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
446 # self.viewmanager.handleAjoutGroup(listeGroup)
448 #print "il faut gerer "
452 def ajoutIcones(self) :
453 # Pour pallier les soucis de repertoire d icone
455 icon = QIcon(self.repIcon+"/new_file.png")
456 self.action_Nouveau.setIcon(icon)
457 icon1 = QIcon(self.repIcon+"/ouvrir.png")
458 self.actionOuvrir.setIcon(icon1)
459 icon2 = QIcon(self.repIcon+"/save.png")
460 self.actionEnregistrer.setIcon(icon2)
461 icon6 = QIcon(self.repIcon+"/delete.png")
462 self.actionSupprimer.setIcon(icon6)
463 icon7 = QIcon(self.repIcon+"/roue.png")
464 self.actionExecution.setIcon(icon7)
469 def connecterSignauxQT4(self) :
470 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
472 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
473 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
474 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
475 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
476 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
477 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
478 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
479 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
481 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
482 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
483 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
485 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
486 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
487 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
488 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
489 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
490 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
492 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
493 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
494 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
495 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
500 self.actionTraduitV9V10 = QAction(self)
501 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
502 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
503 self.actionTraduitV10V11 = QAction(self)
504 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
505 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
506 self.actionTraduitV11V12 = QAction(self)
507 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
508 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
509 self.actionSauveLigne = QAction(self)
510 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
512 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
513 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
514 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
515 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
516 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
517 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
521 self.actionChercheGrpMaille = QAction(self)
522 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
523 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
526 self.actionChercheGrp = QAction(self)
527 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
528 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
531 self.actionCode = QAction(self)
532 self.actionCode.setText(tr("Specificites Maille"))
533 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
535 def connecterSignaux(self) :
537 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
538 self.action_Nouveau.triggered.connect(self.fileNew)
539 self.actionNouvel_Include.triggered.connect(self.NewInclude)
540 self.actionOuvrir.triggered.connect(self.fileOpen)
541 self.actionEnregistrer.triggered.connect(self.fileSave)
542 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
543 self.actionFermer.triggered.connect(self.fileClose)
544 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
545 self.actionQuitter.triggered.connect(self.fileExit)
547 self.actionEficas.triggered.connect(self.aidePPal)
548 self.actionVersion.triggered.connect(self.version)
549 self.actionParametres.triggered.connect(self.gestionParam)
551 self.actionCouper.triggered.connect(self.editCut)
552 self.actionCopier.triggered.connect(self.editCopy)
553 self.actionColler.triggered.connect(self.editPaste)
554 self.actionSupprimer.triggered.connect(self.supprimer)
555 self.actionRechercher.triggered.connect(self.rechercher)
556 self.actionDeplier_replier.triggered.connect(self.Deplier)
558 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
559 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
560 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
561 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
565 self.actionTraduitV9V10 = QAction(self)
566 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
567 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
568 self.actionTraduitV10V11 = QAction(self)
569 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
570 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
571 self.actionTraduitV11V12 = QAction(self)
572 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
573 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
574 self.actionSauveLigne = QAction(self)
575 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
577 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
578 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
579 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
580 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
581 self.actionSauveLigne.triggered.connect(self.sauveLigne)
584 self.actionChercheGrpMaille = QAction(self)
585 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
588 self.actionChercheGrp = QAction(self)
589 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
590 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
593 self.actionCode = QAction(self)
594 self.actionCode.setText(tr("Specificites Maille"))
595 self.actionCode.triggered.connect(self.aideCode)
599 self.viewmanager.handleDeplier()
601 def ouvreFichiers(self) :
602 # Ouverture des fichiers de commandes donnes sur la ligne de commande
605 for study in session.d_env.studies:
607 d=session.get_unit(study,self)
608 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
611 def get_source(self,file):
612 # appele par Editeur/session.py
614 p=convert.plugins['python']()
616 texte=p.convert('execnoparseur')
619 def initPatrons(self) :
620 # Mise a jour du menu des fichiers recemment ouverts
621 from Editeur import listePatrons
622 if not(self.code in listePatrons.sous_menus.keys()) :
623 if hasattr(self,"menuPatrons"):
624 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
625 self.menuPatrons.close()
626 delattr(self,"menuPatrons")
628 if (not hasattr(self,"menuPatrons")):
629 self.menuPatrons = QMenu(self.menubar)
630 self.menuPatrons.setObjectName("menuPatrons")
631 self.menubar.addAction(self.menuPatrons.menuAction())
632 self.menuPatrons.setTitle(tr("Patrons"))
634 self.menuPatrons.clear()
635 self.listePatrons = listePatrons.listePatrons(self.code)
637 for nomSsMenu in self.listePatrons.liste.keys():
638 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
639 for fichier in self.listePatrons.liste[nomSsMenu]:
640 id = ssmenu.addAction(fichier)
641 self.ficPatrons[id]=fichier
642 if monEnvQT5 : self.id.triggered.connect(self.handleOpenPatrons)
643 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
644 # self.Patrons.setItemParameter(id,idx)
647 def initRecents(self):
648 if monEnvQT5 : self.recent = []
649 else : self.recent = QStringList()
651 if sys.platform[0:5]=="linux" :
652 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
654 rep=os.path.join('C:/','.config/Eficas',self.code)
655 monFichier=rep+"/listefichiers_"+self.code
661 l=(ligne.split("\n"))[0]
662 self.recent.append(l)
670 def addToRecentList(self, fn):
671 if not monEnvQT5 : self.addToRecentListQT4(fn); return
672 while fn in self.recent: self.recent.remove(fn)
673 self.recent.insert(0,fn)
674 if len(self.recent) > 9:
675 self.recent = self.recent[:9]
678 def addToRecentListQT4(self, fn):
680 Public slot to add a filename to the list of recently opened files.
682 @param fn name of the file to be added
684 self.recent.removeAll(fn)
685 self.recent.prepend(fn)
686 if len(self.recent) > 9:
687 self.recent = self.recent[:9]
691 def sauveRecents(self) :
693 rep=self.CONFIGURATION.rep_user
694 monFichier=rep+"/listefichiers_"+self.code
698 f=open(monFichier,'w')
699 if len(self.recent) == 0 : return
701 while ( index < len(self.recent)):
702 ligne=str(self.recent[index])+"\n"
714 def traductionV11V12(self):
715 from gereTraduction import traduction
716 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
718 def traductionV10V11(self):
719 from gereTraduction import traduction
720 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
722 def traductionV9V10(self):
723 from gereTraduction import traduction
724 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
727 from monVisu import DVisu
728 titre = tr("version ")
729 monVisuDialg=DVisu(parent=self,fl=0)
730 monVisuDialg.setWindowTitle(titre)
731 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
732 monVisuDialg.adjustSize()
736 repAide=os.path.dirname(os.path.abspath(__file__))
737 maD=os.path.join( repAide,'..','Doc','html')
739 indexAide=os.path.join(maD,'index.html')
740 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
741 else : cmd="start "+indexAide
744 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
747 repAide=os.path.dirname(os.path.abspath(__file__))
748 maD=os.path.join( repAide,'..','Doc','html')
750 indexAide=os.path.join(maD,'index.html')
751 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
752 else : cmd="start "+indexAide
755 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
758 if self.code==None : return
761 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
762 else : cmd="start "+self.fileDoc
766 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
769 def optionEditeur(self) :
771 name='monOptions_'+self.code
773 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
777 optionCode=__import__(name)
780 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
782 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
785 def optionPdf(self) :
786 from monOptionsPdf import OptionPdf
787 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
790 def handleSortieLegere(self):
793 def handleShowRecentMenu(self):
795 Private method to set up recent files menu.
797 self.recentMenu.clear()
799 for rp in self.recent:
800 id = self.recentMenu.addAction(rp)
801 self.ficRecents[id]=rp
802 if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
803 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
804 self.recentMenu.addSeparator()
805 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
807 def handleOpenPatrons(self):
809 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
810 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
812 def handleOpenRecent(self):
814 fichier=self.ficRecents[idx]
815 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
817 def handleClearRecent(self):
818 self.recent = QStringList()
821 def handleRechercherDsCatalogue(self):
822 if not self.viewmanager : return
823 self.viewmanager.handleRechercherDsCatalogue()
827 self.viewmanager.newEditor()
828 except EficasException, exc:
830 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
832 def openProcess(self):
836 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
837 sys.path.insert(0,dirCode)
839 self.definitCode(code,ssCode)
848 self.viewmanager.handleOpen()
849 except EficasException, exc:
852 QMessageBox.warning(self, tr(u"Erreur"), msg)
854 def sauveLigne(self):
855 return self.viewmanager.sauveLigneCurrentEditor()
858 return self.viewmanager.saveCurrentEditor()
860 def fileSaveAs(self):
861 return self.viewmanager.saveAsCurrentEditor()
864 self.viewmanager.handleClose(texte='&Fermer')
866 def fileCloseAll(self):
867 self.viewmanager.handleCloseAll(texte='&Fermer')
870 # On peut sortir sur Abort
871 res=self.viewmanager.handleCloseAll()
877 self.viewmanager.handleEditCopy()
880 self.viewmanager.handleEditCut()
883 self.viewmanager.handleEditPaste()
885 def rechercher(self):
886 self.viewmanager.handleRechercher()
889 self.viewmanager.run()
892 self.viewmanager.saveRun()
896 self.viewmanager.handleSupprimer()
898 def jdcFichierSource(self):
899 self.viewmanager.handleViewJdcFichierSource()
901 def jdcRapport(self):
902 self.viewmanager.handleViewJdcRapport()
905 self.viewmanager.handleViewJdcRegles()
907 def gestionParam(self):
908 self.viewmanager.handlegestionParam()
911 self.viewmanager.handleViewJdcPy()
914 def NewInclude(self):
915 self.viewmanager.newIncludeEditor()
918 for pathCode in self.ListePathCode:
920 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
921 sys.path.remove(aEnlever)
924 for pathCode in self.listeAEnlever:
926 sys.path.remove(aEnlever)
931 def closeEvent(self,event):
933 if res==2 : event.ignore()
936 if __name__=='__main__':
939 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
941 from Aster import prefsCode
942 if hasattr(prefsCode,'encoding'):
943 # Hack pour changer le codage par defaut des strings
946 sys.setdefaultencoding(prefsCode.encoding)
947 del sys.setdefaultencoding
950 from Editeur import import_code
951 from Editeur import session
953 # Analyse des arguments de la ligne de commande
954 options=session.parse(sys.argv)
958 app = QApplication(sys.argv)
959 #app.setMainWidget(mw) (qt3)