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)
93 if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang
94 if langue=='fr': self.langue=langue
95 else : self.langue="ang"
97 if self.CONFIGURATION.force_langue :
98 from monChoixLangue import MonChoixLangue
99 widgetLangue = MonChoixLangue(self)
100 ret=widgetLangue.exec_()
103 from Extensions import localisation
105 localisation.localise(None,self.langue)
108 #if parent != None : self.parentCentralWidget = parent.centralWidget()
109 #else : self.parentCentralWidget = None
111 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
112 else : self.taille=1700
114 if self.code in ['MAP',] : self.resize(1440,self.height())
115 else : self.resize(self.taille,self.height())
117 icon = QIcon(self.repIcon+"/parametres.png")
118 self.actionParametres.setIcon(icon)
121 self.myQtab.removeTab(0)
122 self.blEntete= QBoxLayout(0,self.frameEntete)
123 self.blEntete.insertWidget(0,self.toolBar)
124 self.blEntete.insertWidget(0,self.menubar)
126 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
128 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
131 self.viewmanager = MyTabview(self)
132 self.recentMenu=QMenu(tr('&Recents'))
133 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
134 # actionARemplacer ne sert que pour l insert Menu
135 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
136 self.menuFichier.removeAction(self.actionARemplacer)
137 if monEnvQT5 : self.connecterSignaux()
138 else : self.connecterSignauxQT4()
139 self.toolBar.addSeparator()
140 if self.code != None : self.construitMenu()
142 self.setWindowTitle(self.VERSION_EFICAS)
146 #except EficasException, exc:
148 # print "je suis dans le except"
149 #if self.salome == 0 : exit()
153 def closeEntete(self):
154 self.menuBar().close()
156 self.frameEntete.close()
158 def definitCode(self,code,ssCode) :
163 from monChoixCode import MonChoixCode
164 widgetChoix = MonChoixCode(self)
165 ret=widgetChoix.exec_()
167 if self.code == None:return # pour le cancel de la fenetre choix code
168 name='prefs_'+self.code
169 prefsCode=__import__(name)
171 self.repIni=prefsCode.repIni
173 self.format_fichier= ssCode #par defaut
174 prefsCode.NAME_SCHEME=ssCode
176 self.format_fichier="python" #par defaut
178 nameConf='configuration_'+self.code
179 configuration=__import__(nameConf)
180 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
181 self.CONFIGStyle = None
182 if hasattr(configuration,'make_config_style'):
183 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
184 #PN --> pb d exception qui font planter salome
185 # plus supporte en python 3
186 #if hasattr(prefsCode,'encoding'):
189 # sys.setdefaultencoding(prefsCode.encoding)
191 def construitMenu(self):
195 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
196 if hasattr(self,intituleMenu):
197 menu=getattr(self,intituleMenu)
198 menu.setAttribute(Qt.WA_DeleteOnClose)
200 delattr(self,intituleMenu)
201 for intituleAction in ("actionExecution","actionSaveRun",):
202 if hasattr(self,intituleAction):
203 action=getattr(self,intituleAction)
204 self.toolBar.removeAction(action)
205 if self.code.upper() in Appli.__dict__.keys():
206 listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
210 repAide=os.path.dirname(os.path.abspath(__file__))
211 fileName='index.html'
212 self.docPath=repAide+"/../Aide"
213 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
214 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
215 self.fileDoc=os.path.join(self.docPath,fileName)
216 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
217 if not os.path.isfile(self.fileDoc) :
220 self.actionCode.setEnabled(False)
223 self.actionCode.setEnabled(True)
224 self.menuAide.addAction(self.actionCode)
230 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
231 sys.path.insert(0,dirCode)
233 self.definitCode(code,ssCode)
243 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
244 sys.path.insert(0,dirCode)
246 self.definitCode(code,ssCode)
252 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
253 self.actionN1 = QAction(self)
254 self.actionN1.setText(tr("Process Output"))
255 self.menuN1.addAction(self.actionN1)
256 if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
257 else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
261 if hasattr(self,'actionOpenProcess'):return
263 self.actionOpenProcess = QAction(self)
264 self.actionOpenProcess.setText(tr("Open Process_Output File"))
265 self.menuN1.addAction(self.actionOpenProcess)
266 if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
267 else : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
269 def ajoutExecution(self):
270 self.menuExecution = self.menubar.addMenu(tr("&Run"))
271 self.actionExecution = QAction(self)
272 if sys.platform[0:5]=="linux":
273 icon6 = QIcon(self.repIcon+"/roue.png")
274 self.actionExecution.setIcon(icon6)
276 self.actionExecution.setText(tr("Run"))
277 self.actionExecution.setObjectName("actionExecution")
278 self.menuExecution.addAction(self.actionExecution)
279 if not(self.actionExecution in self.toolBar.actions()):
280 self.toolBar.addAction(self.actionExecution)
281 self.actionExecution.setText(tr("Run"))
282 if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
283 else : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
285 def ajoutSauveExecution(self):
286 self.actionSaveRun = QAction(self)
287 icon7 = QIcon(self.repIcon+"/export_MAP.png")
288 self.actionSaveRun.setIcon(icon7)
289 self.actionSaveRun.setObjectName("actionSaveRun")
290 self.menuExecution.addAction(self.actionSaveRun)
291 if not(self.actionSaveRun in self.toolBar.actions()):
292 self.toolBar.addAction(self.actionSaveRun)
293 self.actionSaveRun.setText(tr("Save Run"))
294 if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
295 else : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
297 def griserActionsStructures(self):
298 self.actionCouper.setEnabled(False)
299 self.actionColler.setEnabled(False)
300 self.actionCopier.setEnabled(False)
301 self.actionSupprimer.setEnabled(False)
303 def enleverActionsStructures(self):
304 self.toolBar.removeAction(self.actionCopier)
305 self.toolBar.removeAction(self.actionColler)
306 self.toolBar.removeAction(self.actionCouper)
307 self.menuEdition.removeAction(self.actionCouper)
308 self.menuEdition.removeAction(self.actionCopier)
309 self.menuEdition.removeAction(self.actionColler)
312 def enleverParametres(self):
313 self.toolBar.removeAction(self.actionParametres)
314 self.menuJdC.removeAction(self.actionParametres)
317 def enleverNewInclude(self):
318 self.actionNouvel_Include.setVisible(False)
320 def enleverRechercherDsCatalogue(self):
321 self.actionRechercherDsCatalogue.setVisible(False)
323 def connectRechercherDsCatalogue(self):
325 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
327 self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
329 def ajoutSortieLegere(self):
330 if hasattr(self,'actionSortieLegere') : return
331 self.actionSortieLegere = QAction(self)
332 self.actionSortieLegere.setText(tr("Sortie Legere"))
333 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
335 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
337 self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
341 self.enleverNewInclude()
342 self.toolBar.addSeparator()
343 self.ajoutExecution()
345 self.menuOptions = self.menubar.addMenu("menuOptions")
346 self.menuOptions.addAction(self.actionParametres_Eficas)
347 self.menuOptions.setTitle(tr("Options"))
350 self.enleverActionsStructures()
351 self.enleverNewInclude()
354 self.menuTraduction = self.menubar.addMenu("menuTraduction")
355 self.menuTraduction.addAction(self.actionTraduitV11V12)
356 self.menuTraduction.addAction(self.actionTraduitV10V11)
357 self.menuTraduction.addAction(self.actionTraduitV9V10)
358 self.menuTraduction.setTitle(tr("Traduction"))
360 self.menuFichier.addAction(self.actionSauveLigne)
362 self.menuOptions = self.menubar.addMenu("menuOptions")
363 self.menuOptions.addAction(self.actionParametres_Eficas)
364 self.menuOptions.addAction(self.actionLecteur_Pdf)
365 self.menuOptions.setTitle(tr("Options"))
368 #if self.salome == 0 : return
369 self.enleverNewInclude()
370 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
371 self.menuMesh.setObjectName("Mesh")
372 self.menuMesh.addAction(self.actionChercheGrpMaille)
373 #self.griserActionsStructures()
376 self.enleverNewInclude()
377 self.enleverRechercherDsCatalogue()
378 self.ajoutExecution()
379 self.ajoutSauveExecution()
380 self.griserActionsStructures()
383 self.enleverNewInclude()
384 self.toolBar.addSeparator()
385 self.ajoutExecution()
386 self.ajoutSauveExecution()
387 self.menuOptions = self.menubar.addMenu("menuOptions")
388 self.menuOptions.addAction(self.actionParametres_Eficas)
389 self.menuOptions.setTitle(tr("Options"))
395 self.action_Nouveau.triggered.disconnect(self.fileNew)
396 self.action_Nouveau.triggered.connect(self.newPSEN)
399 self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
400 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
401 self.enleverActionsStructures()
402 self.enleverParametres()
403 self.enleverRechercherDsCatalogue()
404 self.enleverNewInclude()
405 self.ajoutExecution()
411 self.enleverActionsStructures()
412 self.enleverParametres()
413 self.enleverRechercherDsCatalogue()
414 self.enleverNewInclude()
415 self.ajoutExecution()
419 self.enleverActionsStructures()
420 self.enleverNewInclude()
421 self.connectRechercherDsCatalogue()
422 self.ajoutSortieLegere()
424 def ajoutHelpPSEN(self):
425 self.actionParametres_Eficas.setText('Help PSEN')
426 if monEnvQT5 : self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
427 else : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
431 def ChercheGrpMesh(self):
432 Msg,listeGroup=self.ChercheGrpMeshInSalome()
434 self.viewmanager.handleAjoutGroup(listeGroup)
436 print "il faut gerer les erreurs"
438 def ChercheGrpMaille(self):
439 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
441 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salomé
442 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salomé si ligne précédente commentée
444 raise ValueError('Salome non ouvert')
446 self.viewmanager.handleAjoutGroup(listeGroup)
448 print "il faut gerer les erreurs"
451 def ChercheGrp(self):
452 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
454 # self.viewmanager.handleAjoutGroup(listeGroup)
456 #print "il faut gerer "
460 def ajoutIcones(self) :
461 # Pour pallier les soucis de repertoire d icone
463 icon = QIcon(self.repIcon+"/new_file.png")
464 self.action_Nouveau.setIcon(icon)
465 icon1 = QIcon(self.repIcon+"/ouvrir.png")
466 self.actionOuvrir.setIcon(icon1)
467 icon2 = QIcon(self.repIcon+"/save.png")
468 self.actionEnregistrer.setIcon(icon2)
469 icon6 = QIcon(self.repIcon+"/delete.png")
470 self.actionSupprimer.setIcon(icon6)
471 icon7 = QIcon(self.repIcon+"/roue.png")
472 self.actionExecution.setIcon(icon7)
477 def connecterSignauxQT4(self) :
478 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
480 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
481 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
482 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
483 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
484 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
485 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
486 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
487 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
489 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
490 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
491 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
493 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
494 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
495 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
496 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
497 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
498 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
500 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
501 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
502 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
503 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
508 self.actionTraduitV9V10 = QAction(self)
509 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
510 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
511 self.actionTraduitV10V11 = QAction(self)
512 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
513 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
514 self.actionTraduitV11V12 = QAction(self)
515 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
516 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
517 self.actionSauveLigne = QAction(self)
518 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
520 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
521 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
522 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
523 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
524 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
525 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
529 self.actionChercheGrpMaille = QAction(self)
530 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
531 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
534 self.actionChercheGrp = QAction(self)
535 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
536 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
539 self.actionCode = QAction(self)
540 self.actionCode.setText(tr("Specificites Maille"))
541 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
543 def connecterSignaux(self) :
545 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
546 self.action_Nouveau.triggered.connect(self.fileNew)
547 self.actionNouvel_Include.triggered.connect(self.NewInclude)
548 self.actionOuvrir.triggered.connect(self.fileOpen)
549 self.actionEnregistrer.triggered.connect(self.fileSave)
550 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
551 self.actionFermer.triggered.connect(self.fileClose)
552 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
553 self.actionQuitter.triggered.connect(self.fileExit)
555 self.actionEficas.triggered.connect(self.aidePPal)
556 self.actionVersion.triggered.connect(self.version)
557 self.actionParametres.triggered.connect(self.gestionParam)
559 self.actionCouper.triggered.connect(self.editCut)
560 self.actionCopier.triggered.connect(self.editCopy)
561 self.actionColler.triggered.connect(self.editPaste)
562 self.actionSupprimer.triggered.connect(self.supprimer)
563 self.actionRechercher.triggered.connect(self.rechercher)
564 self.actionDeplier_replier.triggered.connect(self.Deplier)
566 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
567 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
568 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
569 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
573 self.actionTraduitV9V10 = QAction(self)
574 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
575 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
576 self.actionTraduitV10V11 = QAction(self)
577 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
578 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
579 self.actionTraduitV11V12 = QAction(self)
580 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
581 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
582 self.actionSauveLigne = QAction(self)
583 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
585 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
586 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
587 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
588 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
589 self.actionSauveLigne.triggered.connect(self.sauveLigne)
592 self.actionChercheGrpMaille = QAction(self)
593 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
596 self.actionChercheGrp = QAction(self)
597 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
598 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
601 self.actionCode = QAction(self)
602 self.actionCode.setText(tr("Specificites Maille"))
603 self.actionCode.triggered.connect(self.aideCode)
607 self.viewmanager.handleDeplier()
609 def ouvreFichiers(self) :
610 # Ouverture des fichiers de commandes donnes sur la ligne de commande
613 for study in session.d_env.studies:
615 d=session.get_unit(study,self)
616 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
619 def get_source(self,file):
620 # appele par Editeur/session.py
622 p=convert.plugins['python']()
624 texte=p.convert('execnoparseur')
627 def initPatrons(self) :
628 # Mise a jour du menu des fichiers recemment ouverts
629 from Editeur import listePatrons
630 if not(self.code in listePatrons.sous_menus.keys()) :
631 if hasattr(self,"menuPatrons"):
632 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
633 self.menuPatrons.close()
634 delattr(self,"menuPatrons")
636 if (not hasattr(self,"menuPatrons")):
637 self.menuPatrons = QMenu(self.menubar)
638 self.menuPatrons.setObjectName("menuPatrons")
639 self.menubar.addAction(self.menuPatrons.menuAction())
640 self.menuPatrons.setTitle(tr("Patrons"))
642 self.menuPatrons.clear()
643 self.listePatrons = listePatrons.listePatrons(self.code)
645 for nomSsMenu in self.listePatrons.liste.keys():
646 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
647 for fichier in self.listePatrons.liste[nomSsMenu]:
648 id = ssmenu.addAction(fichier)
649 self.ficPatrons[id]=fichier
650 if monEnvQT5 : self.id.triggered.connect(self.handleOpenPatrons)
651 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
652 # self.Patrons.setItemParameter(id,idx)
655 def initRecents(self):
656 if monEnvQT5 : self.recent = []
657 else : self.recent = QStringList()
659 if sys.platform[0:5]=="linux" :
660 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
662 rep=os.path.join('C:/','.config/Eficas',self.code)
663 monFichier=rep+"/listefichiers_"+self.code
669 l=(ligne.split("\n"))[0]
670 self.recent.append(l)
678 def addToRecentList(self, fn):
679 if not monEnvQT5 : self.addToRecentListQT4(fn); return
680 while fn in self.recent: self.recent.remove(fn)
681 self.recent.insert(0,fn)
682 if len(self.recent) > 9:
683 self.recent = self.recent[:9]
686 def addToRecentListQT4(self, fn):
688 Public slot to add a filename to the list of recently opened files.
690 @param fn name of the file to be added
692 self.recent.removeAll(fn)
693 self.recent.prepend(fn)
694 if len(self.recent) > 9:
695 self.recent = self.recent[:9]
699 def sauveRecents(self) :
701 rep=self.CONFIGURATION.rep_user
702 monFichier=rep+"/listefichiers_"+self.code
706 f=open(monFichier,'w')
707 if len(self.recent) == 0 : return
709 while ( index < len(self.recent)):
710 ligne=str(self.recent[index])+"\n"
722 def traductionV11V12(self):
723 from gereTraduction import traduction
724 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
726 def traductionV10V11(self):
727 from gereTraduction import traduction
728 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
730 def traductionV9V10(self):
731 from gereTraduction import traduction
732 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
735 from monVisu import DVisu
736 titre = tr("version ")
737 monVisuDialg=DVisu(parent=self,fl=0)
738 monVisuDialg.setWindowTitle(titre)
739 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
740 monVisuDialg.adjustSize()
744 repAide=os.path.dirname(os.path.abspath(__file__))
745 maD=os.path.join( repAide,'..','Doc','html')
747 indexAide=os.path.join(maD,'index.html')
748 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
749 else : cmd="start "+indexAide
752 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
755 repAide=os.path.dirname(os.path.abspath(__file__))
756 maD=os.path.join( repAide,'..','Doc','html')
758 indexAide=os.path.join(maD,'index.html')
759 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
760 else : cmd="start "+indexAide
763 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
766 if self.code==None : return
769 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
770 else : cmd="start "+self.fileDoc
774 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
777 def optionEditeur(self) :
779 name='monOptions_'+self.code
781 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
785 optionCode=__import__(name)
788 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
790 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
793 def optionPdf(self) :
794 from monOptionsPdf import OptionPdf
795 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
798 def handleSortieLegere(self):
799 return self.viewmanager.saveLegerCurrentEditor()
801 def handleShowRecentMenu(self):
803 Private method to set up recent files menu.
805 self.recentMenu.clear()
807 for rp in self.recent:
808 id = self.recentMenu.addAction(rp)
809 self.ficRecents[id]=rp
810 if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
811 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
812 self.recentMenu.addSeparator()
813 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
815 def handleOpenPatrons(self):
817 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
818 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
820 def handleOpenRecent(self):
822 fichier=self.ficRecents[idx]
823 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
825 def handleClearRecent(self):
826 self.recent = QStringList()
829 def handleRechercherDsCatalogue(self):
830 if not self.viewmanager : return
831 self.viewmanager.handleRechercherDsCatalogue()
835 self.viewmanager.newEditor()
836 except EficasException, exc:
838 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
840 def openProcess(self):
844 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
845 sys.path.insert(0,dirCode)
847 self.definitCode(code,ssCode)
856 self.viewmanager.handleOpen()
857 except EficasException, exc:
860 QMessageBox.warning(self, tr(u"Erreur"), msg)
862 def sauveLigne(self):
863 return self.viewmanager.sauveLigneCurrentEditor()
866 return self.viewmanager.saveCurrentEditor()
868 def fileSaveAs(self):
869 return self.viewmanager.saveAsCurrentEditor()
872 self.viewmanager.handleClose(texte='&Fermer')
874 def fileCloseAll(self):
875 self.viewmanager.handleCloseAll(texte='&Fermer')
878 # On peut sortir sur Abort
879 res=self.viewmanager.handleCloseAll()
885 self.viewmanager.handleEditCopy()
888 self.viewmanager.handleEditCut()
891 self.viewmanager.handleEditPaste()
893 def rechercher(self):
894 self.viewmanager.handleRechercher()
897 self.viewmanager.run()
900 self.viewmanager.saveRun()
904 self.viewmanager.handleSupprimer()
906 def jdcFichierSource(self):
907 self.viewmanager.handleViewJdcFichierSource()
909 def jdcRapport(self):
910 self.viewmanager.handleViewJdcRapport()
913 self.viewmanager.handleViewJdcRegles()
915 def gestionParam(self):
916 self.viewmanager.handlegestionParam()
919 self.viewmanager.handleViewJdcPy()
922 def NewInclude(self):
923 self.viewmanager.newIncludeEditor()
926 for pathCode in self.ListePathCode:
928 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
929 sys.path.remove(aEnlever)
932 for pathCode in self.listeAEnlever:
934 sys.path.remove(aEnlever)
939 def closeEvent(self,event):
941 if res==2 : event.ignore()
944 if __name__=='__main__':
947 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
949 from Aster import prefsCode
950 if hasattr(prefsCode,'encoding'):
951 # Hack pour changer le codage par defaut des strings
954 sys.setdefaultencoding(prefsCode.encoding)
955 del sys.setdefaultencoding
958 from Editeur import import_code
959 from Editeur import session
961 # Analyse des arguments de la ligne de commande
962 options=session.parse(sys.argv)
966 app = QApplication(sys.argv)
967 #app.setMainWidget(mw) (qt3)