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
95 if langue=='fr': self.langue=langue
96 else : self.langue="ang"
98 self.suiteTelemac=False
99 if hasattr (self, 'CONFIGURATION') :
100 if self.CONFIGURATION.force_langue :
101 from monChoixLangue import MonChoixLangue
102 widgetLangue = MonChoixLangue(self)
103 ret=widgetLangue.exec_()
104 self.suiteTelemac=self.CONFIGURATION.suiteTelemac
107 from Extensions import localisation
109 localisation.localise(None,self.langue)
112 #if parent != None : self.parentCentralWidget = parent.centralWidget()
113 #else : self.parentCentralWidget = None
116 if hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'taille') : self.taille=self.CONFIGURATION.taille
117 else : self.taille=1700
119 if self.code in ['MAP',] : self.resize(1440,self.height())
120 else : self.resize(self.taille,self.height())
123 icon = QIcon(self.repIcon+"/parametres.png")
124 self.actionParametres.setIcon(icon)
127 self.myQtab.removeTab(0)
128 self.blEntete= QBoxLayout(0,self.frameEntete)
129 self.blEntete.insertWidget(0,self.toolBar)
130 self.blEntete.insertWidget(0,self.menubar)
132 if hasattr (self, 'CONFIGURATION') and self.CONFIGURATION.closeEntete==True and self.salome: self.closeEntete()
134 eficas_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
137 self.viewmanager = MyTabview(self)
138 self.recentMenu=QMenu(tr('&Recents'))
139 #self.menuFichier.insertMenu(self.actionOuvrir,self.recentMenu)
140 # actionARemplacer ne sert que pour l insert Menu
141 self.menuFichier.insertMenu(self.actionARemplacer ,self.recentMenu)
142 self.menuFichier.removeAction(self.actionARemplacer)
143 if monEnvQT5 : self.connecterSignaux()
144 else : self.connecterSignauxQT4()
145 self.toolBar.addSeparator()
146 if self.code != None : self.construitMenu()
148 self.setWindowTitle(self.VERSION_EFICAS)
152 #except EficasException, exc:
154 # print "je suis dans le except"
155 #if self.salome == 0 : exit()
159 def closeEntete(self):
160 self.menuBar().close()
162 self.frameEntete.close()
164 def definitCode(self,code,ssCode) :
169 from monChoixCode import MonChoixCode
170 widgetChoix = MonChoixCode(self)
171 ret=widgetChoix.exec_()
173 if self.code == None:return # pour le cancel de la fenetre choix code
174 name='prefs_'+self.code
175 prefsCode=__import__(name)
177 self.repIni=prefsCode.repIni
179 self.format_fichier= ssCode #par defaut
180 prefsCode.NAME_SCHEME=ssCode
182 self.format_fichier="python" #par defaut
184 nameConf='configuration_'+self.code
185 configuration=__import__(nameConf)
186 self.CONFIGURATION = configuration.make_config(self,prefsCode.repIni)
187 self.CONFIGStyle = None
188 if hasattr(configuration,'make_config_style'):
189 self.CONFIGStyle = configuration.make_config_style(self,prefsCode.repIni)
190 #PN --> pb d exception qui font planter salome
191 # plus supporte en python 3
192 #if hasattr(prefsCode,'encoding'):
195 # sys.setdefaultencoding(prefsCode.encoding)
197 def construitMenu(self):
201 for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"):
202 if hasattr(self,intituleMenu):
203 menu=getattr(self,intituleMenu)
204 menu.setAttribute(Qt.WA_DeleteOnClose)
206 delattr(self,intituleMenu)
207 for intituleAction in ("actionExecution","actionSaveRun",):
208 if hasattr(self,intituleAction):
209 action=getattr(self,intituleAction)
210 self.toolBar.removeAction(action)
211 if self.code.upper() in Appli.__dict__.keys():
212 listeTexte=apply(Appli.__dict__[self.code.upper()],(self,))
213 if self.suiteTelemac : self.lookSuiteTelemac()
217 repAide=os.path.dirname(os.path.abspath(__file__))
218 fileName='index.html'
219 self.docPath=repAide+"/../Aide"
220 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'docPath') : self.docPath=self.CONFIGURATION.docPath
221 if hasattr(self,'CONFIGURATION') and hasattr(self.CONFIGURATION,'fileName'):fileName=self.CONFIGURATION.fileName
222 self.fileDoc=os.path.join(self.docPath,fileName)
223 self.actionCode.setText(tr("Aide specifique ")+str(self.code))
224 if not os.path.isfile(self.fileDoc) :
227 self.actionCode.setEnabled(False)
230 self.actionCode.setEnabled(True)
231 self.menuAide.addAction(self.actionCode)
237 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
238 sys.path.insert(0,dirCode)
240 self.definitCode(code,ssCode)
250 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code))
251 sys.path.insert(0,dirCode)
253 self.definitCode(code,ssCode)
259 self.menuN1 = self.menubar.addMenu(tr("Process Output"))
260 self.actionN1 = QAction(self)
261 self.actionN1.setText(tr("Process Output"))
262 self.menuN1.addAction(self.actionN1)
263 if monEnvQT5 : self.actionN1.triggered.connect(self.newN1)
264 else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1)
268 if hasattr(self,'actionOpenProcess'):return
270 self.actionOpenProcess = QAction(self)
271 self.actionOpenProcess.setText(tr("Open Process_Output File"))
272 self.menuN1.addAction(self.actionOpenProcess)
273 if monEnvQT5 : self.actionOpenProcess.triggered.connect(self.openProcess)
274 else : self.connect(self.actionOpenProcess,SIGNAL("triggered()"),self.openProcess)
276 def ajoutExecution(self):
277 self.menuExecution = self.menubar.addMenu(tr("&Run"))
278 self.actionExecution = QAction(self)
279 if sys.platform[0:5]=="linux":
280 icon6 = QIcon(self.repIcon+"/roue.png")
281 self.actionExecution.setIcon(icon6)
283 self.actionExecution.setText(tr("Run"))
284 self.actionExecution.setObjectName("actionExecution")
285 self.menuExecution.addAction(self.actionExecution)
286 if not(self.actionExecution in self.toolBar.actions()):
287 self.toolBar.addAction(self.actionExecution)
288 self.actionExecution.setText(tr("Run"))
289 if monEnvQT5 : self.actionExecution.triggered.connect(self.run)
290 else : self.connect(self.actionExecution,SIGNAL("triggered()"),self.run)
292 def ajoutSauveExecution(self):
293 self.actionSaveRun = QAction(self)
294 icon7 = QIcon(self.repIcon+"/export_MAP.png")
295 self.actionSaveRun.setIcon(icon7)
296 self.actionSaveRun.setObjectName("actionSaveRun")
297 self.menuExecution.addAction(self.actionSaveRun)
298 if not(self.actionSaveRun in self.toolBar.actions()):
299 self.toolBar.addAction(self.actionSaveRun)
300 self.actionSaveRun.setText(tr("Save Run"))
301 if monEnvQT5 : self.actionSaveRun.triggered.connect(self.saveRun)
302 else : self.connect(self.actionSaveRun,SIGNAL("triggered()"),self.saveRun)
304 def griserActionsStructures(self):
305 self.actionCouper.setEnabled(False)
306 self.actionColler.setEnabled(False)
307 self.actionCopier.setEnabled(False)
308 self.actionSupprimer.setEnabled(False)
310 def enleverActionsStructures(self):
311 self.toolBar.removeAction(self.actionCopier)
312 self.toolBar.removeAction(self.actionColler)
313 self.toolBar.removeAction(self.actionCouper)
314 self.menuEdition.removeAction(self.actionCouper)
315 self.menuEdition.removeAction(self.actionCopier)
316 self.menuEdition.removeAction(self.actionColler)
319 def enleverParametres(self):
320 self.toolBar.removeAction(self.actionParametres)
321 self.menuJdC.removeAction(self.actionParametres)
323 def enleverSupprimer(self):
324 self.toolBar.removeAction(self.actionSupprimer)
326 def enleverNewInclude(self):
327 self.actionNouvel_Include.setVisible(False)
329 def enleverRechercherDsCatalogue(self):
330 self.actionRechercherDsCatalogue.setVisible(False)
332 def connectRechercherDsCatalogue(self):
334 self.actionRechercherDsCatalogue.triggered.connect(self.handleRechercherDsCatalogue)
336 self.connect(self.actionRechercherDsCatalogue,SIGNAL("triggered()"),self.handleRechercherDsCatalogue)
338 def ajoutSortieLegere(self):
339 if hasattr(self,'actionSortieLegere') : return
340 self.actionSortieLegere = QAction(self)
341 self.actionSortieLegere.setText(tr("Sortie Legere"))
342 self.menuFichier.insertAction(self.actionEnregistrer_sous,self.actionSortieLegere)
344 self.actionSortieLegere.triggered.connect(self.handleSortieLegere)
346 self.connect(self.actionSortieLegere,SIGNAL("triggered()"),self.handleSortieLegere)
350 self.enleverNewInclude()
351 self.toolBar.addSeparator()
352 self.ajoutExecution()
354 self.menuOptions = self.menubar.addMenu("menuOptions")
355 self.menuOptions.addAction(self.actionParametres_Eficas)
356 self.menuOptions.setTitle(tr("Options"))
359 self.enleverActionsStructures()
360 self.enleverNewInclude()
363 self.menuTraduction = self.menubar.addMenu("menuTraduction")
364 self.menuTraduction.addAction(self.actionTraduitV11V12)
365 self.menuTraduction.addAction(self.actionTraduitV10V11)
366 self.menuTraduction.addAction(self.actionTraduitV9V10)
367 self.menuTraduction.setTitle(tr("Traduction"))
369 self.menuFichier.addAction(self.actionSauveLigne)
371 self.menuOptions = self.menubar.addMenu("menuOptions")
372 self.menuOptions.addAction(self.actionParametres_Eficas)
373 self.menuOptions.addAction(self.actionLecteur_Pdf)
374 self.menuOptions.setTitle(tr("Options"))
377 #if self.salome == 0 : return
378 self.enleverNewInclude()
379 self.menuMesh = self.menubar.addMenu(tr("Gestion Maillage"))
380 self.menuMesh.setObjectName("Mesh")
381 self.menuMesh.addAction(self.actionChercheGrpMaille)
382 #self.griserActionsStructures()
385 self.enleverNewInclude()
386 self.enleverRechercherDsCatalogue()
387 self.ajoutExecution()
388 self.ajoutSauveExecution()
389 self.griserActionsStructures()
392 self.enleverNewInclude()
393 self.toolBar.addSeparator()
394 self.ajoutExecution()
395 self.ajoutSauveExecution()
396 self.menuOptions = self.menubar.addMenu("menuOptions")
397 self.menuOptions.addAction(self.actionParametres_Eficas)
398 self.menuOptions.setTitle(tr("Options"))
404 self.action_Nouveau.triggered.disconnect(self.fileNew)
405 self.action_Nouveau.triggered.connect(self.newPSEN)
408 self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
409 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN)
410 self.enleverActionsStructures()
411 self.enleverParametres()
412 self.enleverRechercherDsCatalogue()
413 self.enleverNewInclude()
414 self.ajoutExecution()
420 self.enleverActionsStructures()
421 self.enleverParametres()
422 self.enleverRechercherDsCatalogue()
423 self.enleverNewInclude()
424 self.ajoutExecution()
428 self.enleverActionsStructures()
429 self.enleverNewInclude()
430 self.connectRechercherDsCatalogue()
431 self.ajoutSortieLegere()
433 def lookSuiteTelemac(self):
434 self.enleverActionsStructures()
435 self.enleverNewInclude()
436 self.enleverParametres()
437 self.enleverSupprimer()
438 self.enleverRechercherDsCatalogue()
440 def ajoutHelpPSEN(self):
441 self.actionParametres_Eficas.setText('Help PSEN')
442 if monEnvQT5 : self.actionParametres_Eficas.triggered.connect(self.aidePSEN)
443 else : self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.aidePSEN)
447 def ChercheGrpMesh(self):
448 Msg,listeGroup=self.ChercheGrpMeshInSalome()
450 self.viewmanager.handleAjoutGroup(listeGroup)
452 print ("il faut gerer les erreurs")
454 def ChercheGrpMaille(self):
455 # Normalement la variable self.salome permet de savoir si on est ou non dans Salome
457 Msg,listeGroup=self.ChercheGrpMailleInSalome() # recherche dans Salome
458 #Msg = None; listeGroup = None # recherche manuelle, i.e., sans Salome si ligne precedente commentee
460 raise ValueError('Salome non ouvert')
462 self.viewmanager.handleAjoutGroup(listeGroup)
464 print ("il faut gerer les erreurs")
467 def ChercheGrp(self):
468 #Msg,listeGroup=self.ChercheGrpMailleInSalome()
470 # self.viewmanager.handleAjoutGroup(listeGroup)
472 #print "il faut gerer "
476 def ajoutIcones(self) :
477 # Pour pallier les soucis de repertoire d icone
479 icon = QIcon(self.repIcon+"/new_file.png")
480 self.action_Nouveau.setIcon(icon)
481 icon1 = QIcon(self.repIcon+"/ouvrir.png")
482 self.actionOuvrir.setIcon(icon1)
483 icon2 = QIcon(self.repIcon+"/save.png")
484 self.actionEnregistrer.setIcon(icon2)
485 icon6 = QIcon(self.repIcon+"/delete.png")
486 self.actionSupprimer.setIcon(icon6)
487 icon7 = QIcon(self.repIcon+"/roue.png")
488 self.actionExecution.setIcon(icon7)
493 def connecterSignauxQT4(self) :
494 self.connect(self.recentMenu,SIGNAL('aboutToShow()'),self.handleShowRecentMenu)
496 self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew)
497 self.connect(self.actionNouvel_Include,SIGNAL("triggered()"),self.NewInclude)
498 self.connect(self.actionOuvrir,SIGNAL("triggered()"),self.fileOpen)
499 self.connect(self.actionEnregistrer,SIGNAL("triggered()"),self.fileSave)
500 self.connect(self.actionEnregistrer_sous,SIGNAL("triggered()"),self.fileSaveAs)
501 self.connect(self.actionFermer,SIGNAL("triggered()"),self.fileClose)
502 self.connect(self.actionFermer_tout,SIGNAL("triggered()"),self.fileCloseAll)
503 self.connect(self.actionQuitter,SIGNAL("triggered()"),self.fileExit)
505 self.connect(self.actionEficas,SIGNAL("triggered()"),self.aidePPal)
506 self.connect(self.actionVersion,SIGNAL("triggered()"),self.version)
507 self.connect(self.actionParametres,SIGNAL("triggered()"),self.gestionParam)
509 self.connect(self.actionCouper,SIGNAL("triggered()"),self.editCut)
510 self.connect(self.actionCopier,SIGNAL("triggered()"),self.editCopy)
511 self.connect(self.actionColler,SIGNAL("triggered()"),self.editPaste)
512 self.connect(self.actionSupprimer,SIGNAL("triggered()"),self.supprimer)
513 self.connect(self.actionRechercher,SIGNAL("triggered()"),self.rechercher)
514 self.connect(self.actionDeplier_replier,SIGNAL("triggered()"),self.Deplier)
516 self.connect(self.actionRapport_de_Validation,SIGNAL("triggered()"),self.jdcRapport)
517 self.connect(self.actionRegles_du_JdC,SIGNAL("triggered()"),self.jdcRegles)
518 self.connect(self.actionFichier_Source,SIGNAL("triggered()"),self.jdcFichierSource)
519 self.connect(self.actionFichier_Resultat,SIGNAL("triggered()"),self.visuJdcPy)
524 self.actionTraduitV9V10 = QAction(self)
525 self.actionTraduitV9V10.setObjectName("actionTraduitV9V10")
526 self.actionTraduitV9V10.setText(tr("TraduitV9V10"))
527 self.actionTraduitV10V11 = QAction(self)
528 self.actionTraduitV10V11.setObjectName("actionTraduitV10V11")
529 self.actionTraduitV10V11.setText(tr("TraduitV10V11"))
530 self.actionTraduitV11V12 = QAction(self)
531 self.actionTraduitV11V12.setObjectName("actionTraduitV11V12")
532 self.actionTraduitV11V12.setText(tr("TraduitV11V12"))
533 self.actionSauveLigne = QAction(self)
534 self.actionSauveLigne.setText(tr("Sauve Format Ligne"))
536 #self.connect(self.actionParametres_Eficas,SIGNAL("triggered()"),self.optionEditeur)
537 self.connect(self.actionLecteur_Pdf,SIGNAL("triggered()"),self.optionPdf)
538 self.connect(self.actionTraduitV9V10,SIGNAL("triggered()"),self.traductionV9V10)
539 self.connect(self.actionTraduitV10V11,SIGNAL("triggered()"),self.traductionV10V11)
540 self.connect(self.actionTraduitV11V12,SIGNAL("triggered()"),self.traductionV11V12)
541 self.connect(self.actionSauveLigne,SIGNAL("triggered()"),self.sauveLigne)
545 self.actionChercheGrpMaille = QAction(self)
546 self.actionChercheGrpMaille.setText(tr("Acquiert groupe mailles"))
547 self.connect(self.actionChercheGrpMaille,SIGNAL("triggered()"),self.ChercheGrpMaille)
550 self.actionChercheGrp = QAction(self)
551 self.actionChercheGrp.setText(tr("Acquisition Groupe Maille"))
552 self.connect(self.actionChercheGrp,SIGNAL("triggered()"),self.ChercheGrp)
555 self.actionCode = QAction(self)
556 self.actionCode.setText(tr("Specificites Maille"))
557 self.connect(self.actionCode,SIGNAL("triggered()"),self.aideCode)
559 def connecterSignaux(self) :
561 self.recentMenu.aboutToShow.connect(self.handleShowRecentMenu)
562 self.action_Nouveau.triggered.connect(self.fileNew)
563 self.actionNouvel_Include.triggered.connect(self.NewInclude)
564 self.actionOuvrir.triggered.connect(self.fileOpen)
565 self.actionEnregistrer.triggered.connect(self.fileSave)
566 self.actionEnregistrer_sous.triggered.connect(self.fileSaveAs)
567 self.actionFermer.triggered.connect(self.fileClose)
568 self.actionFermer_tout.triggered.connect(self.fileCloseAll)
569 self.actionQuitter.triggered.connect(self.fileExit)
571 self.actionEficas.triggered.connect(self.aidePPal)
572 self.actionVersion.triggered.connect(self.version)
573 self.actionParametres.triggered.connect(self.gestionParam)
575 self.actionCouper.triggered.connect(self.editCut)
576 self.actionCopier.triggered.connect(self.editCopy)
577 self.actionColler.triggered.connect(self.editPaste)
578 self.actionSupprimer.triggered.connect(self.supprimer)
579 self.actionRechercher.triggered.connect(self.rechercher)
580 self.actionDeplier_replier.triggered.connect(self.Deplier)
582 self.actionRapport_de_Validation.triggered.connect(self.jdcRapport)
583 self.actionRegles_du_JdC.triggered.connect(self.jdcRegles)
584 self.actionFichier_Source.triggered.connect(self.jdcFichierSource)
585 self.actionFichier_Resultat.triggered.connect(self.visuJdcPy)
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 ouvreFichiers(self) :
626 # Ouverture des fichiers de commandes donnes sur la ligne de commande
629 for study in session.d_env.studies:
631 d=session.get_unit(study,self)
632 self.viewmanager.handleOpen(fichier=study["comm"],units=d)
635 def get_source(self,file):
636 # appele par Editeur/session.py
638 p=convert.plugins['python']()
640 texte=p.convert('execnoparseur')
643 def initPatrons(self) :
644 # Mise a jour du menu des fichiers recemment ouverts
645 from Editeur import listePatrons
646 if not(self.code in listePatrons.sous_menus.keys()) :
647 if hasattr(self,"menuPatrons"):
648 self.menuPatrons.setAttribute(Qt.WA_DeleteOnClose)
649 self.menuPatrons.close()
650 delattr(self,"menuPatrons")
652 if (not hasattr(self,"menuPatrons")):
653 self.menuPatrons = QMenu(self.menubar)
654 self.menuPatrons.setObjectName("menuPatrons")
655 self.menubar.addAction(self.menuPatrons.menuAction())
656 self.menuPatrons.setTitle(tr("Patrons"))
658 self.menuPatrons.clear()
659 self.listePatrons = listePatrons.listePatrons(self.code)
661 for nomSsMenu in self.listePatrons.liste.keys():
662 ssmenu=self.menuPatrons.addMenu(nomSsMenu)
663 for fichier in self.listePatrons.liste[nomSsMenu]:
664 id = ssmenu.addAction(fichier)
665 self.ficPatrons[id]=fichier
666 if monEnvQT5 : self.id.triggered.connect(self.handleOpenPatrons)
667 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenPatrons)
668 # self.Patrons.setItemParameter(id,idx)
671 def initRecents(self):
672 if monEnvQT5 : self.recent = []
673 else : self.recent = QStringList()
675 if sys.platform[0:5]=="linux" :
676 rep=os.path.join(os.environ['HOME'],'.config/Eficas',self.code)
678 rep=os.path.join('C:/','.config/Eficas',self.code)
679 monFichier=rep+"/listefichiers_"+self.code
685 l=(ligne.split("\n"))[0]
686 self.recent.append(l)
694 def addToRecentList(self, fn):
695 if not monEnvQT5 : self.addToRecentListQT4(fn); return
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','html')
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','html')
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 if monEnvQT5 : id.triggered.connect(self.handleOpenRecent)
827 else : self.connect(id, SIGNAL('triggered()'),self.handleOpenRecent)
828 self.recentMenu.addSeparator()
829 self.recentMenu.addAction(tr('&Effacer'), self.handleClearRecent)
831 def handleOpenPatrons(self):
833 fichier=self.repIni+"/../Editeur/Patrons/"+self.code+"/"+self.ficPatrons[idx]
834 self.viewmanager.handleOpen(fichier=fichier, patron = 1)
836 def handleOpenRecent(self):
838 fichier=self.ficRecents[idx]
839 self.viewmanager.handleOpen(fichier=fichier, patron =0 )
841 def handleClearRecent(self):
842 self.recent = QStringList()
845 def handleRechercherDsCatalogue(self):
846 if not self.viewmanager : return
847 self.viewmanager.handleRechercherDsCatalogue()
851 self.viewmanager.newEditor()
852 except EficasException as exc:
854 if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg)
856 def openProcess(self):
860 dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',"ProcessOutputs_Eficas"))
861 sys.path.insert(0,dirCode)
863 self.definitCode(code,ssCode)
872 self.viewmanager.handleOpen()
873 except EficasException as exc:
876 QMessageBox.warning(self, tr(u"Erreur"), msg)
878 def sauveLigne(self):
879 return self.viewmanager.sauveLigneCurrentEditor()
882 return self.viewmanager.saveCurrentEditor()
884 def fileSaveAs(self):
885 return self.viewmanager.saveAsCurrentEditor()
888 self.viewmanager.handleClose(texte='&Fermer')
890 def fileCloseAll(self):
891 self.viewmanager.handleCloseAll(texte='&Fermer')
894 # On peut sortir sur Abort
895 res=self.viewmanager.handleCloseAll()
901 self.viewmanager.handleEditCopy()
904 self.viewmanager.handleEditCut()
907 self.viewmanager.handleEditPaste()
909 def rechercher(self):
910 self.viewmanager.handleRechercher()
913 self.viewmanager.run()
916 self.viewmanager.saveRun()
920 self.viewmanager.handleSupprimer()
922 def jdcFichierSource(self):
923 self.viewmanager.handleViewJdcFichierSource()
925 def jdcRapport(self):
926 self.viewmanager.handleViewJdcRapport()
929 self.viewmanager.handleViewJdcRegles()
931 def gestionParam(self):
932 self.viewmanager.handlegestionParam()
935 self.viewmanager.handleViewJdcPy()
938 def NewInclude(self):
939 self.viewmanager.newIncludeEditor()
942 for pathCode in self.ListePathCode:
944 aEnlever=os.path.abspath(os.path.join(os.path.dirname(__file__),'..',pathCode))
945 sys.path.remove(aEnlever)
948 for pathCode in self.listeAEnlever:
950 sys.path.remove(aEnlever)
955 def closeEvent(self,event):
957 if res==2 : event.ignore()
960 if __name__=='__main__':
963 rep=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__),'..','ASTER')))
965 from Aster import prefsCode
966 if hasattr(prefsCode,'encoding'):
967 # Hack pour changer le codage par defaut des strings
970 sys.setdefaultencoding(prefsCode.encoding)
971 del sys.setdefaultencoding
974 from Editeur import import_code
975 from Editeur import session
977 # Analyse des arguments de la ligne de commande
978 options=session.parse(sys.argv)
982 app = QApplication(sys.argv)
983 #app.setMainWidget(mw) (qt3)