# -*- coding: utf-8 -*-
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# Copyright (C) 2007-2021 EDF R&D
#
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
#
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-# ======================================================================
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
+import types,sys,os, re
+import subprocess
+import traceback
+
+
+from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter, QLabel
+from PyQt5.QtGui import QPalette
+from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize
-import types,sys,os
import traceback
-from PyQt4 import *
-from PyQt4.QtGui import *
-from PyQt4.QtCore import *
# Modules Eficas
+from Extensions.i18n import tr
-import convert,generator
-from Editeur import session
-from Editeur import comploader
-from Editeur import Objecttreeitem
-#import panelsQT
-import browser
-import readercata
-import qtCommun
+from Editeur import session
+from Editeur import comploader
+from Editeur import Objecttreeitem
+from InterfaceQT4 import browser
-import prefs
+from desBaseWidget import Ui_baseWidget
+from InterfaceQT4.monViewTexte import ViewText
+from monWidgetCreeParam import MonWidgetCreeParam
-VERSION_EFICAS = "EFICAS v1.14"
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
+debug = False
-class JDCEditor(QSplitter):
-# -------------------------- #
+from InterfaceQT4.editorSsIhm import JDCEditorSsIhm
+
+
+class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget):
+# ----------------------------------------- #
"""
Editeur de jdc
- """
-
- def __init__ (self,fichier = None, jdc = None, QWParent=None, units = None, include=0 ,appli=None, vm=None):
- #----------------------------------------------------------------------------------------------------------#
-
- #print "debut JDCEditor __init__"
- print "fichier", fichier,"jdc",jdc,"units",units,"include",include
- QSplitter.__init__(self, QWParent)
- self.appliEficas = appli
- self.appli = appli #---- attendu par IHM
- self.vm = vm
- self.fichier = fichier
- self.jdc = jdc
- self.QWParent = QWParent
-
- self.test=0
- VERSION_CODE = session.d_env.cata
- if appli != None :
- self.salome = self.appliEficas.salome
- else :
- self.salome=0
-
- self.code = prefs.code
- self.version_code = VERSION_CODE
- self.titre=VERSION_EFICAS + ' pour '+ self.code
-
- self.dict_reels={}
- self.liste_simp_reel=[]
- self.format_fichier='python' # par defaut
- self.jdc_openturn_xml=""
- self.jdc_openturn_std=""
- self.ihm="QT"
-
- from Editeur import configuration
- self.CONFIGURATION = self.appliEficas.CONFIGURATION
- self.CONFIGStyle = self.appliEficas.CONFIGStyle
-
- self.sb = None
- if hasattr(self.appliEficas,"statusBar"):
- self.sb = self.appliEficas.statusBar()
-
- self.fileInfo = None
- self.lastModified = 0
-
- self.modified = False
- self.isReadOnly = False
- self.tree = None
- self.node_selected = None
-
- if not hasattr( readercata, 'reader' ) :
- readercata.reader = readercata.READERCATA( self, self.appliEficas )
- self.readercata = readercata.reader
-
- #------- construction du jdc --------------
-
- jdc_item = None
-
- nouveau=0
- if self.fichier is not None: # fichier jdc fourni
- self.fileInfo = QFileInfo(self.fichier)
- self.fileInfo.setCaching(0)
- if jdc==None :
- self.jdc = self.readFile(self.fichier)
- else :
- self.jdc=jdc
- if units is not None:
- self.jdc.recorded_units=units
- self.jdc.old_recorded_units=units
- else:
- if not self.jdc: # nouveau jdc
- if not include :
- self.jdc = self._newJDC(units=units)
- else :
- self.jdc = self._newJDCInclude(units=units)
- nouveau=1
-
- if self.jdc:
- self.jdc.appli = self
- txt_exception = None
- if not jdc:
- self.jdc.analyse()
- txt_exception = self.jdc.cr.get_mess_exception()
- if txt_exception:
- self.jdc = None
- qApp.restoreOverrideCursor()
- self.affiche_infos("Erreur fatale au chargement de %s" %fichier)
- QMessageBox.critical( self, "Erreur fatale au chargement d'un fichier", txt_exception)
- else:
- comploader.charger_composants("QT")
- jdc_item=Objecttreeitem.make_objecttreeitem( self, "nom", self.jdc )
-
- if (not self.jdc.isvalid()) and (not nouveau) :
- self.viewJdcRapport()
- if jdc_item:
- self.tree = browser.JDCTree( jdc_item, self )
-
- #--------------------------------#
- def _newJDC( self ,units = None):
+ """
+
+# ----------------------------------------
+# Methodes faisant appel a ssIhm
+# ----------------------------------------
+
+ def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, units = None, include=0):
+ #------------------------------------------------------------------------------------------------
+
+
+ QWidget.__init__(self,None)
+ self.setupUi(self)
+
+ self.inhibeSplitter=0
+ self.widgetOptionnel=None
+ self.fenetreCentraleAffichee=None
+ self.dejaDansPlieTout=False
+ self.listeDesListesOuvertes=set()
+ if appliEficas!=None and hasattr(appliEficas,"statusBar"): self.sb = appliEficas.statusBar()
+ else : self.sb = None
+ self.QWParent=QWParent
+
+ JDCEditorSsIhm. __init__ (self,appliEficas,fichier, jdc,units,include)
+ if self.jdc:
+ comploader.chargerComposants()
+ self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
+
+ # Particularites IHM : met la fenetre a jour
+
+ self.initSplitterSizes()
+
+ #self.affiche=self.appliEficas.maConfiguration.affiche
+
+ self.afficheListesPliees=self.maConfiguration.afficheListesPliees
+ if self.code in ['MAP','CARMELCND','PSEN'] : self.maConfiguration.afficheCommandesPliees=False
+ if self.code in ['MAP',]: self.fermeArbre()
+ # self.widgetTree.close()
+ # self.widgetTree=None
+
+ if self.maConfiguration.closeArbre : self.fermeArbre()
+ if self.maConfiguration.closeOptionnel : self.fermeOptionnel()
+ if self.maConfiguration.boutonDsMenuBar : self.appliEficas.remplitIconesCommandes()
+
+
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
+
+ self.node_selected = []
+ self.deplier = True
+ self.message=''
+ self.afficheApresInsert=False
+ if self.maConfiguration.closeArbre : self.afficheApresInsert=True
+ if self.code in ['Adao','ADAO','MAP'] : self.afficheApresInsert=True
+ if self.code in ['TELEMAC',] : self.enteteQTree='premier'
+ else : self.enteteQTree='complet'
+ if self.code in ['Adao','ADAO','TELEMAC','VP'] : self.affichePlie=True
+ else : self.affichePlie=False
+
+ self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue
+
+ if self.appliEficas.readercata.demandeCatalogue==True :
+ nomFichierTranslation='translatorFichier'+'_'+str(self.appliEficas.readercata.labelCode)
+ if hasattr(self.appliEficas.maConfiguration,nomFichierTranslation) :
+ translatorFichier=getattr(self.appliEficas.maConfiguration,nomFichierTranslation)
+ from Extensions import localisation
+ localisation.localise(None,self.appliEficas.langue,translatorFichier=translatorFichier)
+
+
+ if self.jdc_item and self.appliEficas.ssIhm==False :
+ self.tree = browser.JDCTree( self.jdc_item, self )
+ self.appliEficas.construitMenu()
+
+ self.adjustSize()
+
+
+ #-------------------------------#
+ def readFile(self, fn):
#--------------------------------#
"""
- Initialise un nouveau JDC vierge
+ Public slot to read the text from a file.
+ @param fn filename to read from (string or QString)
"""
- CONTEXT.unset_current_step()
- jdc=self.readercata.cata[0].JdC( procedure="",
- appli=self,
- cata=self.readercata.cata,
- cata_ord_dico=self.readercata.cata_ordonne_dico,
- rep_mat=self.CONFIGURATION.rep_mat
- )
- if units is not None:
- jdc.recorded_units=units
- jdc.old_recorded_units=units
- jdc.analyse()
+
+ jdc=JDCEditorSsIhm.readFile(self, fn)
+
+ # Particularites IHM : met le titre de la fenetre a jour
+# qApp.restoreOverrideCursor()
+ if self.fileInfo!= None : self.lastModified = self.fileInfo.lastModified()
+ nouveauTitre=self.titre+" "+os.path.basename(self.fichier)
+ self.appliEficas.setWindowTitle(nouveauTitre)
+
return jdc
-
+
+# ---------------------------------------------
+# Methodes Inchangees
+# ---------------------------------------------
+# _newJDC
+# _newJDCInclude
+# __generateTempFilename
+# getSource
+# generDico
+# viewJdcSource
+# viewJdcPy
+# viewJdcRapport
+# getFileName
+# initModif
+# writeFile
+# getTextJDC
+# verifieChecksum
+# getChecksum
+# getDico
+# chercheGroupes
+# chercheDico
+# saveFileLegerAs
+
+# ---------------------------------------------
+# Methodes Surchargees
+# ---------------------------------------------
+
+ #-----------------------------------------------------------------------#
+ def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
+ #--------------------------------------------------------------------#
+ w = ViewText( self.QWParent,self ,caption,txt,largeur,hauteur)
+ w.show()
+
#--------------------------------#
- def _newJDCInclude( self ,units = None):
+ def informe(self,titre,txt,critique=True):
#--------------------------------#
- """
- Initialise un nouveau JDC vierge
- """
- import Extensions.jdc_include
- JdC_aux=Extensions.jdc_include.JdC_include
- print JdC_aux
- CONTEXT.unset_current_step()
-
- jaux=self.readercata.cata[0].JdC( procedure="",
- appli=self,
- cata=self.readercata.cata,
- cata_ord_dico=self.readercata.cata_ordonne_dico,
- rep_mat=self.CONFIGURATION.rep_mat,
- )
- jaux.analyse()
-
- J=JdC_aux( procedure="",
- appli=self,
- cata=self.readercata.cata,
- cata_ord_dico=self.readercata.cata_ordonne_dico,
- jdc_pere=jaux,
- rep_mat=self.CONFIGURATION.rep_mat,
- )
- J.analyse()
- if units is not None:
- J.recorded_units=units
- J.old_recorded_units=units
- return J
+ if critique :
+ self.afficheInfos(tr(txt),Qt.red)
+ QMessageBox.critical( self, tr(titre), tr(txt))
+ else :
+ QMessageBox.warning( self, tr(titre),tr(txt))
- #-----------------------#
- def readFile(self, fn):
#--------------------------------#
- """
- Public slot to read the text from a file.
- @param fn filename to read from (string or QString)
- """
- fn = unicode(fn)
-
- # ------------------------------------------------------------------------------------
- # charge le JDC
- # ------------------------------------------------------------------------------------
-
- jdcName=os.path.basename(fn)
- # Il faut convertir le contenu du fichier en fonction du format
- if convert.plugins.has_key( self.format_fichier ):
- # Le convertisseur existe on l'utilise
- appli = self
- p=convert.plugins[self.format_fichier]()
- p.readfile(fn)
- text=p.convert('exec',appli)
- if not p.cr.estvide():
- self.affiche_infos("Erreur à la conversion")
-
- CONTEXT.unset_current_step()
- ## os.chdir(self.initialdir)
- jdc=self.readercata.cata[0].JdC(procedure=text,
- appli=self,
- cata=self.readercata.cata,
- cata_ord_dico=self.readercata.cata_ordonne_dico,
- nom=jdcName,
- rep_mat=self.CONFIGURATION.rep_mat
- )
- # ----------------------------------------------------
- # charge le JDC fin
- # ----------------------------------------------------
- self.modified = False
-
-# qApp.restoreOverrideCursor()
- if self.fileInfo!= None :
- self.lastModified = self.fileInfo.lastModified()
- else :
- self.lastModified = 1
- return jdc
-
- #-----------------------#
- def get_source(self,file):
- #-----------------------#
- format=self.format_fichier
-
- # Il faut convertir le contenu du fichier en fonction du format
- if convert.plugins.has_key(format):
- # Le convertisseur existe on l'utilise
- p=convert.plugins[format]()
- p.readfile(file)
- text=p.convert('execnoparseur')
- if not p.cr.estvide():
- self.affiche_infos("Erreur a la conversion")
- return text
- else:
- # Il n'existe pas c'est une erreur
- self.affiche_infos("Type de fichier non reconnu")
- QMessageBox.critical( self, "Type de fichier non reconnu","EFICAS ne sait pas ouvrir ce type de fichier")
- return None
+ def ajoutCommentaire(self):
+ #--------------------------------#
+ if self.tree.selectedItems()==[] :
+ QMessageBox.warning( self, tr("Pas de noeud selectionne"),tr("Selectionnez un Noeud \nLe commentaire sera place apres le noeud selectionne"))
+ return
+ noeudAvantCommentaire=self.tree.selectedItems()[0]
+ if noeudAvantCommentaire ==self.tree.racine :
+ self.tree.racine.appendChild("COMMENTAIRE",pos=0)
+ return
+ noeudAvantCommentaire.addComment(True)
+
#----------------------------------------------#
- def _viewText(self, txt, caption = "FILE_VIEWER"):
+ def _viewTextExecute(self, txt, prefix, suffix):
#----------------------------------------------#
- w = qtCommun.ViewText( self.QWParent )
- w.setWindowTitle( caption )
- w.setText(txt)
- w.show()
-
- #-----------------------#
- def viewJdcSource(self):
- #-----------------------#
- format = self.format_fichier
- f=open(self.fichier,'r')
- texteSource=f.read()
+ self.w = ViewText( self.QWParent )
+ self.w.setWindowTitle( "execution" )
+ self.monExe=QProcess(self.w)
+ pid=self.monExe.pid()
+ nomFichier = self.__generateTempFilename(prefix, suffix = ".sh")
+ f=open(nomFichier,'w')
+ f.write(txt)
f.close()
- self._viewText(texteSource, "JDC_SOURCE")
-
- #-----------------------#
- def viewJdcPy(self):
- #-----------------------#
- format = self.format_fichier
- strSource = str( self.get_text_JDC(format) )
- self._viewText(strSource, "JDC_RESULTAT")
-
+ self.monExe.readyReadStandardOutput.connect( self.readFromStdOut)
+ self.monExe.readyReadStandardError.connect( self.readFromStdErr)
+ exe='sh ' + nomFichier
+ self.monExe.start(exe)
+ self.monExe.closeWriteChannel()
+ self.w.exec_()
+ try:
+ commande="rm "+ nomFichier
+ os.system(commande)
+ except :
+ pass
+
+ def readFromStdErr(self):
+ a=self.monExe.readAllStandardError()
+ self.w.view.append(str(a.data()))
+
+ def readFromStdOut(self) :
+ a=self.monExe.readAllStandardOutput()
+ self.w.view.append(str(a.data()))
+
+
#-----------------------#
- def viewJdcRapport(self):
+ def gestionParam(self):
#-----------------------#
- strRapport = str( self.jdc.report() )
- self._viewText(strRapport, "JDC_RAPPORT")
-
+ w = MonWidgetCreeParam( self)
+ w.show()
+
+
#----------------#
def closeIt(self):
#----------------#
"""
Public method called by the viewmanager to finally get rid of us.
"""
- if self.jdc:
- self.jdc.supprime()
+ if self.jdc: self.jdc.supprime()
self.close()
-
- #------------------------------#
- def affiche_infos(self,message):
- #------------------------------#
+
+ #----------------------------------------------#
+ def afficheInfos(self,message,couleur=Qt.black):
+ #----------------------------------------------#
+ if couleur=='red' : couleur = Qt.red
if self.sb:
- self.sb.showMessage(message)#,2000)
+ mapalette=self.sb.palette()
+ mapalette.setColor( QPalette.WindowText, couleur )
+ self.sb.setPalette( mapalette );
+ self.sb.showMessage(message,4000)
+ self.couleur=couleur
#------------------------------#
- def affiche_alerte(self,titre,message):
+ def afficheAlerte(self,titre,message):
#------------------------------#
# appele par I_MACRO_ETAPE
QMessageBox.information( self, titre, message)
- #-------------------#
- def init_modif(self):
- #-------------------#
- """
- Met l'attribut modified a 'o' : utilise par Eficas pour savoir
- si un JDC doit etre sauvegarde avant destruction ou non
- """
- self.modified = True
+ #-----------------------------------#
+ def afficheCommentaire(self,message):
+ #-----------------------------------#
+ self.labelCommentaire.setText(message)
+ QTimer.singleShot(6000, self.rendInvisible)
+
+ #----------------------#
+ def rendInvisible(self):
+ #----------------------#
+ self.labelCommentaire.setText("")
#---------------------------------------#
def chercheNoeudSelectionne(self,copie=1):
#---------------------------------------#
- """
- appele par Cut et Copy pour positionner self.node_selected
- """
- self.node_selected=None
- if len(self.tree.selectedItems()) == 0 : return
- if len(self.tree.selectedItems()) != 1 :
- QMessageBox.information( self,
- "Copie impossible",
- "Cette version d'EFICAS permet uniquement la copie d un seul objet")
- return
- self.node_selected=self.tree.selectedItems()[0]
- if copie == 0 : return
- if not self.node_selected.item.iscopiable():
- QMessageBox.information( self,
- "Copie impossible",
- "Cette version d'EFICAS ne permet pas la copie de cet Objet")
- self.node_selected=None
- return
-
-
+ """
+ appele par Cut et Copy pour positionner self.node_selected
+ """
+ self.node_selected=[]
+ if len(self.tree.selectedItems()) == 0 : return
+ self.node_selected=self.tree.selectedItems()
+
+
+ #---------------------#
+ def handleSupprimer(self):
+ #---------------------#
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 : return
+ self.QWParent.noeud_a_editer = []
+ if self.node_selected[0]==self.tree.racine: return
+ if len(self.node_selected) == 1 : self.node_selected[0].delete()
+ else : self.node_selected[0].deleteMultiple(self.node_selected)
+
+ #---------------------#
+ def handleRechercher(self):
+ #---------------------#
+ from .monRecherche import DRecherche
+ monRechercheDialg=DRecherche(parent=self,fl=0)
+ monRechercheDialg.show()
+
+
+ #--------------------------------#
+ def handleRechercherDsCatalogue(self):
+ #-----------------------------#
+ from .monRechercheCatalogue import DRechercheCatalogue
+ monRechercheDialg=DRechercheCatalogue(self.QWParent,self)
+ monRechercheDialg.show()
+
+ #---------------------#
+ def handleDeplier(self):
+ #---------------------#
+ if self.tree == None : return
+ #self.tree.collapseAll()
+ if self.deplier :
+ #print "je plie"
+ self.tree.expandItem(self.tree.topLevelItem(0))
+ self.deplier = False
+ if self.fenetreCentraleAffichee != None :
+ if hasattr(self.fenetreCentraleAffichee.node,'plieToutEtReaffiche'):
+ self.fenetreCentraleAffichee.node.plieToutEtReaffiche()
+ else:
+ #print "je deplie"
+ self.tree.expandItem(self.tree.topLevelItem(0))
+ self.deplier = True
+ if self.fenetreCentraleAffichee != None :
+ if hasattr(self.fenetreCentraleAffichee.node,'deplieToutEtReaffiche'):
+ self.fenetreCentraleAffichee.node.deplieToutEtReaffiche()
+
#---------------------#
def handleEditCut(self):
#---------------------#
- """
- Stocke dans Eficas.noeud_a_editer le noeud à couper
- """
- self.chercheNoeudSelectionne()
- self.QWParent.edit="couper"
- self.QWParent.noeud_a_editer = self.node_selected
-
+ """
+ Stocke dans Eficas.noeud_a_editer le noeud a couper
+ """
+ #print "handleEditCut"
+ self.chercheNoeudSelectionne()
+ self.QWParent.edit="couper"
+ self.QWParent.noeud_a_editer = self.node_selected
+
#-----------------------#
def handleEditCopy(self):
#-----------------------#
- """
- Stocke dans Eficas.noeud_a_editer le noeud a copier
- """
- self.chercheNoeudSelectionne()
- self.QWParent.edit="copier"
- self.QWParent.noeud_a_editer = self.node_selected
-
+ """
+ Stocke dans Eficas.noeud_a_editer le noeud a copier
+ """
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 : return
+ if len(self.node_selected) == 1 : self.node_selected[0].updateNodeLabelInBlue()
+ else : self.node_selected[0].updatePlusieursNodeLabelInBlue(self.node_selected)
+ self.QWParent.edit="copier"
+ self.QWParent.noeud_a_editer = self.node_selected
+
#------------------------#
def handleEditPaste(self):
#------------------------#
- """
- Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
- Ne permet que la copie d'objets de type Commande ou MCF
- """
- self.chercheNoeudSelectionne()
- print "noeud a copier", self.node_selected.item.GetLabelText()[0]
- print "noued apres " ,self.QWParent.noeud_a_editer.item.GetLabelText()[0]
- if self.QWParent.noeud_a_editer == None :
- QMessageBox.information( self,
- "Copie impossible",
- "Aucun Objet n a ete copie ou colle ")
- return
- try:
- child=self.QWParent.noeud_a_editer.doPaste(self.node_selected)
- except:
- traceback.print_exc()
- QMessageBox.information( self,
- "Copie impossible",
- "L'action de coller apres un tel objet n'est pas permise")
- return
-
-
- if child == 0:
- if self.message != '':
- QMessageBox.critical( self, "Copie refusee", self.message)
- self.message = ''
- self.affiche_infos("Copie refusée")
- return
-
- # il faut declarer le JDCDisplay_courant modifie
- self.init_modif()
- # suppression eventuelle du noeud selectionne
- # si possible on renomme l objet comme le noeud couper
-
- if self.QWParent.edit == "couper":
- #nom = self.QWParent.noeud_a_editer.item.object.sd.nom
- print self.QWParent.noeud_a_editer.item.object.sd.nom
- item=self.QWParent.noeud_a_editer.item
- self.QWParent.noeud_a_editer.delete()
- child.item.update(item)
- #test,mess = child.item.nomme_sd(nom)
- child.select()
-
- # on rend la copie a nouveau possible en liberant le flag edit
- self.QWParent.edit="copier"
-
- #---------------------#
- def getFileName(self):
- #---------------------#
- return self.fichier
-
- #---------------------------#
- def writeFile(self, fn, txt = None):
- #------------------------------#
"""
- Public slot to write the text to a file.
-
- @param fn filename to write to (string or QString)
- @return flag indicating success
+ Lance la copie de l'objet place dans self.QWParent.noeud_a_editer
+ Ne permet que la copie d'objets de type Commande ou MCF
"""
+ self.chercheNoeudSelectionne()
+ if (not(hasattr(self.QWParent,'noeud_a_editer'))) or len(self.QWParent.noeud_a_editer)==0:
+ QMessageBox.information( self,
+ tr("Copie impossible"),
+ tr("Veuillez selectionner un objet a copier"))
+ return
+ if len(self.node_selected) != 1 :
+ QMessageBox.information( self,
+ tr("Copie impossible"),
+ tr("Veuillez selectionner un seul objet : la copie se fera apres le noeud selectionne"))
+ return
+ noeudOuColler=self.node_selected[0]
+
+ if len(self.QWParent.noeud_a_editer)!=1:
+ #self.handleEditPasteMultiple()
+ QMessageBox.information( self, tr("Copie impossible"), tr("Aucun Objet n a ete copie ou coupe"))
+ return
+
+ noeudACopier=self.QWParent.noeud_a_editer[0]
+
+ if (self.QWParent.edit != "couper"):
+ #print (noeudOuColler.item.parent.getChild(noeudOuColler.item.nom))
+ try:
+ if noeudOuColler == self.tree.racine :
+ child=noeudOuColler.doPastePremier(noeudACopier)
+ else :
+ child=noeudACopier.doPaste(noeudOuColler,'after')
+
+ if child==None or child==0:
+ QMessageBox.critical( self,tr( "Copie refusee"),tr('Eficas n a pas reussi a copier l objet'))
+ self.message = ''
+ self.afficheInfos("Copie refusee",Qt.red)
+ if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
+ try :
+ nom=noeudACopier.item.sd.nom
+ child.item.nommeSd(nom)
+ except :
+ pass
+ return
+ self.initModif()
+ child.select()
+ except :
+ traceback.print_exc()
+ QMessageBox.critical( self,tr( "Copie refusee"),tr('Copie refusee pour ce type d objet'))
+ self.message = ''
+ self.afficheInfos("Copie refusee",Qt.red)
+ return
+
+ # il faut declarer le JDCDisplay_courant modifie
+ # suppression eventuelle du noeud selectionne
+ # si possible on renomme l objet comme le noeud couper
+
+ if (self.QWParent.edit == "couper"):
+ if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor:
+ QMessageBox.critical( self, tr("Deplacement refuse"),tr('Deplacement refuse entre 2 fichiers. Seule la copie est autorisee '))
+
+ #if 1:
+ try :
+ # indexNoeudACopier=noeudACopier.treeParent.children.index(noeudACopier)
+ indexNoeudACopier=self.getTreeIndex(noeudACopier)
+ noeudACopier.treeParent.item.deplaceEntite(indexNoeudACopier,indexNoeudOuColler,pos)
+ noeudACopier.treeParent.buildChildren()
+
+ #else:
+ except:
+ pass
+ self.QWParent.noeud_a_editer=[]
- fn = unicode(fn)
+ # on rend la copie a nouveau possible en liberant le flag edit
+ self.QWParent.edit="copier"
+ noeudACopier.select()
- if txt == None :
- txt = self.get_text_JDC(self.format_fichier)
- eol = '\n'
- if len(txt) >= len(eol):
- if txt[-len(eol):] != eol:
- txt += eol
- else:
- txt += eol
+ #----------------------------------#
+ def handleDeplaceMultiple(self):
+ #----------------------------------#
+ pass
+
+ #----------------------------------#
+ def handleEditPasteMultiple(self):
+ #----------------------------------#
+
+ # On ne garde que les niveaux "Etape"
+ # On insere dans l'ordre du JDC
+ listeNoeudsACouper=[]
+ listeIndex=[]
+ listeChild=[]
+ listeItem=[]
+ from InterfaceQT4 import compojdc
+ noeudOuColler=self.node_selected[0]
+ if not (isinstance(noeudOuColler.treeParent, compojdc.Node)):
+ QMessageBox.information( self,
+ tr("Copie impossible a cet endroit",),
+ tr("Veuillez selectionner une commande, un parametre, un commentaire ou une macro"))
+ return
+ indexNoeudOuColler=noeudOuColler.treeParent.children.index(noeudOuColler)
+
+ for noeud in self.QWParent.noeud_a_editer :
+ if not (isinstance(noeud.treeParent, compojdc.Node)): continue
+ indexInTree=noeud.treeParent.children.index(noeud)
+ indice = 0
+ for index in listeIndex:
+ if index < indexInTree : indice = indice +1
+ listeIndex.insert(indice, indexInTree)
+ listeNoeudsACouper.insert(indice, noeud)
+
+ noeudJdc=noeudOuColler.treeParent
+ dejaCrees=0
+ # on les cree a l'envers parcequ'on ajoute a NoeudOuColler
+ listeIndex.reverse()
+ for index in listeIndex:
+ indexTravail=index
+ if indexNoeudOuColler < index:
+ indexTravail=indexTravail+dejaCrees
+ noeudOuColler=noeudJdc.children[indexNoeudOuColler]
+ noeud=noeudJdc.children[indexTravail]
+ child=noeud.doPaste(noeudOuColler)
+ listeChild.append(child)
+ dejaCrees=dejaCrees+1
+
+ self.QWParent.noeud_a_editer = []
+ for i in range(len(listeIndex)):
+ noeud=noeudJdc.children[indexNoeudOuColler+1+i]
+ self.QWParent.noeud_a_editer.append(noeud)
+
+ listeASupprimer=[]
+ if self.QWParent.edit !="couper" : return
+
+ for index in listeIndex:
+ indexTravail=index
+ if indexNoeudOuColler < index:
+ indexTravail=indexTravail+(len(listeIndex))
+ noeud=noeudJdc.children[indexTravail]
+
+ listeItem.append(noeud.item)
+ listeASupprimer.append(noeud)
+
+ for i in range(len(listeChild)):
+ self.tree.item.suppItem(listeItem[i])
+ listeChild[i].item.update(listeItem[i])
+
+ self.QWParent.noeud_a_editer = []
+
+ #----------------------------------#
+ def handleAjoutEtape(self,nomEtape):
+ #----------------------------------#
+ self.chercheNoeudSelectionne()
+ if len(self.node_selected) == 0 or self.node_selected[0] == self.tree.racine :
+ nodeOuAjouter=self.tree.racine
+ nouveau=nodeOuAjouter.appendChild(nomEtape,pos='first')
+ else :
+ nodeOuAjouter=self.node_selected[0]
+ if nodeOuAjouter != self.tree.racine :
+ while nodeOuAjouter.treeParent != self.tree.racine:
+ nodeOuAjouter=nodeOuAjouter.treeParent
+ nouveau=nodeOuAjouter.appendBrother(nomEtape)
+ try :
+ self.node_selected[0].setSelected(False)
+ except : pass
+ nouveau.setSelected(True)
+ nouveau.affichePanneau()
+
+
+ #---------------------------#
+ def getFileVariable(self) :
+ #---------------------------#
+ titre = tr("Choix d'un fichier XML")
+ texte = tr("Le fichier contient une commande MODEL\n")
+ texte = texte+tr('Donnez le nom du fichier XML qui contient la description des variables')
+ QMessageBox.information( self, titre,tr(texte))
+ fichier = QFileDialog.getOpenFileName(self.appliEficas,
+ tr('Ouvrir Fichier'),
+ self.appliEficas.maConfiguration.savedir,
+ tr('Wrapper Files (*.xml);;''All Files (*)'))
+ return fichier
+
+ #------------#
+ def run(self):
+ #------------#
+ fonction="run"+self.code
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+
+ #------------#
+ def saveRun(self):
+ #------------#
+ fonction="saveRun"+self.code
+ if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,)
+
+
+# ---------------------------------------------
+# Methodes Non Crees dans ssIHM
+# ---------------------------------------------
+ #---------------#
+ def runVP(self):
+ #---------------#
+ texte=self.getTextJDC("MAPVp",pourRun=1)
+ print (texte)
+
+ #---------------#
+ def runMAP(self):
+ #---------------#
+
+ if not(self.jdc.isValid()):
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution MAP"))
+ return
+ if len(self.jdc.etapes) != 1 :
+ QMessageBox.critical( self, tr("Execution impossible "),tr("le JDC doit contenir un et un seul composant"))
+ return
+ if self.modified or self.fichier==None :
+ self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
+ texte=self.getTextJDC("MAP")
+ self.writeFile( self.fichierMapInput, txt = texte)
+ else :
+ self.fichierMapInput=self.fichier
+ composant=self.jdc.etapes[0].nom.lower()[0:-5]
+
+
+ # :TRICKY: to determine if a component requires SALOME, loads the component from Eficas catalog
+ # then instantiate corresponding class and call getUseSalome() method
try:
- f = open(fn, 'wb')
- f.write(txt)
- f.close()
- return 1
- except IOError, why:
- QMessageBox.critical(self, self.trUtf8('Save File'),
- self.trUtf8('The file <b>%1</b> could not be saved.<br>Reason: %2')
- .arg(unicode(fn)).arg(str(why)))
- return 0
-
-# #------------------------------------
-# def writeFilesOpenturns(self,fn) :
-# #------------------------------------
-# base=fn[:fn.rfind(".")]
-# fileXML=base + '.xml'
-# fileSTD=base + '_std.py'
-# self.writeFile(fileXML,self.jdc_openturn_xml)
-# self.writeFile(fileSTD,self.jdc_openturn_std)
-#
-#
- #-----------------------------#
- def get_text_JDC(self,format):
- #-----------------------------#
- if generator.plugins.has_key(format):
- # Le generateur existe on l'utilise
- g=generator.plugins[format]()
- jdc_formate=g.gener(self.jdc,format='beautifie')
- if format == "openturns" :
- self.jdc_openturn_xml=g.getOpenturnsXML()
- self.jdc_openturn_std=g.getOpenturnsSTD()
- if not g.cr.estvide():
- self.affiche_infos("Erreur à la generation")
- QMessageBox.critical( self, "Erreur a la generation","EFICAS ne sait pas convertir ce JDC")
+ from mapengine.spec import factory
+ mapComponent = factory.new(composant)[0]
+
+ command = "map"
+ if mapComponent.getUseSalome():
+ command += " -r sappli"
+ textePython=(command + " run -n "+composant +" -i "+self.fichierMapInput)
+
+ #textePython="ls -l"
+ self._viewTextExecute( textePython,"map_run",".sh")
+ #try:
+ # commande="rm "+self.fichierMapInput
+ # os.system(commande)
+ #except :
+ # pass
+ except Exception as e:
+ print((traceback.print_exc()))
+
+ #-------------------#
+ def runZCRACKS(self):
+ #-------------------#
+ if not(self.jdc.isValid()):
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
return
- else:
- return jdc_formate
- else:
- # Il n'existe pas c'est une erreur
- self.affiche_infos("Format %s non reconnu" % format)
- QMessageBox.critical( self, "Format %s non reconnu" % format,"EFICAS ne sait pas convertir le JDC en format %s "% format)
- return
-
-
+ if self.modified or self.fichier==None :
+ #if 1:
+ self.fichierZcracksInput = self.__generateTempFilename(prefix = "zcracks_run", suffix = ".z7p")
+ texte=self.getTextJDC("ZCRACKS",pourRun=1)
+ self.writeFile( self.fichierZcracksInput, txt = texte)
+ else :
+ self.fichierZcracksInput=self.fichier
+ try :
+ #commande ="Zrun -zp "
+ commande="more "
+ textePython=(commande + self.fichierZcracksInput)
+ self._viewTextExecute( textePython,"run_zcracks",".sh")
+ except Exception as e:
+ print((traceback.print_exc()))
+
+ #-------------------#
+ def runCARMELCND(self):
+ #-------------------#
+ #if not(self.jdc.isValid()):
+ # QMessageBox.critical( self, tr( "Execution impossible "),tr("le JDC doit etre valide pour une execution "))
+ # return
+ if self.modified or self.fichier==None :
+ QMessageBox.critical( self, tr( "Execution impossible "),tr("Sauvegarder SVP avant l'execution "))
+ return
+ if not hasattr(self,'generator'): texte=self.getTextJDC(self.formatFichierOut)
+ from PrepareRunCarmel import prepareRunCarmel
+ fichierGenerique=os.path.basename(self.fichier).split(".")[0]
+ repMed=os.path.dirname(self.fichier)
+ repExeCarmel=self.generator.get_repExeCarmel()
+ textePython=prepareRunCarmel(repExeCarmel,repMed,fichierGenerique)
+ nomFichier = self.__generateTempFilename("carmel_run", suffix = ".sh")
+ f=open(nomFichier,'w')
+ f.write(textePython)
+ f.close()
+ commande="xterm -e sh "+nomFichier +"\n"
+ os.system(commande)
+
+ #-------------------#
+ def runCarmelCS(self):
+ #-------------------#
+ try :
+ commande="runSession pilotyacsCS.py"
+ os.system(commande)
+ except Exception as e:
+ print((traceback.print_exc()))
+
+ #-----------------------------------------------------#
+ def determineNomFichier(self,path,extension):
+ #-----------------------------------------------------#
+ if self.appliEficas.code in DictExtensions:
+ chaine1=DictExtensions[self.appliEficas.code]+" (*."+DictExtensions[self.appliEficas.code]+");;"
+ extensions= tr(chaine1+ "All Files (*)")
+ else :
+ extensions= tr("JDC (*.comm);;" "All Files (*)")
+
+ if self.appliEficas.code == "MAP" :
+ extensions = extensions + ";; Run (*.input);;"
+
+ fn = QFileDialog.getSaveFileName( self,
+ tr("sauvegarde"), path,
+ extensions,None,
+ QFileDialog.DontConfirmOverwrite)
+ if fn == None : return (0, None)
+ fn=fn[0]
+ if fn=='': return (0, None)
+
+ ext = QFileInfo(fn).suffix()
+ if ext == '': fn+=extension
+
+ if QFileInfo(fn).exists():
+ msgBox = QMessageBox(self)
+ msgBox.setWindowTitle(tr("Sauvegarde du Fichier"))
+ msgBox.setText(tr("Le fichier")+ " "+str(fn)+ " " +tr("existe deja"))
+ msgBox.addButton(tr("&Ecraser"),0)
+ msgBox.addButton(tr("&Abandonner"),1)
+ abort=msgBox.exec_()
+ if abort == 1 : return (0, "")
+ return (1,fn)
+
+ #-----------------#
+ def saveRunMAP(self):
+ #-----------------#
+ extension=".input"
+ if not(self.jdc.isValid()):
+ QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+ tr("Un JdC valide est necessaire pour creer un .input")
+ )
+ return
+ try :
+ composant=self.jdc.etapes[0].nom.lower()[0:-5]
+ except :
+ QMessageBox.critical( self, tr( "Sauvegarde de l'input impossible "),
+ tr("Choix du composant obligatoire")
+ )
+ return
+ if hasattr(self.maConfiguration, "savedir"): path=self.maConfiguration.savedir
+ else : path='C:/'
+
+ monNomFichier=""
+ if self.fichier is not None and self.fichier != "" :
+ maBase=str(QFileInfo(self.fichier).baseName())+".input"
+ monPath=str(QFileInfo(self.fichier).absolutePath())
+ monNomFichier=os.path.join(monPath,maBase)
+ elif hasattr(self,'monNomFichierInput'):
+ monNomFichier=self.monNomFichierInput
+
+
+ monDialog=QFileDialog(self.appliEficas)
+ monDialog.setDirectory (path)
+ monDialog.setWindowTitle ("Save")
+
+ for c in monDialog.children():
+ if isinstance(c,QDialogButtonBox):
+ for b in c.children():
+ if isinstance(b,QPushButton):
+ avant=b.text()
+ if avant=="&Open": b.setText("Save")
+ mesFiltres= "input Map (*.input);;All Files (*)"
+ monDialog.setNameFilters(mesFiltres)
+ if monNomFichier!="" : monDialog.selectFile(monNomFichier)
+ BOk=monDialog.exec_()
+ if BOk==0: return
+ fn=str(monDialog.selectedFiles()[0])
+ if fn == "" or fn == None : return
+ if not fn.endswith(".input"):
+ fn += ".input"
+ self.monNomFichierInput=fn
+
+ if not hasattr(self, 'fichierMapInput') or not self.fichierMapInput or not os.path.exists(self.fichierMapInput):
+ self.fichierMapInput = self.__generateTempFilename(prefix = "map_run", suffix = ".map")
+ texte=self.getTextJDC("MAP")
+ self.writeFile( self.fichierMapInput, txt = texte)
+
+ cmd = ("map gen -t dat -n " + composant + " -i " + self.fichierMapInput + " -o " + fn)
+ p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
+ (output, err) = p.communicate()
+
+
+ #-----------------#
+ def saveRunPSEN(self):
+ #-----------------#
+ #print ("saveRunPSEN")
+ self.saveFile()
+
+
+
#-----------------------------------------#
- def saveFile(self, path = None, saveas= 0):
+ def handleAjoutGroup(self,listeGroup):
#-----------------------------------------#
+ try :
+ #if 1:
+ from ajoutGroupe import handleAjoutGroupFiltre
+ #print listeGroup
+ handleAjoutGroupFiltre(self,listeGroup)
+ #print "apres handleAjoutGroupFiltre"
+ except :
+ #else :
+ pass
+
+
+ #-----------------------------------------------------------------#
+ def saveCompleteFile(self, path = None, saveas= 0,formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
+ extension='.casR'
+ fn = self.fichierComplet
+ #saveas=True # Pour forcer le nom
+ self.generator=self.maConfiguration.mesGenerators.plugins[self.formatFichierOut]()
+ if self.fichierComplet is None or saveas:
+ if path is None: path=self.maConfiguration.savedir
+ bOK, fn=self.determineNomFichier(path,extension)
+ if bOK == 0 : return (0, None)
+ if fn == None : return (0, None)
+ if fn== '' : return (0, None)
+
+ ulfile = os.path.abspath(fn)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ fn = QDir.toNativeSeparators(fn)
+
+ self.fichierComplet = os.path.splitext(fn)[0]+extension
+
+ if hasattr(self.generator, "writeComplet"):
+ self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+
+ if self.salome : self.appliEficas.addJdcInSalome( self.fichierComplet)
+
+ self.modified = 0
+ nouveauTitre=self.titre+" "+str(os.path.basename(self.fichierComplet))
+ self.appliEficas.setWindowTitle(nouveauTitre)
+ return (1, self.fichierComplet)
+
+ #-----------------------------------------------------------------#
+ def saveFile(self, path = None, saveas= 0,formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
"""
Public slot to save the text to a file.
-
+
@param path directory to save the file in (string or QString)
@return tuple of two values (boolean, string) giving a success indicator and
the name of the saved file
- """
-
+ """
+
+ self.modified=1
if not self.modified and not saveas:
return (0, None) # do nothing if text wasn't changed
-
+
+ if self.appliEficas.code in DictExtensions :
+ extension=DictExtensions[self.appliEficas.code]
+ else :
+ extension='.comm'
+
newName = None
+ fn = self.fichier
if self.fichier is None or saveas:
- if path is None:
- #PN --> modifier selon les prefs
- path="/tmp"
- selectedFilter = QString('')
- fn = QFileDialog.getSaveFileName( self,
- self.trUtf8("sauvegarde"), path,
- self.trUtf8("JDC (*.comm);;" "All Files (*)"),None,
- QFileDialog.DontConfirmOverwrite)
- if fn.isNull(): return (0, None)
+ if path is None: path=self.maConfiguration.savedir
+ bOK, fn=self.determineNomFichier(path,extension)
+ if bOK == 0 : return (0, None)
+ if fn == None : return (0, None)
+ if fn== '' : return (0, None)
- ext = QFileInfo(fn).suffix()
- if ext.isEmpty(): fn.append(".comm")
+ ulfile = os.path.abspath(fn)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+ fn = QDir.toNativeSeparators(fn)
+ newName = fn
- if QFileInfo(fn).exists():
- abort = QMessageBox.warning(self,
- self.trUtf8("Sauvegarde du Fichier"),
- self.trUtf8("Le fichier <b>%1</b> existe deja.").arg(fn),
- self.trUtf8("&Ecraser"),
- self.trUtf8("&Abandonner"))
- if abort == 1 : return (0, None)
- fn = unicode(QDir.convertSeparators(fn))
- newName = fn
+ if not (self.writeFile(fn,formatLigne=formatLigne)): return (0, None)
+ self.fichier = fn
+ self.modified = False
+ if self.fileInfo is None or saveas:
+ self.fileInfo = QFileInfo(self.fichier)
+ self.fileInfo.setCaching(0)
+ self.lastModified = self.fileInfo.lastModified()
+ if newName is not None:
+ self.appliEficas.addToRecentList(newName)
+ self.tree.racine.item.getObject().nom=os.path.basename(newName)
+ self.tree.racine.updateNodeLabel()
- else:
- fn = self.fichier
-
- if self.writeFile(fn):
- self.fichier = fn
- self.modified = False
- if self.fileInfo is None or saveas:
- self.fileInfo = QFileInfo(self.fichier)
- self.fileInfo.setCaching(0)
- self.lastModified = self.fileInfo.lastModified()
- if newName is not None:
- self.appliEficas.addToRecentList(newName)
- self.tree.racine.item.getObject().nom=os.path.basename(newName)
- self.tree.racine.update_node_label()
-# if self.code == "OPENTURNS" :
-# self.writeFilesOpenturns(fn)
-# if self.salome :
-# self.QWParent.appli.addJdcInSalome( self.fichier)
-# if self.code == 'ASTER':
-# self.QWParent.appli.createOrUpdateMesh(self)
-# #PN ; TODO
-#
- return (1, self.fichier)
- else:
- return (0, None)
+
+ if self.jdc.cata.modeleMetier:self.jdc.toXml(self.fichier)
+ if self.jdc.cata.modeleMetier and self.jdc.isValid():
+ if self.generator != self.XMLgenerator :
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fn)
+
+ if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
+ #if hasattr(self.generator, "writeDefault"):
+ self.generator.writeDefault(fn)
+ elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
+ msgBox = QMessageBox(None)
+ msgBox.setWindowTitle(tr("Fichier .cas invalide / incomplet"))
+ msgBox.setText(tr("Le fichier .cas est invalide / incomplet"))
+ msgBox.addButton(tr("&Sauvegarder"),1)
+ msgBox.addButton(tr("&Quitter sans sauvegarder"),0)
+ msgBox.addButton(tr("&Annuler"),2)
+ res=msgBox.exec_()
+ if res == 0 :
+ self.generator.writeDefault(fn)
+ return (1, self.fichier)
+ if res == 2 : return (0, None)
+ if self.appliEficas.salome : self.appliEficas.close()
+ else : sys.exit(1)
+
+ if self.salome :
+ self.appliEficas.addJdcInSalome( self.fichier)
+ self.modified = 0
+ nouveauTitre=self.titre+" "+str(os.path.basename(self.fichier))
+ self.appliEficas.setWindowTitle(nouveauTitre)
+
+ return (1, self.fichier)
#
- #---------------------------------#
- def saveFileAs(self, path = None):
- #---------------------------------#
+
+ #----------------------------------------------#
+ def sauveLigneFile(self):
+ #----------------------------------------------#
+ self.modified=1
+ return self.saveFile(formatLigne="Ligne")
+
+
+ #----------------------------------------------#
+ def saveFileAs(self, path = None,fileName=None):
+ #----------------------------------------------#
"""
Public slot to save a file with a new name.
-
+
@param path directory to save the file in (string or QString)
@return tuple of two values (boolean, string) giving a success indicator and
the name of the saved file
"""
- return self.saveFile(path,1)
+ if fileName != None :
+ self.fichier = fileName
+ return self.saveFile()
+ return self.saveFile(path,1,"beautifie")
+
+
-
-
#---------------------------------------------#
- def get_file(self,unite=None,fic_origine = ''):
+ def getFile(self,unite=None,fic_origine = ''):
#---------------------------------------------#
# appele par I_JDC
ulfile = None
jdcText = ""
-
+
titre = ""
-
+
if unite :
- titre = "Choix unite %d " %unite
- texte = "Le fichier %s contient une commande INCLUDE \n" % fic_origine
- texte = texte+'Donnez le nom du fichier correspondant\n à l unité logique %d' % unite
- labeltexte = 'Fichier pour unite %d :' % unite
+ titre = tr("Choix unite %d ", unite)
+ texte = tr("Le fichier %s contient une commande INCLUDE \n", str(fic_origine)) +"\n"
+ texte = texte+ tr("Donnez le nom du fichier correspondant a l unite logique ") + repr(unite)
+ labeltexte = tr('Fichier pour unite ') + repr( unite)
else:
- titre = "Choix d'un fichier de poursuite"
- texte = "Le fichier %s contient une commande %s\n" %(fic_origine,'POURSUITE')
- texte = texte+'Donnez le nom du fichier dont vous \n voulez faire une poursuite'
-
+ titre = tr("Choix d'un fichier de poursuite")
+ texte = tr("Le fichier %s contient une commande POURSUITE\n", fic_origine)
+ texte = texte+tr('Donnez le nom du fichier dont vous \n voulez faire une poursuite')
+
QMessageBox.information( self, titre,texte)
- #PN --> les prefs
- fn = QFileDialog.getOpenFileName( self, titre)
-
- if fn.isNull():
- # ce retour est impose par le get_file d'I_JDC
- return None," "
-
- ulfile = os.path.abspath(unicode(fn))
- # On utilise le convertisseur défini par format_fichier
- source=self.get_source(ulfile)
+ fn = QFileDialog.getOpenFileName(self.appliEficas,
+ titre,
+ self.appliEficas.maConfiguration.savedir)
+
+ # ce retour est impose par le getFile d'I_JDC
+ if fn== '' : return None," "
+ if not fn : return (0, " ")
+ fn=fn[0]
+
+ ulfile = os.path.abspath(fn)
+ self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0]
+
+ # On utilise le convertisseur defini par formatFichierIn
+ source=self.getSource(ulfile)
if source:
- # On a réussi à convertir le fichier self.ulfile
+ # On a reussia convertir le fichier self.ulfile
jdcText = source
else:
- # Une erreur a été rencontrée
+ # Une erreur a ete rencontree
jdcText = ''
return ulfile, jdcText
-
-if __name__=='__main__':
- if hasattr(prefs,'encoding'):
- # Hack pour changer le codage par defaut des strings
- import sys
- reload(sys)
- sys.setdefaultencoding(prefs.encoding)
- del sys.setdefaultencoding
- # Fin hack
-
-# #CS_pbruno note: fait implicitement des trucs ces imports (grr)
-# import styles
-# import import_code
-# import session
-#
-# # Analyse des arguments de la ligne de commande
-# options=session.parse(sys.argv)
-# code=options.code
-#
- app = QApplication(sys.argv)
- mw = JDCEditor('azAster.comm')
- app.setMainWidget(mw)
- app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
- mw.show()
-
- res = app.exec_loop()
- sys.exit(res)
+
+ #-----------------------------------#
+ def updateJdc(self, etape,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ CONTEXT.setCurrentStep(etape)
+ etape.buildIncludeEtape(texte)
+ if not (etape.text_included_converted) :
+ QMessageBox.information( self,
+ tr("Impossible d importer le texte"),
+ etape.text_included_error)
+
+ self.tree.racine.buildChildren()
+
+ #-----------------------------------#
+ def updateJdcEtape(self, itemApres,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ monItem=itemApres
+ etape=monItem.item.object
+
+ CONTEXT.setCurrentStep(etape)
+ try :
+ ok=etape.buildIncludeEtape(texte)
+ except :
+ ok=0
+ if not ok :
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
+ self.tree.racine.buildChildren()
+ return ok
+
+ #-------------------------------------------#
+ def updateJdcAfterEtape(self, etape,texte):
+ #--------------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ CONTEXT.setCurrentStep(etape)
+ try :
+ ok=etape.buildIncludeEtape(texte,doitEtreValide=0)
+ except :
+ ok=0
+ if not ok :
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
+ self.tree.racine.buildChildren()
+ return ok
+
+
+ #-------------------------------------#
+ def deleteEtape(self,etape):
+ #-------------------------------------#
+ # dans le JDC
+ self.jdc.suppEntite(etape)
+
+
+ #-----------------------------------------
+ def initSplitterSizes(self, nbWidget=3):
+ #-----------------------------------------
+ #print ("je passe ds initSplitterSizes", nbWidget)
+
+ if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes3=[1,1550,300]
+ #elif self.code in [ 'MAP'] : self.splitterSizes3=[700,300]
+ else : self.splitterSizes3=[150,1000,300]
+
+ if self.code in [ 'Adao', 'ADAO','MAP' ] : self.splitterSizes2=[5,1500]
+ else : self.splitterSizes2=[300,1000]
+
+
+ #-----------------------------------------
+ def restoreSplitterSizes(self,nbWidget=3):
+ #----------------------------------------
+
+ #traceback.print_stack()
+ #print ("je passe ds restoreSplitterSizes")
+ if not(hasattr(self,'splitter')) : return
+ if nbWidget==2 : newSizes=self.splitterSizes2
+ if nbWidget==3 : newSizes=self.splitterSizes3
+ #self.inhibeSplitter = 1
+ #print (newSizes)
+ self.splitter.setSizes(newSizes)
+ #self.inhibeSplitter = 0
+ QApplication.processEvents()
+ # seule la fentetre du milieu est necessaire
+ self.splitter.widget(1).resizeEvent=self.saveSplitterSizes
+
+ #-----------------------------------------
+ def saveSplitterSizes(self,event):
+ #-----------------------------------------
+ #print ("je passe ds saveSplitterSizes")
+ if self.inhibeSplitter : return
+ if self.widgetOptionnel == None : self.splitterSizes2 = self.splitter.sizes()[0:2]
+ else : self.splitterSizes3 = self.splitter.sizes()[0:3]
+
+ #------------------------
+ def fermeOptionnel(self):
+ #------------------------
+ if self.widgetOptionnel == None : return
+
+ self.inhibeSplitter=1
+ self.widgetOptionnel.setParent(None)
+ self.widgetOptionnel.close()
+ self.widgetOptionnel.deleteLater()
+ self.widgetOptionnel=None
+ self.inhibeSplitter=0
+ self.restoreSplitterSizes(2)
+
+ #------------------------
+ def ajoutOptionnel(self):
+ #------------------------
+ #if len(self.splitterSizes) == 2 : self.splitterSizes.append(self.oldSizeWidgetOptionnel)
+ #else : self.splitterSizes[2] = self.oldSizeWidgetOptionnel # ceinture pour les close bizarres
+ #self.splitterSizes[1] = self.splitterSizes[1] - self.splitterSizes[2]
+
+ self.restoreSplitterSizes(3)
+
+
+ #------------------------
+ def fermeArbre(self):
+ #------------------------
+ #print (self.widgetTree)
+ self.oldWidgetTree=self.widgetTree
+ self.widgetTree.hide()
+ #self.widgetTree=None
+
+ #------------------------
+ def ouvreArbre(self):
+ #------------------------
+ #print ('je passe la')
+ #print (self.widgetTree)
+ #self.widgetTree=self.oldWidgetTree
+ self.widgetTree.show()
+ #self.restoreSplitterSizes(3)
+
+ #-----------------------
+ def getEtapeCourante(self) :
+ #-----------------------
+ if len(self.tree.selectedItems()) != 1 : return None
+ etape=self.tree.selectedItems()[0].item.object.getEtape()
+ return etape
+ #-----------------------------
+ def getTreeIndex(self,noeud):
+ #----------------------------
+ indexNoeud=-1
+ if noeud in noeud.treeParent.children :
+ indexNoeud=noeud.treeParent.children.index(noeud)
+ else :
+ if hasattr(noeud,'vraiParent') :
+ noeudVrai = noeud
+ noeudVraiParent = noeud.vraiParent
+ while noeudVraiParent != noeud.treeParent and hasattr(noeudVraiParent,'vraiParent') :
+ noeudVrai = noeudVraiParent
+ noeudVraiParent = noeudVraiParent.vraiParent
+ pass
+ if noeudVraiParent == noeud.treeParent :
+ indexNoeud=noeud.treeParent.children.index(noeudVrai)
+ pass
+ pass
+ pass
+ return indexNoeud
+
+ #-------------------# Pour execution avec output et error dans le bash
+ def runPSEN(self):
+ #-------------------#
+
+ #if self.modified or self.fichier==None : self.saveFile()
+ self.saveFile()
+
+ #lancement avec le .bat
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_Eficas','PSEN'))
+ WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py')
+ import subprocess
+ p = subprocess.Popen(['python',WrapperFilePath])
+ (out,err)=p.communicate()
+ print (out)
+ print (err)
+
+ #-------------------# Pour execution avec output et error dans le bash
+ def runPSEN_N1(self):
+ #-------------------#
+
+
+ self.saveFile()
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+ sys.path.append(path1)
+
+ if not(self.jdc.isValid()):
+ QMessageBox.information( self, tr( "Unvalid JDC"),tr("incorrect keywords will be ignored"))
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+
+ ###to delete
+ #fileDico = r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+ fileDico = os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py'
+ f = open( str(fileDico), 'w')
+ f.write("Dico =" + str(dico) )
+ f.close()
+ ###
+
+
+ print ('in runPSEN_N1', dico)
+ print (dico)
+ from Run import run
+ run(dico)
+ #res,txt_exception=run(dico)
+ #if res : QMessageBox.information( self, tr("fin de script run"), txt_exception)
+ #else : QMessageBox.critical( self, tr("Erreur fatale script run"), txt_exception)
+
+ #-------------------# Pour execution avec output et error dans le bash
+ def process_N1(self):
+ #-------------------#
+
+ path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','ProcessOutputs_Eficas','TreatOutputs'))
+ sys.path.append(path1)
+
+
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.getDico() #generator.Dico
+
+
+ for k in dico['CONTINGENCY_PROCESSING']:
+ #print (k)
+ if k[0:19] == 'Component_List_For_' or k[0:21] =='Contingency_List_For_' :
+ newK=k.replace('__',' ')
+ l="'"+str(newK)+"'"
+ dico['CONTINGENCY_PROCESSING'][l]=dico['CONTINGENCY_PROCESSING'][k]
+ del dico['CONTINGENCY_PROCESSING'][k]
+
+ ###to delete
+ fileDico = os.path.join(path1, 'dicoN1_process.py')
+ f = open( str(fileDico), 'w')
+ f.write("Dico =" + str(dico) )
+ f.close()
+ ###
+ return dico
+
+ #return self.getDico()
+
+ #-------------------# Pour execution avec output et error dans le bash
+ def process_VP(self):
+ #-------------------#
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.getDico() #generator.Dico
+ return dico
+
+if __name__ == "__main__":
+ print ('in main')