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 self.suiteTelemac=self.CONFIGURATION.suiteTelemac
105 from Extensions import localisation
107 localisation.localise(None,self.langue)
110 #if parent != None : self.parentCentralWidget = parent.centralWidget()
111 #else : self.parentCentralWidget = None
113 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
114 else : self.taille=1700
116 if self.code in ['MAP',] : self.resize(1440,self.height())
117 else : self.resize(self.taille,self.height())
119 icon = QIcon(self.repIcon+"/parametres.png")
120 self.actionParametres.setIcon(icon)
123 self.myQtab.removeTab(0)
124 self.blEntete= QBoxLayout(0,self.frameEntete)
125 self.blEntete.insertWidget(0,self.toolBar)
126 self.blEntete.insertWidget(0,self.menubar)
128 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
130 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
133 self.viewmanager = MyTabview(self)
134 self.recentMenu=QMenu(tr('&Recents'))
135 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
136 # actionARemplacer ne sert que pour l insert Menu
137 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
138 self.menuFichier.removeAction(self.actionARemplacer)
139 if monEnvQT5 : self.connecterSignaux()
140 else : self.connecterSignauxQT4()
141 self.toolBar.addSeparator()
142 if self.code != None : self.construitMenu()
144 self.setWindowTitle(self.VERSION_EFICAS)
148 #except EficasException, exc:
150 # print "je suis dans le except"
151 #if self.salome == 0 : exit()
155 def closeEntete(self):
156 self.menuBar().close()
158 self.frameEntete.close()
160 def definitCode(self,code,ssCode) :
165 from monChoixCode import MonChoixCode
166 widgetChoix = MonChoixCode(self)
167 ret=widgetChoix.exec_()
169 if self.code == None:return # pour le cancel de la fenetre choix code
170 name='prefs_'+self.code
171 prefsCode=__import__(name)
173 self.repIni=prefsCode.repIni
175 self.format_fichier= ssCode #par defaut
176 prefsCode.NAME_SCHEME=ssCode
178 self.format_fichier="python" #par defaut
180 nameConf='configuration_'+self.code
181 configuration=__import__(nameConf)
182 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
183 self.CONFIGStyle = None
184 if hasattr(configuration,'make_config_style'):
185 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
186 #PN --> pb d exception qui font planter salome
187 # plus supporte en python 3
188 #if hasattr(prefsCode,'encoding'):
191 # sys.setdefaultencoding(prefsCode.encoding)
193 def construitMenu(self):
197 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
198 if hasattr(self,intituleMenu):
199 menu=getattr(self,intituleMenu)
200 menu.setAttribute(Qt.WA_DeleteOnClose)
202 delattr(self,intituleMenu)
203 for intituleAction in ("actionExecution","actionSaveRun",):
204 if hasattr(self,intituleAction):
205 action=getattr(self,intituleAction)
206 self.toolBar.removeAction(action)
207 if self.code.upper() in Appli.__dict__.keys():
208 listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
209 if self.suiteTelemac : self.lookSuiteTelemac()
213 repAide=os.path.dirname(os.path.abspath(__file__))
214 fileName='index.html'
215 self.docPath=repAide+"/../Aide"
216 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
217 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
218 self.fileDoc=os.path.join(self.docPath,fileName)
219 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
220 if not os.path.isfile(self.fileDoc) :
223 self.actionCode.setEnabled(False)
226 self.actionCode.setEnabled(True)
227 self.menuAide.addAction(self.actionCode)
233 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
234 sys.path.insert(0,dirCode)
236 self.definitCode(code,ssCode)
246 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
247 sys.path.insert(0,dirCode)
249 self.definitCode(code,ssCode)
255 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
256 self.actionN1 = QAction(self)
257 self.actionN1.setText(tr("Process Output"))
258 self.menuN1.addAction(self.actionN1)
259 if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
260 else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
264 if hasattr(self,'actionOpenProcess'):return
266 self.actionOpenProcess = QAction(self)
267 self.actionOpenProcess.setText(tr("Open Process_Output File"))
268 self.menuN1.addAction(self.actionOpenProcess)
269 if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
270 else : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
272 def ajoutExecution(self):
273 self.menuExecution = self.menubar.addMenu(tr("&Run"))
274 self.actionExecution = QAction(self)
275 if sys.platform[0:5]=="linux":
276 icon6 = QIcon(self.repIcon+"/roue.png")
277 self.actionExecution.setIcon(icon6)
279 self.actionExecution.setText(tr("Run"))
280 self.actionExecution.setObjectName("actionExecution")
281 self.menuExecution.addAction(self.actionExecution)
282 if not(self.actionExecution in self.toolBar.actions()):
283 self.toolBar.addAction(self.actionExecution)
284 self.actionExecution.setText(tr("Run"))
285 if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
286 else : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
288 def ajoutSauveExecution(self):
289 self.actionSaveRun = QAction(self)
290 icon7 = QIcon(self.repIcon+"/export_MAP.png")
291 self.actionSaveRun.setIcon(icon7)
292 self.actionSaveRun.setObjectName("actionSaveRun")
293 self.menuExecution.addAction(self.actionSaveRun)
294 if not(self.actionSaveRun in self.toolBar.actions()):
295 self.toolBar.addAction(self.actionSaveRun)
296 self.actionSaveRun.setText(tr("Save Run"))
297 if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
298 else : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
300 def griserActionsStructures(self):
301 self.actionCouper.setEnabled(False)
302 self.actionColler.setEnabled(False)
303 self.actionCopier.setEnabled(False)
304 self.actionSupprimer.setEnabled(False)
306 def enleverActionsStructures(self):
307 self.toolBar.removeAction(self.actionCopier)
308 self.toolBar.removeAction(self.actionColler)
309 self.toolBar.removeAction(self.actionCouper)
310 self.menuEdition.removeAction(self.actionCouper)
311 self.menuEdition.removeAction(self.actionCopier)
312 self.menuEdition.removeAction(self.actionColler)
315 def enleverParametres(self):
316 self.toolBar.removeAction(self.actionParametres)
317 self.menuJdC.removeAction(self.actionParametres)
319 def enleverSupprimer(self):
320 self.toolBar.removeAction(self.actionSupprimer)
322 def enleverNewInclude(self):
323 self.actionNouvel_Include.setVisible(False)
325 def enleverRechercherDsCatalogue(self):
326 self.actionRechercherDsCatalogue.setVisible(False)
328 def connectRechercherDsCatalogue(self):
330 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
332 self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
334 def ajoutSortieLegere(self):
335 if hasattr(self,'actionSortieLegere') : return
336 self.actionSortieLegere = QAction(self)
337 self.actionSortieLegere.setText(tr("Sortie Legere"))
338 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
340 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
342 self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
346 self.enleverNewInclude()
347 self.toolBar.addSeparator()
348 self.ajoutExecution()
350 self.menuOptions = self.menubar.addMenu("menuOptions")
351 self.menuOptions.addAction(self.actionParametres_Eficas)
352 self.menuOptions.setTitle(tr("Options"))
355 self.enleverActionsStructures()
356 self.enleverNewInclude()
359 self.menuTraduction = self.menubar.addMenu("menuTraduction")
360 self.menuTraduction.addAction(self.actionTraduitV11V12)
361 self.menuTraduction.addAction(self.actionTraduitV10V11)
362 self.menuTraduction.addAction(self.actionTraduitV9V10)
363 self.menuTraduction.setTitle(tr("Traduction"))
365 self.menuFichier.addAction(self.actionSauveLigne)
367 self.menuOptions = self.menubar.addMenu("menuOptions")
368 self.menuOptions.addAction(self.actionParametres_Eficas)
369 self.menuOptions.addAction(self.actionLecteur_Pdf)
370 self.menuOptions.setTitle(tr("Options"))
373 #if self.salome == 0 : return
374 self.enleverNewInclude()
375 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
376 self.menuMesh.setObjectName("Mesh")
377 self.menuMesh.addAction(self.actionChercheGrpMaille)
378 #self.griserActionsStructures()
381 self.enleverNewInclude()
382 self.enleverRechercherDsCatalogue()
383 self.ajoutExecution()
384 self.ajoutSauveExecution()
385 self.griserActionsStructures()
388 self.enleverNewInclude()
389 self.toolBar.addSeparator()
390 self.ajoutExecution()
391 self.ajoutSauveExecution()
392 self.menuOptions = self.menubar.addMenu("menuOptions")
393 self.menuOptions.addAction(self.actionParametres_Eficas)
394 self.menuOptions.setTitle(tr("Options"))
400 self.action_Nouveau.triggered.disconnect(self.fileNew)
401 self.action_Nouveau.triggered.connect(self.newPSEN)
404 self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
405 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
406 self.enleverActionsStructures()
407 self.enleverParametres()
408 self.enleverRechercherDsCatalogue()
409 self.enleverNewInclude()
410 self.ajoutExecution()
416 self.enleverActionsStructures()
417 self.enleverParametres()
418 self.enleverRechercherDsCatalogue()
419 self.enleverNewInclude()
420 self.ajoutExecution()
424 self.enleverActionsStructures()
425 self.enleverNewInclude()
426 self.connectRechercherDsCatalogue()
427 self.ajoutSortieLegere()
429 def lookSuiteTelemac(self):
430 self.enleverActionsStructures()
431 self.enleverNewInclude()
432 self.enleverParametres()
433 self.enleverSupprimer()
434 self.enleverRechercherDsCatalogue()
436 def ajoutHelpPSEN(self):
437 self.actionParametres_Eficas.setText('Help PSEN')
438 if monEnvQT5 : self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
439 else : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),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 Salomé
454 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salomé si ligne précédente commentée
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)
520 self.actionTraduitV9V10 = QAction(self)
521 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
522 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
523 self.actionTraduitV10V11 = QAction(self)
524 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
525 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
526 self.actionTraduitV11V12 = QAction(self)
527 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
528 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
529 self.actionSauveLigne = QAction(self)
530 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
532 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
533 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
534 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
535 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
536 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
537 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
541 self.actionChercheGrpMaille = QAction(self)
542 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
543 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
546 self.actionChercheGrp = QAction(self)
547 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
548 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
551 self.actionCode = QAction(self)
552 self.actionCode.setText(tr("Specificites Maille"))
553 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
555 def connecterSignaux(self) :
557 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
558 self.action_Nouveau.triggered.connect(self.fileNew)
559 self.actionNouvel_Include.triggered.connect(self.NewInclude)
560 self.actionOuvrir.triggered.connect(self.fileOpen)
561 self.actionEnregistrer.triggered.connect(self.fileSave)
562 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
563 self.actionFermer.triggered.connect(self.fileClose)
564 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
565 self.actionQuitter.triggered.connect(self.fileExit)
567 self.actionEficas.triggered.connect(self.aidePPal)
568 self.actionVersion.triggered.connect(self.version)
569 self.actionParametres.triggered.connect(self.gestionParam)
571 self.actionCouper.triggered.connect(self.editCut)
572 self.actionCopier.triggered.connect(self.editCopy)
573 self.actionColler.triggered.connect(self.editPaste)
574 self.actionSupprimer.triggered.connect(self.supprimer)
575 self.actionRechercher.triggered.connect(self.rechercher)
576 self.actionDeplier_replier.triggered.connect(self.Deplier)
578 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
579 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
580 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
581 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
585 self.actionTraduitV9V10 = QAction(self)
586 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
587 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
588 self.actionTraduitV10V11 = QAction(self)
589 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
590 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
591 self.actionTraduitV11V12 = QAction(self)
592 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
593 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
594 self.actionSauveLigne = QAction(self)
595 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
597 #self.actionParametres_Eficas.triggered.connect(self.optionEditeur)
598 self.actionTraduitV9V10.triggered.connect(self.traductionV9V10)
599 self.actionTraduitV10V11.triggered.connect(self.traductionV10V11)
600 self.actionTraduitV11V12.triggered.connect(self.traductionV11V12)
601 self.actionSauveLigne.triggered.connect(self.sauveLigne)
604 self.actionChercheGrpMaille = QAction(self)
605 self.actionChercheGrpMaille.setText(tr("Acquiert Groupe Maille"))
608 self.actionChercheGrp = QAction(self)
609 self.actionChercheGrp.setText(tr("Accquisition Groupe Maille"))
610 self.actionChercheGrp.triggered.connect(self.ChercheGrp)
613 self.actionCode = QAction(self)
614 self.actionCode.setText(tr("Specificites Maille"))
615 self.actionCode.triggered.connect(self.aideCode)
619 self.viewmanager.handleDeplier()
621 def ouvreFichiers(self) :
622 # Ouverture des fichiers de commandes donnes sur la ligne de commande
625 for study in session.d_env.studies:
627 d=session.get_unit(study,self)
628 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
631 def get_source(self,file):
632 # appele par Editeur/session.py
634 p=convert.plugins['python']()
636 texte=p.convert('execnoparseur')
639 def initPatrons(self) :
640 # Mise a jour du menu des fichiers recemment ouverts
641 from Editeur import listePatrons
642 if not(self.code in listePatrons.sous_menus.keys()) :
643 if hasattr(self,"menuPatrons"):
644 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
645 self.menuPatrons.close()
646 delattr(self,"menuPatrons")
648 if (not hasattr(self,"menuPatrons")):
649 self.menuPatrons = QMenu(self.menubar)
650 self.menuPatrons.setObjectName("menuPatrons")
651 self.menubar.addAction(self.menuPatrons.menuAction())
652 self.menuPatrons.setTitle(tr("Patrons"))
654 self.menuPatrons.clear()
655 self.listePatrons = listePatrons.listePatrons(self.code)
657 for nomSsMenu in self.listePatrons.liste.keys():
658 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
659 for fichier in self.listePatrons.liste[nomSsMenu]:
660 id = ssmenu.addAction(fichier)
661 self.ficPatrons[id]=fichier
662 if monEnvQT5 : self.id.triggered.connect(self.handleOpenPatrons)
663 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
664 # self.Patrons.setItemParameter(id,idx)
667 def initRecents(self):
668 if monEnvQT5 : self.recent = []
669 else : self.recent = QStringList()
671 if sys.platform[0:5]=="linux" :
672 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
674 rep=os.path.join('C:/','.config/Eficas',self.code)
675 monFichier=rep+"/listefichiers_"+self.code
681 l=(ligne.split("\n"))[0]
682 self.recent.append(l)
690 def addToRecentList(self, fn):
691 if not monEnvQT5 : self.addToRecentListQT4(fn); return
692 while fn in self.recent: self.recent.remove(fn)
693 self.recent.insert(0,fn)
694 if len(self.recent) > 9:
695 self.recent = self.recent[:9]
698 def addToRecentListQT4(self, fn):
700 Public slot to add a filename to the list of recently opened files.
702 @param fn name of the file to be added
704 self.recent.removeAll(fn)
705 self.recent.prepend(fn)
706 if len(self.recent) > 9:
707 self.recent = self.recent[:9]
711 def sauveRecents(self) :
713 rep=self.CONFIGURATION.rep_user
714 monFichier=rep+"/listefichiers_"+self.code
718 f=open(monFichier,'w')
719 if len(self.recent) == 0 : return
721 while ( index < len(self.recent)):
722 ligne=str(self.recent[index])+"\n"
734 def traductionV11V12(self):
735 from gereTraduction import traduction
736 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V11V12")
738 def traductionV10V11(self):
739 from gereTraduction import traduction
740 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V10V11")
742 def traductionV9V10(self):
743 from gereTraduction import traduction
744 traduction(self.CONFIGURATION.repIni,self.viewmanager,"V9V10")
747 from monVisu import DVisu
748 titre = tr("version ")
749 monVisuDialg=DVisu(parent=self,fl=0)
750 monVisuDialg.setWindowTitle(titre)
751 monVisuDialg.TB.setText(self.VERSION_EFICAS +tr(" pour ") + self.code)
752 monVisuDialg.adjustSize()
756 repAide=os.path.dirname(os.path.abspath(__file__))
757 maD=os.path.join( repAide,'..','Doc','html')
759 indexAide=os.path.join(maD,'index.html')
760 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
761 else : cmd="start "+indexAide
764 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
767 repAide=os.path.dirname(os.path.abspath(__file__))
768 maD=os.path.join( repAide,'..','Doc','html')
770 indexAide=os.path.join(maD,'index.html')
771 if sys.platform[0:5]=="linux" : cmd="xdg-open "+indexAide
772 else : cmd="start "+indexAide
775 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
778 if self.code==None : return
781 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.fileDoc
782 else : cmd="start "+self.fileDoc
786 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
789 def optionEditeur(self) :
791 name='monOptions_'+self.code
793 QMessageBox.critical( self,tr( "Parametrage"),tr( "Veuillez d abord choisir un code"))
797 optionCode=__import__(name)
800 QMessageBox.critical( self, tr("Parametrage"), tr("Pas de possibilite de personnalisation de la configuration "))
802 monOption=optionCode.Options(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
805 def optionPdf(self) :
806 from monOptionsPdf import OptionPdf
807 monOption=OptionPdf(parent=self,modal = 0 ,configuration=self.CONFIGURATION)
810 def handleSortieLegere(self):
811 return self.viewmanager.saveLegerCurrentEditor()
813 def handleShowRecentMenu(self):
815 Private method to set up recent files menu.
817 self.recentMenu.clear()
819 for rp in self.recent:
820 id = self.recentMenu.addAction(rp)
821 self.ficRecents[id]=rp
822 if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
823 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
824 self.recentMenu.addSeparator()
825 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
827 def handleOpenPatrons(self):
829 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
830 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
832 def handleOpenRecent(self):
834 fichier=self.ficRecents[idx]
835 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
837 def handleClearRecent(self):
838 self.recent = QStringList()
841 def handleRechercherDsCatalogue(self):
842 if not self.viewmanager : return
843 self.viewmanager.handleRechercherDsCatalogue()
847 self.viewmanager.newEditor()
848 except EficasException, exc:
850 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
852 def openProcess(self):
856 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
857 sys.path.insert(0,dirCode)
859 self.definitCode(code,ssCode)
868 self.viewmanager.handleOpen()
869 except EficasException, exc:
872 QMessageBox.warning(self, tr(u"Erreur"), msg)
874 def sauveLigne(self):
875 return self.viewmanager.sauveLigneCurrentEditor()
878 return self.viewmanager.saveCurrentEditor()
880 def fileSaveAs(self):
881 return self.viewmanager.saveAsCurrentEditor()
884 self.viewmanager.handleClose(texte='&Fermer')
886 def fileCloseAll(self):
887 self.viewmanager.handleCloseAll(texte='&Fermer')
890 # On peut sortir sur Abort
891 res=self.viewmanager.handleCloseAll()
897 self.viewmanager.handleEditCopy()
900 self.viewmanager.handleEditCut()
903 self.viewmanager.handleEditPaste()
905 def rechercher(self):
906 self.viewmanager.handleRechercher()
909 self.viewmanager.run()
912 self.viewmanager.saveRun()
916 self.viewmanager.handleSupprimer()
918 def jdcFichierSource(self):
919 self.viewmanager.handleViewJdcFichierSource()
921 def jdcRapport(self):
922 self.viewmanager.handleViewJdcRapport()
925 self.viewmanager.handleViewJdcRegles()
927 def gestionParam(self):
928 self.viewmanager.handlegestionParam()
931 self.viewmanager.handleViewJdcPy()
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)