From: pascale.noyret Date: Tue, 4 Jun 2019 14:28:16 +0000 (+0200) Subject: appliEficas partout X-Git-Tag: avantMenage~4 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=bb373d392049f3ec44759e7195062f06cf4fddde;p=tools%2Feficas.git appliEficas partout --- diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 7d419ca9..dd7d41f9 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -143,9 +143,9 @@ class Delegate(object): class ObjectTreeItem(TreeItem,Delegate): - def __init__(self, appli, labeltext, object, setFunction=None): + def __init__(self, appliEficas, labeltext, object, setFunction=None): self.labeltext = labeltext - self.appli = appli + self.appliEficas = appliEficas # L'objet delegue est stocke dans l'attribut object # L'objet associe a l'item est stocke dans l'attribut _object # Il peut etre obtenu par appel a la methode getObject @@ -180,10 +180,10 @@ class ObjectTreeItem(TreeItem,Delegate): Cree un item copie de self """ object = self._object.copy() - appli = copy(self.appli) + appliEficas = copy(self.appliEficas) labeltext = copy(self.labeltext) fonction = deepcopy(self.setFunction) - item = makeObjecttreeitem(appli,labeltext,object,fonction) + item = makeObjecttreeitem(appliEficas,labeltext,object,fonction) return item def isActif(self): @@ -420,7 +420,7 @@ class ObjectTreeItem(TreeItem,Delegate): except AttributeError: continue item = makeObjecttreeitem( - self.appli, + self.appliEficas, str(key) + " =", value, lambda value, key=key, object=self.object: @@ -434,12 +434,12 @@ class ObjectTreeItem(TreeItem,Delegate): (ex: macros POURSUITE et INCLUDE de Code_Aster), 0 SINON """ # return self.object.definition.fichier_ini - def makeObjecttreeitem(self,appli,labeltext, object, setFunction=None): + def makeObjecttreeitem(self,appliEficas,labeltext, object, setFunction=None): """ Cette methode, globale pour les objets de type item, permet de construire et de retourner un objet de type item associe a l'object passe en argument. """ - return makeObjecttreeitem(appli,labeltext,object,setFunction) + return makeObjecttreeitem(appliEficas,labeltext,object,setFunction) #def __del__(self): # print "__del__",self @@ -478,7 +478,7 @@ class SequenceTreeItem(ObjectTreeItem): def addItem(self,obj,pos): self._object.insert(pos,obj) - item = self.makeObjecttreeitem(self.appli, obj.nom + ":", obj) + item = self.makeObjecttreeitem(self.appliEficas, obj.nom + ":", obj) return item def suppItem(self,item): @@ -486,7 +486,7 @@ class SequenceTreeItem(ObjectTreeItem): self._object.remove(item.getObject()) # la liste peut etre retournee vide ! message = "Mot-clef " + item.getObject().nom + " supprime" - self.appli.afficheInfos(message) + self.appliEficas.afficheInfos(message) return 1 except: return 0 @@ -508,7 +508,7 @@ class SequenceTreeItem(ObjectTreeItem): # nouvel objet : on cree un nouvel item def setFunction(value, object=obj): object=value - it = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction) + it = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction) self.sublist.append(it) if old_obj is None and obj is None:break if old_obj is obj: self.sublist.append(item) diff --git a/Editeur/TroisDPal.py b/Editeur/TroisDPal.py index 6d42efa0..5fc0d085 100644 --- a/Editeur/TroisDPal.py +++ b/Editeur/TroisDPal.py @@ -32,9 +32,9 @@ from Extensions.i18n import tr class TroisDPilote(object): - def __init__(self,node,appli): + def __init__(self,node,appliEficas): self.node=node - self.appli=appli + self.appliEficas=appliEficas def envoievisu(self): """ @@ -51,6 +51,6 @@ class TroisDPilote(object): return "" from Extensions.param2 import originalMath originalMath.toOriginal() - self.appli.envoievisu(texte) + self.appliEficas.envoievisu(texte) originalMath.toSurcharge() diff --git a/Editeur/cata2Xml.py b/Editeur/cata2Xml.py deleted file mode 100755 index e075d18d..00000000 --- a/Editeur/cata2Xml.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2017 EDF R&D -# -# 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. -# -# 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 object -except : - pass -import sys,os -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../InterfaceQT4')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../UiQT4')) -from Extensions.i18n import tr -from string import split,strip,lowercase,uppercase -import re,string - -import xml.etree.ElementTree as ET -from xml.dom import minidom - -from PyQt4.QtGui import * - -def prettify(elem): - """Return a pretty-printed XML string for the Element. - """ - rough_string = ET.tostring(elem, 'iso-8859-1') - reparsed = minidom.parseString(rough_string) - return reparsed.toprettyxml(indent=" ") - - -class CatalogueXML(object): - def __init__(self,cata,cataName): - self.fichier="/tmp/XML/"+cataName+".xml" - self.cata=cata - self.first=ET.Element('cata') - comment=ET.Comment("catalogue "+str(cataName)) - self.first.append(comment) - self.reglesUtilisees=[] - self.validatorsUtilises=[] - self.constrListTxtCmd() - self.ecrire_fichier() - - - def ecrire_fichier(self): - try : - import codecs - f = codecs.open(self.fichier, "w", "ISO-8859-1") - #print prettify(self.first) - f.write(prettify(self.first)) - f.close() - except : - print(("Impossible d'ecrire le fichier : "+ str(self.fichier))) - - def constrListTxtCmd(self): - mesCommandes=self.cata.JdC.commandes - self.commandes=ET.SubElement(self.first,'commandes') - for maCommande in mesCommandes: - maCommande.enregistreXMLStructure(self.commandes,self) - - -if __name__ == "__main__" : - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py" - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - code="Aster" - version=None - - from Editeur import session - options=session.parse(sys.argv) - if options.code!= None : code=options.code - if options.cata!= None : monCata=options.cata - if options.ssCode!= None : ssCode=options.ssCode - - sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code)) - - from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm - Eficas=appliEficasSSIhm(code=code) - parent=QWParentSSIhm(code,Eficas,version) - - import readercata - monreadercata = readercata.READERCATA( parent, parent ) - Eficas.readercata=monreadercata - monCata=monreadercata.cata[0] - - monCataXML=CatalogueXML(monCata,code) - - - - diff --git a/Editeur/chercheBlocInto.py b/Editeur/chercheBlocInto.py deleted file mode 100755 index 624020d6..00000000 --- a/Editeur/chercheBlocInto.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2017 EDF R&D -# -# 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. -# -# 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 -# - -import sys,os -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../InterfaceQT4')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../UiQT4')) -from Extensions.i18n import tr -from string import split,strip,lowercase,uppercase -import re,string -import Accas - - -class ChercheInto: - def __init__(self,cata,cataName): - self.cata=cata - self.dictInto={} - mesCommandes=self.cata.JdC.commandes - for maCommande in mesCommandes: - self.construitListeInto(maCommande) - - - def construitListeInto(self,e): - if isinstance(e,Accas.A_BLOC.BLOC) : - print (e.condition) - for nomFils, fils in e.entites.items(): - self.construitListeInto(fils) - - -if __name__ == "__main__" : - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py" - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - code="Aster" - version=None - - from Editeur import session - options=session.parse(sys.argv) - if options.code!= None : code=options.code - if options.cata!= None : monCata=options.cata - if options.ssCode!= None : ssCode=options.ssCode - - sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code)) - - from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm - Eficas=appliEficasSSIhm(code=code) - parent=QWParentSSIhm(code,Eficas,version) - - import readercata - monreadercata = readercata.READERCATA( parent, parent ) - Eficas.readercata=monreadercata - monCata=monreadercata.cata[0] - - monConstruitInto=ChercheInto(monCata,code) - - - - diff --git a/Editeur/chercheNbElem.py b/Editeur/chercheNbElem.py deleted file mode 100755 index f8cc0987..00000000 --- a/Editeur/chercheNbElem.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2017 EDF R&D -# -# 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. -# -# 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 -# - -import sys,os -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../InterfaceQT4')) -sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'../UiQT4')) -from Extensions.i18n import tr -from string import split,strip,lowercase,uppercase -import re,string -import Accas - - -class ChercheInto: - def __init__(self,cata,cataName): - self.cata=cata - self.dictInto={} - mesCommandes=self.cata.JdC.commandes - for maCommande in mesCommandes: - print (maCommande.nom) - print (maCommande.entites ) - print (len(maCommande.entites) ) - - -# def construitListeInto(self,e): -# if isinstance(e,Accas.A_BLOC.BLOC) : -# print (e.condition. -# for nomFils, fils in e.entites.items(): -# self.construitListeInto(fils) - - -if __name__ == "__main__" : - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - #monCata="/local/noyret/Install_Eficas/Aster/Cata/cataSTA11/cata.py" - #monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - monCata="/local/noyret/Install_Eficas/MAP/mapcata.py" - code="MAP" - version=None - - from Editeur import session - options=session.parse(sys.argv) - if options.code!= None : code=options.code - if options.cata!= None : monCata=options.cata - if options.ssCode!= None : ssCode=options.ssCode - - sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)),'..',code)) - - from InterfaceQT4.ssIhm import QWParentSSIhm, appliEficasSSIhm - Eficas=appliEficasSSIhm(code=code) - parent=QWParentSSIhm(code,Eficas,version) - - import readercata - monreadercata = readercata.READERCATA( parent, parent ) - Eficas.readercata=monreadercata - monCata=monreadercata.cata[0] - - monConstruitInto=ChercheInto(monCata,code) - - - - diff --git a/Editeur/comploader.py b/Editeur/comploader.py index 40ba093f..5f240ae0 100644 --- a/Editeur/comploader.py +++ b/Editeur/comploader.py @@ -27,7 +27,7 @@ le dictionnaire composants. - gettreeitem(object) -> type d'item : fonction qui retourne un type d'item correspondant au type de l'objet noyau fourni. - - makeObjecttreeitem(appli,labeltext, object, setFunction=None) -> item : fonction qui retourne un item + - makeObjecttreeitem(appliEficas,labeltext, object, setFunction=None) -> item : fonction qui retourne un item correspondant a l'objet noyau fourni. """ # import generaux @@ -85,11 +85,11 @@ def gettreeitem(object): itemtype=composants[None] return itemtype -def makeObjecttreeitem(appli,labeltext, object, setFunction=None): +def makeObjecttreeitem(appliEficas,labeltext, object, setFunction=None): """ Cette fonction permet de construire et de retourner un objet de type item associe a l'object passe en argument. """ c = gettreeitem(object) - return c(appli,labeltext, object, setFunction) + return c(appliEficas,labeltext, object, setFunction) diff --git a/Editeur/session.py b/Editeur/session.py index ebbf40a9..6f7733c8 100644 --- a/Editeur/session.py +++ b/Editeur/session.py @@ -310,7 +310,7 @@ def parse(args): #printDEnv() return options -def getUnit(d_study,appli): +def getUnit(d_study,appliEficas): """ Fonction : construit et retourne un dictionnaire contenant les informations sur les fichiers poursuite et includes sous la forme adaptee @@ -321,22 +321,22 @@ def getUnit(d_study,appli): ...] d_study : dictionnaire de l'etude - appli : objet application EFICAS (permet d'acceder aux services comme getSource) + appliEficas : objet application EFICAS (permet d'acceder aux services comme getSource) """ - return getDunit(d_study,appli) + return getDunit(d_study,appliEficas) -def getDunit(d_unit,appli): +def getDunit(d_unit,appliEficas): d={} if 'pours' in d_unit: # on a une poursuite comm=d_unit["pours"]["comm"] - g=getDunit(d_unit["pours"],appli) - text=appli.getSource(comm) + g=getDunit(d_unit["pours"],appliEficas) + text=appliEficas.getSource(comm) d[None]=comm,text,g for k,v in list(d_unit.items()): if k in (u"pours","comm"): continue - text=appli.getSource(v) + text=appliEficas.getSource(v) d[k]=v,text,d return d diff --git a/Editeur/tout.sh b/Editeur/tout.sh deleted file mode 100644 index 885b50e4..00000000 --- a/Editeur/tout.sh +++ /dev/null @@ -1,35 +0,0 @@ -echo "Aster" -./cata2Xml.py -k Aster - -echo "Adao" -read a -./cata2Xml.py -k Adao - -echo "Carmel3D" -read a -./cata2Xml.py -k Carmel3D - -echo "CarmelCND" -read a -./cata2Xml.py -k CarmelCND - -echo "Openturns_Wrapper" -read a -./cata2Xml.py -k Openturns_Wrapper - -echo "Openturns_Study" -read a -./cata2Xml.py -k Openturns_Study - -echo "MAP" -read a -./cata2Xml.py -k MAP - -echo "MT" -read a -./cata2Xml.py -k MT - -echo "SPECA" -read a -./cata2Xml.py -k SPECA - diff --git a/Editeur/toutBloc.sh b/Editeur/toutBloc.sh deleted file mode 100644 index c77c2fb2..00000000 --- a/Editeur/toutBloc.sh +++ /dev/null @@ -1,35 +0,0 @@ -echo "Aster" -./chercheBlocInto.py -k Aster - -echo "Adao" -read a -./chercheBlocInto.py -k Adao - -echo "Carmel3D" -read a -./chercheBlocInto.py -k Carmel3D - -echo "CarmelCND" -read a -./chercheBlocInto.py -k CarmelCND - -echo "Openturns_Wrapper" -read a -./chercheBlocInto.py -k Openturns_Wrapper - -echo "Openturns_Study" -read a -./chercheBlocInto.py -k Openturns_Study - -echo "MAP" -read a -./chercheBlocInto.py -k MAP - -echo "MT" -read a -./chercheBlocInto.py -k MT - -echo "SPECA" -read a -./chercheBlocInto.py -k SPECA - diff --git a/Efi2Xsd/MCAccasXsd.py b/Efi2Xsd/MCAccasXsd.py index 5c6737ab..d346e31d 100755 --- a/Efi2Xsd/MCAccasXsd.py +++ b/Efi2Xsd/MCAccasXsd.py @@ -23,157 +23,99 @@ from Accas import A_ASSD class X_OBJECT: # ------------- - def delObjPyxb(self): + def delObjPyxb(self, debug = False): if not self.cata.modeleMetier : return if self.nom == 'Consigne' : return None - #print ('----------- delObjPyxb', self.nom) trouve = False listeArg=[] - #print self.perePyxb.nom - #print self.perePyxb.objPyxb.orderedContent() - #print (dir(self.perePyxb.objPyxb)) - for i in self.perePyxb.objPyxb.orderedContent(): - if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue - #print ('j ajoute', i._Content__value) - listeArg.append(i._Content__value) - if not trouve : print ('objet pas trouve') - grandPere=self.perePyxb.perePyxb - ancienObjPerePyxb=self.perePyxb.objPyxb - - #print (listeArg) - nvlObjPerePyxb=self.perePyxb.maClasseModeleMetier(*listeArg) - #print (nvlObjPerePyxb) - #print (nvlObjPerePyxb.orderedContent()) - self.perePyxb.objPyxb=nvlObjPerePyxb - self.perePyxb.objPyxb.objAccas=ancienObjPerePyxb.objAccas - - #print (self.nom, ' a pour gp ', grandPere) - if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb) - #print ('----------- fin delObjPyxb', self.nom) + if debug : print self.perePyxb.objPyxb.orderedContent() + if debug : print (map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())) - def addObjPyxbV0(self,indiceDansLeContenu): - if not self.cata.modeleMetier : return - #print ('**********************************************') - #print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDansLeContenu) - # adherence Accas sur le parent - parent=self.parent - while (parent.isBLOC()): parent=parent.parent - self.perePyxb=parent - grandPere=self.perePyxb.perePyxb - ancienObjPerePyxb=self.perePyxb.objPyxb - #print ('dans le perePyxb', self.perePyxb.nom) - #print ('j ai pour orderedContent', self.objPyxb.orderedContent()) - self.objPyxb.objAccas=self + elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) + if debug : print ('element moi = ', elt, 'id de moi = ', id(self.objPyxb)) + if (elt.elementDeclaration.isPlural()): + if debug : print ('je suis Plural') + monIndexInOrderedContent=0 + for c in self.perePyxb.objPyxb.orderedContent(): + if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(self.objPyxb)): monIndexInOrderedContent += 1 + + listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') + if len(listeObjetsAccas) == 1 : monIndex=0 + else : monIndex=listeObjetsAccas.index(self) + + listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) + listeObjetsPyxb.pop(monIndex) + monIndexInOrderedContent += monIndex + self.perePyxb.objPyxb.orderedContent().pop(monIndexInOrderedContent) + else : + newOrderedContent = [] + for i in self.perePyxb.objPyxb.orderedContent(): + if id(self.objPyxb) == id(i._Content__value) : trouve = True ;continue + newOrderedContent.append(i) + if not trouve : print ('elt a supprimer ', self.nom, 'non trouve') + for i in xrange(len(newOrderedContent)): + self.perePyxb.objPyxb.orderedContent()[i]=newOrderedContent[i] + self.perePyxb.objPyxb.orderedContent().pop(len(newOrderedContent)) + + setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,None) + if debug : print (map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())) + - listeArg=[] - indice=0 - # a tester - # a affiner si on ajoute en fin - #print (indiceDansLeContenu) - #print (self.perePyxb.objPyxb.orderedContent()) - for i in self.perePyxb.objPyxb.orderedContent(): - if indice==indiceDansLeContenu : listeArg.append(self.objPyxb) - else : listeArg.append(i._Content__value) - indice=indice+1 - #print ('avec', listeArg) - if indiceDansLeContenu == len(self.perePyxb.objPyxb.orderedContent()): - listeArg.append(self.objPyxb) - - #print ('avec', listeArg) - - nvlObjPerePyxb=self.perePyxb.maClasseModeleMetier(*listeArg) - self.perePyxb.objPyxb=nvlObjPerePyxb - self.perePyxb.objPyxb.objAccas=ancienObjPerePyxb.objAccas - #print (self.nom, ' a pour gp ', grandPere) - if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb) - - def addObjPyxb(self,indiceDansLeContenu): + + def addObjPyxb(self,indiceDsLeContenu): if not self.cata.modeleMetier : return - #print ('**********************************************') - #print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDansLeContenu) + print ('_____________ addObjPyxb ds X_OBJECT', self.nom, indiceDsLeContenu) # adherence Accas sur le parent parent=self.parent - while (parent.isBLOC()): parent=parent.parent + while (parent.isBLOC()): + if parent != self.parent : indiceDsLeContenu += parent.rangDsPyxb() + parent=parent.parent self.perePyxb=parent - #EF: grandPere et ancienObjPerePyxb sont devenus inutiles - # grandPere=self.perePyxb.perePyxb - # ancienObjPerePyxb=self.perePyxb.objPyxb - # print ('dans le perePyxb', self.perePyxb.nom) - # print ('j ai pour orderedContent', self.objPyxb.orderedContent()) - self.objPyxb.objAccas=self - - # listeArg=[] - # indice=0 - # # a tester - # # a affiner si on ajoute en fin - # #print (indiceDansLeContenu) - # #print (self.perePyxb.objPyxb.orderedContent()) - # for i in self.perePyxb.objPyxb.orderedContent(): - # if indice==indiceDansLeContenu : listeArg.append(self.objPyxb) - # else : listeArg.append(i._Content__value) - # indice=indice+1 - # #print ('avec', listeArg) - # if indiceDansLeContenu == len(self.perePyxb.objPyxb.orderedContent()): - # listeArg.append(self.objPyxb) - #print('self.cata.modeleMetier.Namespace : ',self.cata.modeleMetier.Namespace) - #print('self.nom : ',self.nom) elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=self.perePyxb.objPyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) - #perePyxb est en fait l'objet ACAS père de notre objet PyxB (Il peut être éloigné à cause des BLOCS) - self.perePyxb.objPyxb.orderedContent().insert(indiceDansLeContenu,elt) - setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb) - #print ('avec', listeArg) - - #EF: J'imagine que la ligne suivante sert a demander au père de se reconstruire avec la liste des args - #nvlObjPerePyxb=self.perePyxb.maClasseModeleMetier(*listeArg) - #self.perePyxb.objPyxb=nvlObjPerePyxb - #self.perePyxb.objPyxb.objAccas=ancienObjPerePyxb.objAccas - #print (self.nom, ' a pour gp ', grandPere) - #if grandPere : grandPere.reconstruitAvecNvlObj(ancienObjPerePyxb,nvlObjPerePyxb) - - def reconstruitAvecNvlObj(self, ancienObj,nvlObj): - if not self.cata.modeleMetier : return - #print ('reconstruitAvecNvlObj pour', self, self.nom, ancienObj,nvlObj) - listeArg=[] - for i in self.objPyxb.orderedContent(): - if id(ancienObj) == id(i._Content__value) : listeArg.append(nvlObj) - else : listeArg.append(i._Content__value) - nouveauMoiPyxb=self.maClasseModeleMetier(*listeArg) - nouveauMoiPyxb.objAccas=self - self.objPyxb=nouveauMoiPyxb - if self.perePyxb : self.perePyxb.reconstruitAvecNvlObj(self.objPyxb,nouveauMoiPyxb) - - - + self.perePyxb.objPyxb.orderedContent().insert(indiceDsLeContenu,elt) + if (elt.elementDeclaration.isPlural()): + # je suis donc un MCList + listeObjetsAccas=self.parent.getChild(self.nom,restreint='oui') + if len(listeObjetsAccas) == 1 : monIndex=1 + else : monIndex=listeObjetsAccas.index(self) + listeObjetsPyxb=getattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key) + listeObjetsPyxb.insert(monIndex,self.objPyxb) + else : + setattr(self.perePyxb.objPyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb) + + def rangDsPyxb(self): + monRangEnAccas=self.parent.mcListe.index(self) + rangEnPyxb=0 + for frere in self.parent.mcListe[0: monRangEnAccas] : + rangEnPyxb += frere.longueurDsArbre() + return rangEnPyxb + class X_MCSIMP(X_OBJECT): # ----------------------- def buildObjPyxb(self) : - # self.valeur tient compte de la valeur par defaut - # utiliser getValeur ? expression numpy if not self.cata.modeleMetier : return + if self.nom == 'Consigne' : return None + if self.nom == 'Spring_Stifness' : + #trace() + print ('Sprinf_Stifness' ,self.valeur) #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur) #print ('objPyxbDeConstruction', self.objPyxbDeConstruction) #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb') - if self.nom == 'Consigne' : return None if self.objPyxbDeConstruction != None : self.objPyxb = self.objPyxbDeConstruction self.objPyxb.objAccas=self self.maClasseModeleMetier =type(self.objPyxb) - #print (self.maClasseModeleMetier) self.objPyxbDeConstruction = None else : self.monNomClasseModeleMetier='T_'+self.nom if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()] - #print (self.nom, self.monNomClasseModeleMetier) self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) - #print (self.maClasseModeleMetier) - #print (self.valeur) - #print (type(self.valeur)) if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur) else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False); @@ -185,20 +127,16 @@ class X_MCSIMP(X_OBJECT): def setValeurObjPyxb(self,newVal): if not self.cata.modeleMetier : return - #print ('------------------------------------------------------------------') - #print ('dans setValeurObjPyxb MCSIMP ', self.nom) + print ('dans setValeurObjPyxb MCSIMP ', self.nom, newVal) + #print (' self.perePyxb = ', self.perePyxb.nom) if inspect.isclass(newVal) and issubclass(newVal,A_ASSD) : newVal = newVal.nom - #print (newVal) - #print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom, self.perePyxb.objPyxb) if newVal != None : nvlObj=self.maClasseModeleMetier(newVal) - #else : nvlObj=self.maClasseModeleMetier() # a priori impossible mais ? else : nvlObj=self.maClasseModeleMetier(_validate_constraints=False) self.val=newVal - #print (self.perePyxb.objPyxb.orderedContent()) setattr(self.perePyxb.objPyxb,self.nom,nvlObj) trouve=False indice=0 @@ -212,67 +150,23 @@ class X_MCSIMP(X_OBJECT): if not trouve : print ('Attention souci au changement de valeur de ', self.nom) self.objPyxb=nvlObj self.objPyxb.objAccas=self - #print (self.perePyxb.objPyxb.orderedContent()) - #print ('------------------------------------------------------------------') + #print ('fin du setValeurObjPyxb pour ', self.nom, self.perePyxb.objPyxb.orderedContent()) - def addObjPyxb(self, indiceDsLeContenu): - if not self.cata.modeleMetier : return - if self.nom == 'Consigne' : return None - #print ('addObjPyxb : ajout de ', self.nom, 'en ', indiceDsLeContenu) - - # adherence Accas sur le parent - # parent=self.parent - # while (parent.isBLOC() ): parent=parent.parent - # self.perePyxb=parent - #print ('dans le perePyxb', self.perePyxb.nom) - #print (dir(self.perePyxb)) - - self.monNomClasseModeleMetier='T_'+self.nom - if self.nom in list(self.cata.DicoNomTypeDifferentNomElt.keys()) : - self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()] - self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) - #nvlObj=self.maClasseModeleMetier() - #nvlObj=self.maClasseModeleMetier(_validate_constraints=False) - if self.valeur != None : self.objPyxb=self.maClasseModeleMetier(self.valeur) - else : self.objPyxb=self.maClasseModeleMetier(_validate_constraints=False); - #print (self.perePyxb.objPyxb.orderedContent()) - #for i in (self.perePyxb.objPyxb.orderedContent()): print i._Content__value;print (type(i._Content__value)) - - X_OBJECT.addObjPyxb(self, indiceDsLeContenu) - - # setattr(self.perePyxb.objPyxb,self.nom,nvlObj) - # tampon=self.perePyxb.objPyxb.orderedContent()[-1] - # self.objPyxb = nvlObj - # self.objPyxb.objAccas=self - # indexOC=-1 - # longueur=len(self.perePyxb.objPyxb.orderedContent()) - # #print (self.perePyxb.objPyxb.orderedContent()) - # #print (self.perePyxb.nom) - # for i in reversed(range(longueur)): - # self.perePyxb.objPyxb.orderedContent()[i]=self.perePyxb.objPyxb.orderedContent()[i-1] - # if i == indiceDsLeContenu + 1 : break - # self.perePyxb.objPyxb.orderedContent()[indiceDsLeContenu]=tampon - - class X_MCCOMPO(X_OBJECT) : # ------------------------- # def buildObjPyxb(self,mc_list) : - #print ('________________________________________________') if not self.cata.modeleMetier : return #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list) - self.listArg=[] self.dicoArg={} for objAccas in mc_list : - #print (objAccas.nom,objAccas.nature) if objAccas.nature == 'MCBLOC' : self.exploreBLOC(objAccas) elif objAccas.nature == 'MCList' : - #print ('MCList explore', objAccas.nom, len(objAccas), objAccas[0].definition.max ) if objAccas[0].definition.max > 1 : self.listArg.append(objAccas) # les MCList n ont pas objPyxb self.dicoArg[objAccas.nom]=[] @@ -286,7 +180,6 @@ class X_MCCOMPO(X_OBJECT) : else : if objAccas.nom == 'Consigne' : continue self.listArg.append(objAccas.objPyxb) - #print (self.listArg) self.dicoArg[objAccas.nom]=objAccas.objPyxb objAccas.perePyxb=self @@ -298,6 +191,7 @@ class X_MCCOMPO(X_OBJECT) : self.monNomClasseModeleMetier=self.cata.DicoNomTypeDifferentNomElt[self.nom][self.nomComplet()] self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + # PN : Ne doit-on pas tester avant if self.objPyxbDeConstruction != None : self.objPyxb = self.objPyxbDeConstruction self.objPyxbDeConstruction = None @@ -308,17 +202,11 @@ class X_MCCOMPO(X_OBJECT) : # self.objPyxb=self.maClasseModeleMetier(*self.listArg) self.objPyxb=self.maClasseModeleMetier(**self.dicoArg) newordercontent=[] - - # print ('uuuuuuuuuuuuuu', self.objPyxb.orderedContent()) - # print ('kkkkkkkkkkkkkkkkkkkkk listArg', self.listArg) for obj in self.listArg: - # print (obj) # on teste le caractere pluriel if (hasattr(obj, 'nature')) : # attention on a un object Accas et non un pyxb car les MCList n ont pas de objPyxb - # print ('obj----------', obj.nom) max=obj[0].definition.max else : max = 1 - # print (max) if max == 1 : if not(issubclass(type(obj), pyxb.binding.basis.enumeration_mixin) ): newordercontent.append(self.objPyxb.orderedContent()[map(lambda o:id(o.value), self.objPyxb.orderedContent()).index(id(obj))] ) @@ -327,8 +215,6 @@ class X_MCCOMPO(X_OBJECT) : else : # element Pural for c in self.objPyxb.orderedContent() : if isinstance(c._Content__value,list) and isinstance(c._Content__value[0], type(obj[0].objPyxb)): newordercontent.append(c) - # print ('uuuuuuuuuuuuuu', newordercontent) - for i in xrange(len(self.listArg)): self.objPyxb.orderedContent()[i]=newordercontent[i] @@ -337,13 +223,6 @@ class X_MCCOMPO(X_OBJECT) : #print ('_______________________________________') # assert(self.objPyxb.validateBinding()) - def delObjPyxb(self): - if not self.cata.modeleMetier : return - #print ('******************************************') - #print ('je passe ds delObjPyxb pour ', self, self.nom) - #print (self.perePyxb) - #print (dir(self)) - #print ('******************************************') def exploreBLOC(self,objAccas): #print (' ds exploreBLOC', objAccas .nom) @@ -379,28 +258,24 @@ class X_MCBLOC (X_MCCOMPO): # -------------------------- def buildObjPyxb(self,mc_list): if not self.cata.modeleMetier : return - # mise a none ? le bloc n a pas d existence en pyxb + #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list, 'ne fait rien') self.perePyxb=None - #print ('_______________________________________') - #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list) - self.filsPyxb=[] self.objPyxb=None - # Pas sur d en avoir besoin du filsPyxb - # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc - #for objAccas in mc_list : - # self.filsPyxb.append(objAccas.objPyxb) - #print (self.filsPyxb) - #print ('Fin ', self.nom, self.objPyxb) - #print ('_______________________________________') - def addObjPyxb(self, indiceDsLeContenu): if not self.cata.modeleMetier : return + print ('X_MCBLOC addObjPyxb', self.nom, self, self.mcListe, indiceDsLeContenu) rangDeLObjet=indiceDsLeContenu for obj in self.mcListe: obj.addObjPyxb( rangDeLObjet) rangDeLObjet=rangDeLObjet+obj.longueurDsArbre() + def delObjPyxb(self): + if not self.cata.modeleMetier : return + #print ('X_MCBLOC delObjPyxb', self.nom, ' --------------------------') + for obj in self.mcListe: + obj.delObjPyxb() + #print ('fin X_MCBLOC delObjPyxb --------------------------') class X_MCLIST (X_MCCOMPO): # -------------------------- @@ -409,54 +284,24 @@ class X_MCLIST (X_MCCOMPO): #print ('X_MCLIST buildObjPyxb ne fait rien', self.nom, self, mc_list) pass - def addObjPyxb(self,indiceDansLeContenu): - #traceback.print_stack() - #print ('X_MCLIST addObjPyxb ne fait rien', self.nom) - pass + def addObjPyxb(self,indiceDsLeContenu): + #print ('X_MCLIST addObjPyxb', self.nom, indiceDsLeContenu) + rangDeLObjet=indiceDsLeContenu + for objFils in self : + objFils.addObjPyxb(rangDeLObjet) + rangDeLObjet= rangDeLObjet + 1 + def delObjPyxb(self): + if not self.cata.modeleMetier : return + #print ('X_MCLIST delObjPyxb', self.nom, ' --------------------------') + for obj in self: + obj.delObjPyxb() + #print ('fin X_MCLIST delObjPyxb --------------------------') class X_MCFACT (X_MCCOMPO): # ------------------------- -# on gere au niveau du MCCOMPO - - - def addObjPyxb(self,indiceDansLeContenu): - if not self.cata.modeleMetier : return - #print ('**********************************************') - #print ('_____________ addObjPyxb ds X_MCLIST', self.nom, indiceDansLeContenu) - # adherence Accas sur le parent - #perePyxb est en fait l'objet ACCAS père de notre objet PyxB (Il peut être éloigné à cause des BLOCS) - parentNonBloc=self.parent - while (parentNonBloc.isBLOC()): parentNonBloc=parentNonBloc.parent - self.perePyxb=parentNonBloc - objPerePyxb=self.perePyxb.objPyxb - - self.objPyxb.objAccas=self - - # print('self.cata.modeleMetier.Namespace : ',self.cata.modeleMetier.Namespace) - # print('self.nom : ',self.nom) - - listeObjets=self.parent.getChild(self.nom,restreint='oui') - nbObjsPresents=len(listeObjets) - # nbObjsPresents == 1 nous indique qu'il n'y avait pas d'objet avec notre 'nom' dans le père - - #Il y a une symetrie entre le contenu de l'orderedContent pour l'objet plural et la liste maintenue pas pyxb pour l'attribut et la mcListe ACCAS - elt=pyxb.binding.basis.ElementContent(self.objPyxb, instance=objPerePyxb, tag=pyxb.namespace.ExpandedName(self.cata.modeleMetier.Namespace, self.nom)) - objPerePyxb.orderedContent().insert(indiceDansLeContenu,elt) - - if (elt.elementDeclaration.isPlural()): - if (nbObjsPresents == 1): - #vérifier que lorsque l'élément est optionnel il existe une liste vide ?? - # setattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb,) - ouAjouter=0 - else: - ouAjouter=listeObjets.getIndex(self) - liste=getattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key) - liste.insert(ouAjouter,self.objPyxb) - else: - setattr(objPerePyxb,elt.elementDeclaration._ElementDeclaration__key,self.objPyxb) - + pass class X_JDC (X_MCCOMPO): # --------------------- diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 880ed3d6..94926de2 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -850,7 +850,7 @@ class JDC(I_OBJECT.OBJECT): Noyau.N_JDC.JDC.supprime(self) for etape in self.etapes: etape.supprime() - self.appli=None + self.appliEficas=None self.g_context={} self.const_context={} self.sds_dict={} @@ -947,9 +947,9 @@ class JDC(I_OBJECT.OBJECT): Retourne le nom du fichier correspondant a un numero d'unite logique (entier) ainsi que le source contenu dans le fichier """ - if self.appli is not None: - # Si le JDC est relie a une application maitre, on delegue la recherche - file,text= self.appli.getFile(unite,fic_origine) + if self.appliEficas is not None: + # Si le JDC est relie a une appliEficascation maitre, on delegue la recherche + file,text= self.appliEficas.getFile(unite,fic_origine) else: file = None if unite != None: diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 0de991d8..ab284d4e 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -115,7 +115,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.text_converted=0 self.text_error="" if self.nom != "INCLUDE_MATERIAU": - format=self.parent.appli.appliEficas.format_fichier + format=self.jdc.appliEficas.format_fichier #on force a python pour Carmel if format=="CARMEL3D" : format="python" import convert @@ -123,7 +123,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # Le convertisseur existe on l'utilise p=convert.plugins[format]() p.text=text - text=p.convert('exec',self.jdc.appli) + text=p.convert('exec',self.jdc.appliEficas) #Si le fichier ne peut pas etre converti, le cr n'est pas vide #et le texte est retourne tel que if not p.cr.estvide(): @@ -135,7 +135,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): if hasattr(self,'sd') and self.sd != None : context_ini[self.sd.nom]=self.sd j=self.JdC_aux( procedure=text, nom=fichier, - appli=self.jdc.appli, + appliEficas=self.jdc.appliEficas, cata=self.jdc.cata, cata_ord_dico=self.jdc.cata_ordonne_dico, context_ini = context_ini, @@ -597,8 +597,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): except: # Impossible de construire le jdc auxiliaire (sortie par exception) l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) - if self.jdc.appli is not None: - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), + if self.jdc.appliEficas is not None: + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), message= tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l))) self.g_context={} @@ -763,8 +763,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): f,text=None,None self.recorded_units=units - if f is None and self.jdc.appli: - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), + if f is None and self.jdc.appliEficas: + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), message= tr("Ce fichier ne sera pas pris en compte\nLe fichier associe n'est pas defini")) return f,text @@ -866,7 +866,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): for concept in self.old_context_fichier_init.values(): self.jdc.deleteConcept(concept) if fichier == None : - fichier=str(self.jdc.appli.getFile_dictDonnees()) + fichier=str(self.jdc.appliEficas.getFile_dictDonnees()) if fichier == str("") : self.fichier_ini="badfile" self.fichier_text="" @@ -931,7 +931,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.jdc.deleteConcept(concept) if fichier == None : - fichier=str(self.jdc.appli.getFileVariable()) + fichier=str(self.jdc.appliEficas.getFileVariable()) if fichier == str("") : self.fichier_ini="badfile" self.fichier_text="" @@ -1019,14 +1019,14 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): def makeIncl2Except(self,mess=None): l=traceback.format_exception_only(tr("Fichier invalide"),sys.exc_info()[1]) - if self.jdc.appli is not None: + if self.jdc.appliEficas is not None: if mess == None : - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), message= tr("Le contenu de ce fichier ne sera pas pris en compte\n %s",\ ''.join(l))) else : - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), message=tr(mess)) #self.parent.recordUnit(unite,self) self.g_context={} @@ -1084,8 +1084,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.parent.recordUnit(unite,self) except: l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1])) - if self.jdc.appli: - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), + if self.jdc.appliEficas: + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier inclus"), message=tr("Le contenu de ce fichier ne sera pas pris en compte\n"+''.join(l))) self.parent.recordUnit(unite,self) self.g_context={} @@ -1222,8 +1222,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.parent.recordUnit(None,self) except: l=traceback.format_exception_only("Fichier invalide",sys.exc_info()[1]) - if self.jdc.appli: - self.jdc.appli.afficheAlerte(tr("Erreur lors de l'evaluation du fichier poursuite"), + if self.jdc.appliEficas: + self.jdc.appliEficas.afficheAlerte(tr("Erreur lors de l'evaluation du fichier poursuite"), message=tr("Ce fichier ne sera pas pris en compte\n %s",''.join(l))) self.parent.recordUnit(None,self) self.g_context={} diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index a90d7ffb..384e1595 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -168,24 +168,18 @@ class MCCOMPO(I_OBJECT.OBJECT): # ajoute la taille des les Blocs # faut -il chercher plus loin ds les petits-enfants ? if objet.nature == 'MCList' : objet=objet[0] - print ('je cherche ',objet, objet.nom, self.nom) leRang=0 positionDsLaListe=0 try : positionDsLaListe=self.mcListe.index(objet) positionDsLaListeDeFactSiFact =0 - print ('en position', positionDsLaListe) except : for mc in self.mcListe: - print (mc) if mc.nature == 'MCList': try : - print ('ds try') positionDsLaListeDeFactSiFact=mc.index(objet) - print ('break') break except : - print ('ds except') positionDsLaListe=positionDsLaListe+1 else : positionDsLaListe=positionDsLaListe+1 i=0 @@ -193,7 +187,6 @@ class MCCOMPO(I_OBJECT.OBJECT): leRang= leRang + self.mcListe[i].longueurDsArbre() i=i+1 leRang=leRang+positionDsLaListeDeFactSiFact - print (leRang) return leRang @@ -225,9 +218,6 @@ class MCCOMPO(I_OBJECT.OBJECT): return 0 self.initModif() - print ('suppEntite MCCOMPO _____________________________________________________') - print ( objet.nom) - print ('_____________________________________________________') objet.delObjPyxb() self.mcListe.remove(objet) CONNECTOR.Emit(self,"supp",objet) @@ -246,7 +236,7 @@ class MCCOMPO(I_OBJECT.OBJECT): Ajoute le mot-cle name a la liste des mots-cles de l'objet MCCOMPOSE """ - print ('addEntite', name, pos) + #print ('addEntite', name, pos) self.initModif() if type(name)==bytes or type(name) == str : # on est en mode creation d'un motcle @@ -262,7 +252,7 @@ class MCCOMPO(I_OBJECT.OBJECT): # On verifie que l'ajout d'objet est autorise if self.ispermis(objet) == 0: - self.jdc.appli.afficheAlerte(tr("Erreur"), + self.jdc.appliEficas.afficheAlerte(tr("Erreur"), tr("L'objet %(v_1)s ne peut etre un fils de %(v_2)s",\ {'v_1': objet.nom, 'v_2': self.nom})) self.finModif() @@ -294,7 +284,7 @@ class MCCOMPO(I_OBJECT.OBJECT): # on cree une liste d'objets. Dans le cas contraire, # on emet un message d'erreur. if not old_obj.isRepetable(): - self.jdc.appli.afficheAlerte(tr("Erreur"),tr("L'objet %s ne peut pas etre repete", objet.nom)) + self.jdc.appliEficas.afficheAlerte(tr("Erreur"),tr("L'objet %s ne peut pas etre repete", objet.nom)) self.finModif() return 0 else: diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index fc8583fb..b7781d92 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -96,7 +96,7 @@ class MCList: raise EficasException(tr("traitement non-prevu")) if not self.ajoutPossible(): - self.jdc.appli.afficheAlerte(tr("Erreur"), + self.jdc.appliEficas.afficheAlerte(tr("Erreur"), tr("L'objet %s ne peut pas etre ajoute", obj.nom)) return None diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 6ac37526..b207c041 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -98,9 +98,9 @@ class MCSIMP(I_OBJECT.OBJECT): # traitement d'un flottant isole txt = str(self.valeur) clefobj=self.getNomConcept() - if clefobj in self.jdc.appli.appliEficas.dict_reels : - if self.valeur in self.jdc.appli.appliEficas.dict_reels[clefobj]: - txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur] + if clefobj in self.jdc.appliEficas.dict_reels : + if self.valeur in self.jdc.appliEficas.dict_reels[clefobj]: + txt=self.jdc.appliEficas.dict_reels[clefobj][self.valeur] elif type(self.valeur) in (list,tuple) : if self.valeur==[] or self.valeur == (): return str(self.valeur) # traitement des listes @@ -109,9 +109,9 @@ class MCSIMP(I_OBJECT.OBJECT): for val in self.valeur: if type(val) == float : clefobj=self.getNomConcept() - if clefobj in self.jdc.appli.appliEficas.dict_reels: - if val in self.jdc.appli.appliEficas.dict_reels[clefobj]: - txt=txt + sep +self.jdc.appli.appliEficas.dict_reels[clefobj][val] + if clefobj in self.jdc.appliEficas.dict_reels: + if val in self.jdc.appliEficas.dict_reels[clefobj]: + txt=txt + sep +self.jdc.appliEficas.dict_reels[clefobj][val] else : txt=txt + sep + str(val) else : @@ -154,9 +154,9 @@ class MCSIMP(I_OBJECT.OBJECT): val=self.valeur if type(val) == float : clefobj=self.getNomConcept() - if clefobj in self.jdc.appli.appliEficas.dict_reels : - if val in self.jdc.appli.appliEficas.appliEficas.dict_reels[clefobj] : - return self.jdc.appli.appliEficas.dict_reels[clefobj][val] + if clefobj in self.jdc.appliEficas.dict_reels : + if val in self.jdc.appliEficas.appliEficas.dict_reels[clefobj] : + return self.jdc.appliEficas.dict_reels[clefobj][val] if type(val) != tuple : try: return val.getName() diff --git a/InterfaceQT4/compofact.py b/InterfaceQT4/compofact.py index 26f8907a..4d338395 100644 --- a/InterfaceQT4/compofact.py +++ b/InterfaceQT4/compofact.py @@ -115,7 +115,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): # nouvel objet : on cree un nouvel item def setFunction(value, object=obj): object.setval(value) - item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction) + item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction) sublist[pos]=item pos=pos+1 diff --git a/InterfaceQT4/compojdc.py b/InterfaceQT4/compojdc.py index 111a4e98..87121de4 100644 --- a/InterfaceQT4/compojdc.py +++ b/InterfaceQT4/compojdc.py @@ -115,7 +115,7 @@ class JDCTreeItem(Objecttreeitem.ObjectTreeItem): for obj in liste: if sublist[pos] is None: # nouvel objet : on cree un nouvel item - item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj) + item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj) sublist[pos]=item pos=pos+1 diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py index 2398751d..010d6d18 100644 --- a/InterfaceQT4/compomacro.py +++ b/InterfaceQT4/compomacro.py @@ -71,8 +71,8 @@ class MACROTreeItem(compooper.EtapeTreeItem): class INCLUDETreeItemBase(MACROTreeItem): - def __init__(self,appli, labeltext, object, setFunction): - MACROTreeItem.__init__(self,appli, labeltext, object, setFunction) + def __init__(self,appliEficas, labeltext, object, setFunction): + MACROTreeItem.__init__(self,appliEficas, labeltext, object, setFunction) def isCopiable(self): return 0 @@ -87,7 +87,7 @@ class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode): def createPopUpMenu(self): typeNode.PopUpMenuNode.createPopUpMenu(self) - def makeEdit(self): #,appli,node + def makeEdit(self): #,appliEficas,node if self.item.object.text_converted == 0: # Le texte du fichier inclus n'a pas pu etre converti par le module convert msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n") @@ -119,7 +119,7 @@ class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode): def createPopUpMenu(self): typeNode.PopUpMenuNode.createPopUpMenu(self) - def makeEdit(self): #,appli,node + def makeEdit(self): #,appliEficas,node if self.item.object.text_converted == 0: msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n") msg=msg+self.item.object.text_error @@ -172,18 +172,18 @@ class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase): # ------------------------------------ -def treeitem(appli, labeltext, object, setFunction=None): +def treeitem(appliEficas, labeltext, object, setFunction=None): """ Factory qui retourne l'item adapte au type de macro : INCLUDE, POURSUITE, MACRO """ if object.nom == "INCLUDE_MATERIAU": - return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setFunction) + return INCLUDE_MATERIAUTreeItem(appliEficas, labeltext, object, setFunction) elif object.nom == "INCLUDE" or object.nom== "DICTDATA": - return INCLUDETreeItem(appli, labeltext, object, setFunction) + return INCLUDETreeItem(appliEficas, labeltext, object, setFunction) elif object.nom == "POURSUITE": - return POURSUITETreeItem(appli, labeltext, object, setFunction) + return POURSUITETreeItem(appliEficas, labeltext, object, setFunction) else: - return MACROTreeItem(appli, labeltext, object, setFunction) + return MACROTreeItem(appliEficas, labeltext, object, setFunction) import Accas objet=Accas.MACRO_ETAPE diff --git a/InterfaceQT4/compomclist.py b/InterfaceQT4/compomclist.py index fca3168d..5fb722c8 100644 --- a/InterfaceQT4/compomclist.py +++ b/InterfaceQT4/compomclist.py @@ -138,7 +138,7 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): # nouvel objet : on cree un nouvel item def setFunction(value, object=obj): object=value - item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction) + item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction) sublist[pos]=item #Attention : on ajoute une information supplementaire pour l'actualisation de # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE @@ -211,8 +211,8 @@ class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem): import Accas objet = Accas.MCList -def treeitem(appli,labeltext,object,setFunction): +def treeitem(appliEficas,labeltext,object,setFunction): """ Factory qui produit un objet treeitem adapte a un objet Accas.MCList (attribut objet de ce module) """ - return MCListTreeItem(appli,labeltext,object,setFunction) + return MCListTreeItem(appliEficas,labeltext,object,setFunction) diff --git a/InterfaceQT4/compooper.py b/InterfaceQT4/compooper.py index d9326bee..ac272a04 100644 --- a/InterfaceQT4/compooper.py +++ b/InterfaceQT4/compooper.py @@ -66,61 +66,12 @@ class Node(browser.JDCNode, typeNode.PopUpMenuNode): def createPopUpMenu(self): typeNode.PopUpMenuNode.createPopUpMenu(self) -# if ("AFFE_CARA_ELEM" in self.item.getGenealogie()) and self.editor.salome: -# self.ViewElt = QAction(tr('View3D'),self.tree) -# self.tree.connect(self.ViewElt,SIGNAL("triggered()"),self.view3D) -# self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure")) -# self.menu.addAction(self.ViewElt) -# if self.item.isValid() : -# self.ViewElt.setEnabled(1) -# else: -# self.ViewElt.setEnabled(0) -# if self.item.getNom() == "DISTRIBUTION" : -# self.Graphe = QAction(tr('Graphique'),self.tree) -# self.Graphe.triggered.connect(self.viewPng) -# self.Graphe.setStatusTip(tr("affiche la distribution ")) -# self.menu.addAction(self.Graphe) -# if self.item.isValid() : -# self.Graphe.setEnabled(1) -# else: -# self.Graphe.setEnabled(0) # def view3D(self) : # from Editeur import TroisDPal # troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas) # troisD.envoievisu() -# def viewPng(self) : -# from monPixmap import MonLabelPixmap -# import generator -# try: -# from PyQt5.QtCore import Qt -# from PyQt5.QtWidgets import QMessageBox, QAction, QApplication -# QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) -# g = generator.plugins[self.appliEficas.format_fichier]() -# g.gener(self.item.object, format='beautifie') -# stdGener = g.getGenerateur() -# loi = list(g.dictMCLois.keys())[0] -# nomLoi = loi.getName() -# (fd, fichier) = tempfile.mkstemp(prefix = "openturns_graph_", suffix = ".png") -# os.close(fd) -# chemin = os.path.dirname(fichier) -# base = os.path.splitext(os.path.basename(fichier))[0] -# script = stdGener.GraphiquePDF(loi, chemin, base) - #print script -# d = {} -# exec(script, d) -# widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi) -# os.remove(fichier) -# QApplication.restoreOverrideCursor() -# widgetPng.show() -# except: -# QApplication.restoreOverrideCursor() -# QMessageBox.warning( -# self.appliEficas, -# tr("Erreur interne"), -# tr("La PDF de la loi ne peut pas etre affichee."), -# tr("&Annuler")) class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau @@ -246,7 +197,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): # nouvel objet : on cree un nouvel item def setFunction(value, object=obj): object.setval(value) - item = self.makeObjecttreeitem(self.appli, obj.nom + " : ", obj, setFunction) + item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction) sublist[pos]=item pos=pos+1 @@ -278,8 +229,8 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): oldnom=self.object.sd.nom test,mess= self.object.nommeSd(nom) if test:self.object.parent.resetContext() - if (test and oldnom in self.appli.dict_reels ): - self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom] + if (test and oldnom in self.appliEficas.dict_reels ): + self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom] return test,mess def isReentrant(self): @@ -294,7 +245,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): représentatif de self.object """ # Format de fichier utilisé - format=self.appli.appliEficas.format_fichier + format=self.appliEficas.format_fichier return self.object.getObjetCommentarise(format) def getObjetCommentarise_BAK(self): @@ -304,7 +255,7 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): """ import generator,Accas # Format de fichier utilisé - format=self.appli.appliEficas.format_fichier + format=self.appliEficas.format_fichier g=generator.plugins[format]() texte_commande = g.gener(self.object,format='beautifie') # Il faut enlever la premiere ligne vide de texte_commande que diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 3a70133b..13bf8a8a 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -341,17 +341,17 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): try : if "R" in self.object.definition.type: clef=self.object.getNomConcept() - if clef in self.appli.dict_reels: + if clef in self.appliEficas.dict_reels: if type(valeurs) == tuple: valeurs_reelles=[] for val in valeurs : - if val in self.appli.dict_reels[clef]: - valeurs_reelles.append(self.appli.dict_reels[clef][val]) + if val in self.appliEficas.dict_reels[clef]: + valeurs_reelles.append(self.appliEficas.dict_reels[clef][val]) else : valeurs_reelles.append(val) else : - if valeurs in self.appli.dict_reels[clef]: - valeurs_reelles=self.appli.dict_reels[clef][valeurs] + if valeurs in self.appliEficas.dict_reels[clef]: + valeurs_reelles=self.appliEficas.dict_reels[clef][valeurs] valeurs=valeurs_reelles except : pass @@ -501,7 +501,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): def getIconName(self): - if self.appli.maConfiguration.differencieSiDefaut and self.isValid(): + if self.appliEficas.maConfiguration.differencieSiDefaut and self.isValid(): if self.object.definition.defaut != None : if self.object.valeur == self.object.definition.defaut : return "ast-green-dark-ball" if self.object.definition.max > 1 and list(self.object.valeur) == list(self.object.definition.defaut) : return "ast-green-dark-ball" diff --git a/InterfaceQT4/configuration.py b/InterfaceQT4/configuration.py index 10edd6bc..5b3d59c2 100644 --- a/InterfaceQT4/configuration.py +++ b/InterfaceQT4/configuration.py @@ -37,7 +37,7 @@ from Extensions.i18n import tr class configBase(object): #------------------------------- - def __init__(self,appli,repIni): + def __init__(self,appliEficas,repIni): #------------------------------- # Classe de base permettant de lire, afficher @@ -52,9 +52,9 @@ class configBase(object): # le fichier de catalogue va etre lu dans la directory de l utilisateur s il exite # dans le fichier general sinon - self.appli = appli - self.code = appli.code - self.salome = appli.salome + self.appliEficas = appliEficas + self.code = appliEficas.code + self.salome = appliEficas.salome if self.salome : self.name="editeur_salome.ini" else : self.name="editeur.ini" self.rep_mat = None @@ -81,7 +81,7 @@ class configBase(object): #Particularite des schemas MAP if hasattr(self,'make_ssCode'): self.make_ssCode(self.ssCode) - #if self.appli: self.parent=appli.top + #if self.appliEficas: self.parent=appliEficas.top #else: self.parent=None if not os.path.isdir(self.savedir) : @@ -137,6 +137,7 @@ class configBase(object): self.ajoutExecution=False self.utilParExtensions=[] self.rendVisiblesLesCaches=False + self.pasDeMCOptionnels=False self.dumpXSD=False self.withXSD=False @@ -149,7 +150,7 @@ class configBase(object): def lectureFichierIniStandard(self): #-------------------------------------- - name='prefs_'+self.appli.code + name='prefs_'+self.appliEficas.code try : prefsCode=__import__(name) except : @@ -252,5 +253,5 @@ class configBase(object): # -def makeConfig(appli,rep): - return configBase(appli,rep) +def makeConfig(appliEficas,rep): + return configBase(appliEficas,rep) diff --git a/InterfaceQT4/editor.pourCIST b/InterfaceQT4/editor.pourCIST deleted file mode 100644 index 5e7bd5b8..00000000 --- a/InterfaceQT4/editor.pourCIST +++ /dev/null @@ -1,1967 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2007-2013 EDF R&D -# -# 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. -# -# 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 - -import six -from six.moves import range -from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter -from PyQt5.QtGui import QPalette -from PyQt5.QtCore import QProcess, QFileInfo, QTimer, Qt, QDir, QSize -import time -import pdb -from datetime import date -from Extensions.i18n import tr - -import traceback - -# Modules Eficas - -import convert, generator -from Editeur import session -from Editeur import comploader -from Editeur import Objecttreeitem -from desBaseWidget import Ui_baseWidget -from InterfaceQT4.monViewTexte import ViewText -from monWidgetCreeParam import MonWidgetCreeParam -from . import browser -from . import readercata - -DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'} - - - - -class JDCEditor(Ui_baseWidget,QWidget): -# ----------------------------------------- # - """ - Editeur de jdc - """ - - def __init__ (self,appli,fichier = None, jdc = None, QWParent=None, units = None, include=0 , vm=None): - #----------------------------------------------------------------------------------------------------------# - - QWidget.__init__(self,None) - self.i=0 - self.setupUi(self) - self.inhibeSplitter=0 - self.widgetOptionnel=None - self.fenetreCentraleAffichee=None - self.dejaDansPlieTout=False - self.afficheCommandesPliees = True - self.listeDesListesOuvertes=set() - self.appliEficas = appli - self.appli = appli #---- attendu par IHM - self.vm = vm - self.fichier = fichier - self.jdc = jdc - self.first = True - self.QWParent = QWParent - self.couleur = Qt.black - self.nodeEnCours=None - - if appli != None : - self.salome = self.appliEficas.salome - else : - self.salome=0 - print ("dans JDC pas d appli ????????") - - # ces attributs sont mis a jour par definitCode appelee par newEditor - self.code = self.appliEficas.CONFIGURATION.code - self.initSplitterSizes() - - #self.afficheListesPliees=False - self.afficheListesPliees=True - if self.code == "ASTER" or self.code == "monCode" : self.afficheListesPliees =True - if self.code == 'PSEN_N1' : self.afficheListesPliees = False - - self.mode_nouv_commande=self.appliEficas.CONFIGURATION.mode_nouv_commande - self.closeAutreCommande=self.appliEficas.CONFIGURATION.closeAutreCommande - self.closeFrameRechercheCommande=self.appliEficas.CONFIGURATION.closeFrameRechercheCommande - self.closeArbre=self.appliEficas.CONFIGURATION.closeArbre - self.affiche=self.appliEficas.CONFIGURATION.affiche - self.afficheOptionnelVide=self.appliEficas.CONFIGURATION.afficheOptionnelVide - self.nombreDeBoutonParLigne = self.appliEficas.CONFIGURATION.nombreDeBoutonParLigne - self.dicoImages = self.appliEficas.CONFIGURATION.dicoImages - self.simpleClic = self.appliEficas.CONFIGURATION.simpleClic - #self.taille = self.appliEficas.taille - - #if self.code in ['MAP','CARMELCND','PSEN'] : self.afficheCommandesPliees=False - if self.code in ['MAP','CARMELCND'] : self.afficheCommandesPliees=False - if self.code in ['MAP',]: - self.widgetTree.close() - self.widgetTree=None - if self.closeArbre: self.fermeArbre() - - self.version_code = session.d_env.cata - - - if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.multi==True: - self.readercata = readercata.READERCATA( self, self.appliEficas ) - self.appliEficas.readercata=self.readercata - self.appliEficas.code=self.code - else : - self.readercata=self.appliEficas.readercata - if self.readercata.fic_cata == None : return #Sortie Salome - self.titre=self.readercata.titre - self.Ordre_Des_Commandes=self.readercata.Ordre_Des_Commandes - self.Classement_Commandes_Ds_Arbre=self.readercata.Classement_Commandes_Ds_Arbre - - self.format = self.appliEficas.format_fichier - - self.dict_reels={} - self.liste_simp_reel=[] - self.ihm="QT" - self.dicoNouveauxMC={} - self.dicoNouveauxFact={} - - nameConf='configuration_'+self.code - configuration=__import__(nameConf) - self.CONFIGURATION = self.appliEficas.CONFIGURATION - self.CONFIGStyle = self.appliEficas.CONFIGStyle - - try: - self.CONFIGURATION.generator_module - _module = __import__(self.CONFIGURATION.generator_module) - info = _module.entryPoint() - generator.plugins.addEntryPoint(info) - except: - pass - - try: - self.CONFIGURATION.convert_module - #print self.CONFIGURATION.convert_module - _module = __import__(self.CONFIGURATION.convert_module) - info = _module.entryPoint() - convert.plugins.addEntryPoint(info) - except : - pass - - 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.node_selected = [] - self.deplier = True - self.message='' - if self.code in ['Adao','ADAO','MAP'] : self.afficheApresInsert=True - else : self.afficheApresInsert=False - if self.code in ['TELEMAC',] : self.enteteQTree='premier' - else : self.enteteQTree='complet' - if self.code in ['Adao','ADAO','TELEMAC'] : self.affichePlie=True - else : self.affichePlie=False - - self.Commandes_Ordre_Catalogue =self.readercata.Commandes_Ordre_Catalogue - - #------- construction du jdc -------------- - - jdc_item = None - - self.nouveau=0 - if self.fichier is not None: # fichier jdc fourni - self.fileInfo = QFileInfo(self.fichier) - self.fileInfo.setCaching(0) - if jdc==None : - try : - self.jdc = self.readFile(self.fichier) - if self.salome : self.appliEficas.addJdcInSalome( self.fichier) - except : - print ("mauvaise lecture") - else : - self.jdc=jdc - if self.jdc is not None and 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) - self.nouveau=1 - - if self.jdc: - self.jdc.appli = self # a resorber - self.jdc.editor = self - self.jdc.lang = self.appli.langue - self.jdc.aReafficher=False - txt_exception = None - if not jdc: - self.jdc.analyse() - txt_exception = self.jdc.cr.get_mess_exception() - if txt_exception: - self.jdc = None - QApplication.restoreOverrideCursor() - self.affiche_infos(tr("Erreur fatale au chargement de %s",str(fichier)),Qt.red) - if (self.appliEficas.ssIhm == False) : QMessageBox.critical( self, tr("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 self.nouveau) and (self.appliEficas.ssIhm == False): - self.viewJdcRapport() - - - - if jdc_item and self.appliEficas.ssIhm==False: - self.tree = browser.JDCTree( jdc_item, self ) - self.appliEficas.construitMenu() - - - ############# - self.adjustSize() - - - #-------------------# 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 - - - self.saveFile() - - # lancement avec le .bat - path1 = os.path.abspath(os.path.join(os.path.abspath(__file__), '../', '../', 'PSEN_Eficas', 'PSEN')) - filer = open('temp.txt', 'r') - _path = [] - for line in filer: - _path.append(line) - filer.close() - - - if 'PF_PARAMETERS' in self.Ordre_Des_Commandes: - Python3_path = _path[2].replace('\n', '') - import subprocess - - # execfile - # 'PF_PARAMETERS' in self.readercata.Ordre_Des_Commandes - if 'PF_PARAMETERS' in self.Ordre_Des_Commandes: - WrapperFilePath = os.path.join(path1, 'PFWrapper.py') - p = subprocess.Popen([Python3_path + '/python.exe', WrapperFilePath]) - else: - WrapperFilePath = os.path.join(path1, 'PSSEWrapper.py') - 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() - #cmd = os.path.abspath(os.path.join(os.path.abspath(__file__), '../','../','PSEN_N1','run.py')) - #cmd = "from run import runPSEN_N1; dico="+str(dico) - - #textePython=("python "+ cmd + " "+ str(dico)) - #self._viewTextExecute( textePython,"psen_run",".sh") - - 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 generator.plugins.has_key('dicoImbrique'): - self.generator=generator.plugins['dicoImbrique']() - jdc_formate=self.generator.gener(self.jdc) - dico=self.generator.Dico - - ##to delete - fileDico = os.path.join(path1, 'dicoN1.py') #r'C:\Logiciels DER\PSEN_V16\Code\ProcessOutputs_Eficas\TreatOutputs\dicoN1.py' - f = open( str(fileDico), 'wb') - f.write("Dico =" + str(dico) ) - f.close() - - if 'PSSE_path' in dico['CASE_SELECTION']: - from Run import run - #self.appliEficas.close() - run(dico) - elif 'PF_path' in dico['CASE_SELECTION']: - import subprocess - RunPFfile = os.path.join(path1, 'RunPF.py') - Python3_path=dico['CASE_SELECTION']['Python3_path'] - p = subprocess.Popen([Python3_path + '/python.exe', RunPFfile]) - p.wait() - - - #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 generator.plugins.has_key('dicoImbrique'): - self.generator=generator.plugins['dicoImbrique']() - jdc_formate=self.generator.gener(self.jdc) - dico=self.getDico() #generator.Dico - - - for k in dico['CONTINGENCY_PROCESSING'].keys(): - - 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), 'wb') - 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 - - - #--------------------------------# - 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 _newJDC( self ,units = None): - #--------------------------------# - """ - Initialise un nouveau JDC vierge - """ - self.modified=1 - CONTEXT.unset_current_step() - - texte="" - if self.code == "CARMELCND" : texte=self._newJDCCND() - if self.code == "ZCRACKS" : texte=self._newZCRACKS() - if self.code == "TELEMAC" : texte=self._newTELEMAC() - if self.code == "PSEN" : texte = self._newPSEN() - if self.code == "PSEN_N1" : texte = self._newPSEN_N1() - - if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC - - #if self.code == "CF" : texte = self._new_CF() - # texte=self.newTexteCND - - jdc=self.readercata.cata[0].JdC( procedure =texte, - appli=self, - cata=self.readercata.cata, - cata_ord_dico=self.readercata.cata_ordonne_dico, - rep_mat=self.CONFIGURATION.rep_mat - ) - jdc.lang = self.appli.langue - if units is not None: - jdc.recorded_units=units - jdc.old_recorded_units=units - ## PNPN est ce que la ligne suivante est bien utile ? - if texte == "" :jdc.analyse() - return jdc - - #--------------------------------# - def _newJDCInclude( self ,units = None): - #--------------------------------# - """ - Initialise un nouveau JDC vierge - """ - import Extensions.jdc_include - JdC_aux=Extensions.jdc_include.JdC_include - 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 - - - #-------------------------------# - def readFile(self, fn): - #--------------------------------# - """ - Public slot to read the text from a file. - @param fn filename to read from (string or QString) - """ - fn = six.text_type(fn) - - # ------------------------------------------------------------------------------------ - # charge le JDC - # ------------------------------------------------------------------------------------ - - jdcName=os.path.basename(fn) - # Il faut convertir le contenu du fichier en fonction du format - if self.appliEficas.format_fichier_in in convert.plugins: - # Le convertisseur existe on l'utilise - #appli = self - p=convert.plugins[self.appliEficas.format_fichier_in]() - p.readfile(fn) - if p.text=="" : self.nouveau=1 - pareil,texteNew=self.verifieCHECKSUM(p.text) - #if texteNew == "" - if pareil == False and (self.appliEficas.ssIhm == False) : - QMessageBox.warning( self, tr("fichier modifie"),tr("Attention! fichier change hors EFICAS")) - p.text=texteNew - memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text) - if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew) - p.text=texteNew - text=p.convert('exec',self.appliEficas) - if not p.cr.estvide(): - self.affiche_infos("Erreur a la conversion",Qt.red) - else : - self.affiche_infos("Type de fichier non reconnu",Qt.red) - if self.appliEficas.ssIhm == False: - QMessageBox.critical( self, tr("Type de fichier non reconnu"), - tr("EFICAS ne sait pas ouvrir le type de fichier %s" ,self.appliEficas.format_fichier_in)) - return None - - CONTEXT.unset_current_step() - 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 - nouveauTitre=self.titre+" "+os.path.basename(self.fichier) - self.appliEficas.setWindowTitle(nouveauTitre) - return jdc - - - #-----------------------# - def get_source(self,file): - #-----------------------# - - # Il faut convertir le contenu du fichier en fonction du format - if self.format in convert.plugins : - # Le convertisseur existe on l'utilise - p=convert.plugins[self.format]() - p.readfile(file) - text=p.convert('execnoparseur') - if not p.cr.estvide(): - self.affiche_infos("Erreur a la conversion",Qt.red) - return text - else: - # Il n'existe pas c'est une erreur - self.affiche_infos("Type de fichier non reconnu",Qt.red) - QMessageBox.critical( self, tr("Type de fichier non reconnu"),tr("EFICAS ne sait pas ouvrir ce type de fichier")) - return None - - #-----------------------------------------------------------------------# - def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600): - #--------------------------------------------------------------------# - w = ViewText( self.QWParent,self ,caption,txt,largeur,hauteur) - w.show() - # - - #----------------------------------------------# - def __generateTempFilename(self, prefix, suffix): - #----------------------------------------------# - import tempfile - (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix) - os.close(fd) - return filename - # - - - #----------------------------------------------# - def _viewTextExecute(self, txt, prefix, suffix): - #----------------------------------------------# - 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.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 readFromStdErrQT4(self): - a=self.monExe.readAllStandardError() - self.w.view.append(QString.fromUtf8(a.data(),len(a))) ; - - def readFromStdOutQT4(self) : - a=self.monExe.readAllStandardOutput() - self.w.view.append(QString.fromUtf8(a.data(),len(a))) ; - - #-----------------------# - def generDico(self): - #-----------------------# - if 'dico' in generator.plugins: - self.generator=generator.plugins['dico']() - jdc_formate=self.generator.gener(self.jdc) - dico=self.generator.Dico - return dico - - #-----------------------# - def gestionParam(self): - #-----------------------# - w = MonWidgetCreeParam( self) - w.show() - - #-----------------------# - def viewJdcSource(self): - #-----------------------# - if self.fichier == None : return - f=open(self.fichier,'r') - texteSource=f.read() - f.close() - self._viewText(texteSource, "JDC_SOURCE") - - #-----------------------# - def viewJdcPy(self): - #-----------------------# - strSource = str( self.getTextJDC(self.format) ) - self._viewText(strSource, "JDC_RESULTAT") - - #-----------------------# - def viewJdcRapport(self): - #-----------------------# - strRapport = six.text_type( self.jdc.report() ) - # on ajoute les regles - - self._viewText(strRapport, "JDC_RAPPORT") - - #-----------------------# - def viewJdcRegles(self): - #-----------------------# - if self.tree :self.tree.AppelleBuildLBRegles() - - - #----------------# - def closeIt(self): - #----------------# - """ - Public method called by the viewmanager to finally get rid of us. - """ - if self.jdc: - self.jdc.supprime() - self.close() - - #----------------------------------------------# - def affiche_infos(self,message,couleur=Qt.black): - #----------------------------------------------# - if self.sb: - 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): - #------------------------------# - # appele par I_MACRO_ETAPE - QMessageBox.information( self, titre, message) - - #-----------------------------------# - def affiche_commentaire(self,message): - #-----------------------------------# - self.labelCommentaire.setText(message) - QTimer.singleShot(6000, self.rendInvisible) - - #----------------------# - def rendInvisible(self): - #----------------------# - self.labelCommentaire.setText("") - - #-------------------# - def initModif(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 chercheNoeudSelectionne(self,copie=1): - #---------------------------------------# - """ - 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 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() - 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() - 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.get_child(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.affiche_infos("Copie refusee",Qt.red) - if noeudACopier.treeParent.editor != noeudOuColler.treeParent.editor: - try : - nom=noeudACopier.item.sd.nom - child.item.nomme_sd(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.affiche_infos("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"): - print ('je pass la') - 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=[] - - # on rend la copie a nouveau possible en liberant le flag edit - self.QWParent.edit="copier" - noeudACopier.select() - - #----------------------------------# - 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 getFileName(self): - #---------------------# - return self.fichier - - #---------------------------# - 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.CONFIGURATION.savedir, - tr('Wrapper Files (*.xml);;''All Files (*)')) - return fichier - - #--------------------------------------------------# - def writeFile(self, fn, txt = None,formatLigne="beautifie"): - #--------------------------------------------------# - """ - Public slot to write the text to a file. - - @param fn filename to write to string - @return flag indicating success - """ - - fn = six.text_type(fn) - - if txt == None : - txt = self.getTextJDC(self.format,formatLigne=formatLigne) - eol = '\n' - if len(txt) >= len(eol): - if txt[-len(eol):] != eol: - txt += eol - else: - txt += eol - txt=self.ajoutVersionCataDsJDC(txt) - checksum=self.getChecksum(txt) - txt=txt+checksum - if self.code=="TELEMAC" : return 1 - try: - f = open(fn, 'w') - f.write(txt) - f.close() - return 1 - except IOError as why: - if (self.appliEficas.ssIhm == False): - QMessageBox.critical(self, tr('Sauvegarde du Fichier'), - tr('Le fichier')+str(fn) + tr('n a pas pu etre sauvegarde : ') + str(why)) - else : - print (why) - return 0 - - #-----------------------------------------------------------# - def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"): - #-----------------------------------------------------------# - if self.code == "MAP" and not(format in generator.plugins): format = "MAP" - if format in generator.plugins: - - # Le generateur existe on l'utilise - self.generator=generator.plugins[format]() - try : - jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.CONFIGURATION,appli=self.appliEficas) - if pourRun : jdc_formate=self.generator.textePourRun - if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico - except ValueError as e: - QMessageBox.critical(self, tr("Erreur a la generation"),str(e)) - return - - if not self.generator.cr.estvide(): - self.affiche_infos(tr("Erreur a la generation"),Qt.red) - QMessageBox.critical( self, tr("Erreur a la generation"),tr("EFICAS ne sait pas convertir ce JDC")) - return "" - else: - return jdc_formate - else: - # Il n'existe pas c'est une erreur - self.affiche_infos(tr("Format %s non reconnu" , self.format),Qt.red) - QMessageBox.critical( self, "Format non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format)) - return "" - - #----------------------# - def getDico(self): - #---------------------# - if 'dicoImbrique' in generator.plugins: - self.generator=generator.plugins['dicoImbrique']() - jdc_formate=self.generator.gener(self.jdc) - dico=self.generator.Dico - return dico - else : - self.affiche_infos(tr("Format %s non reconnu" , self.format),Qt.red) - QMessageBox.critical( self, "Format non reconnu" ,tr("EFICAS ne sait pas convertir le JDC selon le format "+ self.format)) - return "" - - - #------------# - def run(self): - #------------# - fonction="run"+self.code - #print fonction - 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,) - - #---------------# - 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: - 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 - 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.format) - 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.appli.code in DictExtensions: - chaine1=DictExtensions[self.appli.code]+" (*."+DictExtensions[self.appli.code]+");;" - extensions= tr(chaine1+ "All Files (*)") - else : - extensions= tr("JDC (*.comm);;" "All Files (*)") - - if self.appli.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 %s existe deja.", six.text_type(fn))) - 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.CONFIGURATION, "savedir"): path=self.CONFIGURATION.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() - return - - - #-----------------------------------------# - def chercheGroupes(self): - #-----------------------------------------# - listeMA,listeNO=self.getTextJDC("GroupMA") - return listeMA,listeNO - - #-----------------------------------------# - def chercheDico(self): - #-----------------------------------------# - dicoCourant={} - format = self.appliEficas.format_fichier - if format in generator.plugins: - # Le generateur existe on l'utilise - self.generator=generator.plugins[format]() - jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.CONFIGURATION) - dicoCourant=self.generator.dico - return dicoCourant - - - - #-----------------------------------------# - def handleAjoutGroup(self,listeGroup): - #-----------------------------------------# - try : - #if 1: - from ajoutGroupe import handleAjoutGroupFiltre - #print listeGroup - handleAjoutGroupFiltre(self,listeGroup) - #print "apres handleAjoutGroupFiltre" - except : - #else : - pass - - #-----------------------------------------------------------------# - def saveFileLegerAs(self, fileName = None) : - #-----------------------------------------------------------------# - if fileName != None : - self.fichier = fileName - return self.saveFileLeger() - return self.saveFileLeger() - - #-----------------------------------------------------------------# - def saveFileLeger(self, path = None, saveas= 0,formatLigne="beautifie"): - #-----------------------------------------------------------------# - extension='.casR' - fn = self.fichier - #saveas=True # Pour forcer le nom - self.generator=generator.plugins[self.format]() - if self.fichier is None or saveas: - if path is None: path=self.CONFIGURATION.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(six.text_type(fn)) - self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0] - fn = six.text_type(QDir.toNativeSeparators(fn)) - - self.fichier = os.path.splitext(fn)[0]+extension - - if hasattr(self.generator, "writeLeger"): - self.generator.writeLeger(self.fichier,self.jdc,config=self.appliEficas.CONFIGURATION,appli=self.appliEficas) - - 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 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.appli.code in DictExtensions : - extension=DictExtensions[self.appli.code] - else : - extension='.comm' - - newName = None - fn = self.fichier - if self.fichier is None or saveas: - if path is None: path=self.CONFIGURATION.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(six.text_type(fn)) - self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0] - fn = six.text_type(QDir.toNativeSeparators(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() - - if self.jdc.isvalid() != 0 and hasattr(self.generator, "writeDefault"): - self.generator.writeDefault(fn) - elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"): - self.generator.writeDefault(fn) - - 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 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 - """ - if fileName != None : - self.fichier = fileName - return self.saveFile() - return self.saveFile(path,1,"beautifie") - - - - #---------------------------------------------# - def getFile(self,unite=None,fic_origine = ''): - #---------------------------------------------# - # appele par I_JDC - ulfile = None - jdcText = "" - - titre = "" - - if 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 = 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) - fn = QFileDialog.getOpenFileName(self.appliEficas, - titre, - self.appliEficas.CONFIGURATION.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(six.text_type(fn)) - self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0] - - # On utilise le convertisseur defini par format_fichier - source=self.get_source(ulfile) - if source: - # On a reussia convertir le fichier self.ulfile - jdcText = source - else: - # Une erreur a ete rencontree - jdcText = '' - return ulfile, jdcText - - #-----------------------------------# - def updateJdc(self, itemApres,texte): - #------------------------------------# - # ajoute une etape de JdC a partir d un texte - monItem=itemApres - etape=monItem.item.object - CONTEXT.set_current_step(etape) - etape.build_includeInclude(texte) - 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.set_current_step(etape) - try : - ok=etape.build_includeEtape(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 ajoutMCFact(self,etape,MCFils,listeAvant=()): - #----------------------------------------------# - # dans le JDC - print ('ajoutMCFact') - ouChercher=etape - print (ouChercher) - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - print (mot) - print (ouChercher) - monMC=etape.get_child(ouChercher,restreint="oui") - if monMC== None : monMC= ouChercher.addentite(MCFils) - monMC.isvalid() - - #-------------------------------------# - def getValeur(self,nomEtape,MCFils,listeAvant=()): - #-------------------------------------# - # dans le JDC - - ouChercher=None - for e in self.jdc.etapes: - if e.nom == nomEtape : ouChercher=e; break - if ouChercher==None : return None - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - #print (mot, ouChercher) - if ouChercher==None : return None - monMC=ouChercher.get_child(MCFils,restreint="oui") - if monMC== None : return None - return monMC.valeur - - #-----------------------------------------------------------# - def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()): - #--------------------------------------------------------# - # dans le JDC - - ouChercher=None - for e in self.jdc.etapes: - if e.nom == nomEtape : ouChercher=e; break - if ouChercher==None : return None - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - #print (mot, ouChercher) - if ouChercher==None : return None - monMC=ouChercher.get_child(MCFils,restreint="oui") - monMC.setValeur(valeur) - monMC.isvalid() - - - #-------------------------------------# - def deleteEtape(self,etape): - #-------------------------------------# - self.jdc.suppentite(etape) - - #-------------------------------------# - def deleteMC(self,etape,MCFils,listeAvant=()): - #-------------------------------------# - ouChercher=etape - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - monMC=ouChercher.get_child(MCFils,restreint="oui") - if monMC != None : ouChercher.suppentite(monMC) - ouChercher.state='changed' - ouChercher.isvalid() - - #-------------------------------------# - def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()): - #-------------------------------------# - print('debut ajoutMC') - ouChercher=etape - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - monMC=etape.get_child(ouChercher,restreint="oui") - print( monMC) - if monMC== None : monMC= ouChercher.addentite(MCFils) - monMC.valeur=valeurs - monMC.val=valeurs - monMC.state='changed' - monMC.isvalid() - print(monMC) - - - #-----------------------------------------------------------# - def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()): - #-----------------------------------------------------------# - ouChercher=etape - for mot in listeAvant : - ouChercher=ouChercher.get_child(mot,restreint="oui") - if ouChercher ==None : print( 'SOUCI'); return - monMC=ouChercher.get_child(MCFils,restreint="oui") - if monMC== None : monMC= ouChercher.addentite(MCFils) - monMC.definition.into=valeurs - monMC.state='changed' - monMC.isvalid() - - #-------------------------------------# - def changeIntoDefMC(self,etape,listeMC,valeurs): - #-------------------------------------# - definitionEtape=getattr(self.jdc.cata[0],etape) - ouChercher=definitionEtape - if len(listeMC) > 1 : - for mc in listeMC[0:-1]: - mcfact=ouChercher.entites[mc] - ouChercher=mcfact - - mcAccas=ouChercher.entites[listeMC[-1]] - mcAccas.into=valeurs - - #-------------------------------------------------------------# - def deleteDefinitionMC(self,etape,listeAvant,nomDuMC): - #-------------------------------------------------------------# - #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC - definitionEtape=getattr(self.jdc.cata[0],etape) - ouChercher=definitionEtape - for k in listeAvant : - ouChercher=ouChercher.entites[k] - MCADetruire=ouChercher.entites[nomDuMC] - ouChercher.ordre_mc.remove(nomDuMC) - del ouChercher.entites[nomDuMC] - del self.dicoNouveauxMC[nomDuMC] - - - #-------------------------------------------------------------# - def ajoutDefinitionMC(self,etape,listeAvant,nomDuMC,typ,**args): - #-------------------------------------------------------------# - print('debut ajoutDefinitionMC') - definitionEtape=getattr(self.jdc.cata[0],etape) - ouChercher=definitionEtape - for k in listeAvant : - ouChercher=ouChercher.entites[k] - from Accas import A_SIMP - Nouveau=A_SIMP.SIMP(typ,**args) - Nouveau.pere=ouChercher - Nouveau.nom=nomDuMC - Nouveau.ordre_mc=[] - ouChercher.entites[nomDuMC]=Nouveau - ouChercher.ordre_mc.append(nomDuMC) - self.dicoNouveauxMC[nomDuMC]=('ajoutDefinitionMC',etape,listeAvant,nomDuMC,typ,args) - print( self.dicoNouveauxMC) - print('fin ajoutDefinitionMC') - - #----------------------------------------------------# - def changeIntoMCandSet(self,etape,MCFils,into,valeurs): - #----------------------------------------------------# - monMC=etape.get_child(MCFils,restreint="oui") - if monMC== None : monMC= etape.addentite(MCFils) - monMC.definition.into=into - monMC.valeur=valeurs - monMC.val=valeurs - monMC.state='changed' - monMC.isvalid() - - - - - #-------------------------------------------------------------------# - def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()): - #-------------------------------------------------------------------# - # dans le JDC - for e in self.jdc.etapes: - if e.nom == nomEtape : ouChercher=e; break - - for mot in listeAvant : - try : - ouChercher=ouChercher.get_child(mot,restreint="oui") - # Le mot clef n est pas la - except : return 0 - try : - monMC=ouChercher.get_child(MCFils,restreint="oui") - # Le mot clef n est pas la - except : return 0 - if monMC == None : return 0 - - if hasattr(monMC.definition,'into') : - if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into() - else : maListeDeValeur=monMC.definition.into - else : - return 0 - - monMC.state='changed' - return 1 - - #-------------------------------------# - def changeDefautDefMC(self,nomEtape,listeMC,valeurs): - #-------------------------------------# - # dans le MDD - - #if isinstance (etape, str): - # for e in self.jdc.etapes: - # if e.nom == etape : etape=e; break - #if etape == None : return - definitionEtape=getattr(self.jdc.cata[0],nomEtape) - ouChercher=definitionEtape - if len(listeMC) > 1 : - - for mc in listeMC[0:-1]: - mcfact=ouChercher.entites[mc] - ouChercher=mcfact - - mcAccas=ouChercher.entites[listeMC[-1]] - mcAccas.defaut=valeurs - return 1 - - - - - #---------------------------------------------------------------------# - def ajoutDefinitionMCFact(self,nomEtape,listeAvant,nomDuMC,listeMC,**args): - #---------------------------------------------------------------------# - # dans le MDD - print ('ajoutDefinitionMCFact', nomDuMC) - definitionEtape=getattr(self.jdc.cata[0],nomEtape) - ouChercher=definitionEtape - for k in listeAvant : - ouChercher=ouChercher.entites[k] - from Accas import A_SIMP - for mc in listeMC : - nomMC=mc[0] - typMC=mc[1] - argsMC=mc[2] - nouveauMC=A_SIMP.SIMP(typMC,**argsMC) - nouveauMC.nom=nomMC - args[nomMC]=nouveauMC - from Accas import A_FACT - nouveauFact=A_FACT.FACT(**args) - nouveauFact.pere=ouChercher - nouveauFact.nom=nomDuMC - from Editeur.autre_analyse_cata import traite_entite - traite_entite(nouveauFact,[]) - ouChercher.entites[nomDuMC]=nouveauFact - ouChercher.ordre_mc.append(nomDuMC) - self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args) - #print self.dicoNouveauxMC - - - - #-------------------------------------# - def ajoutVersionCataDsJDC(self,txt): - #-------------------------------------# - if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt - ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata[0].VERSION_CATALOGUE+":FIN VERSION_CATALOGUE\n" - texte=txt+ligneVersion - return texte - - #-------------------------------------# - def verifieVersionCataDuJDC(self,text): - #-------------------------------------# - memeVersion=False - indexDeb=text.find("#VERSION_CATALOGUE:") - indexFin=text.find(":FIN VERSION_CATALOGUE") - if indexDeb < 0 : - self.versionCataDuJDC="sans" - textJDC=text - else : - self.versionCataDuJDC=text[indexDeb+19:indexFin] - textJDC=text[0:indexDeb]+text[indexFin+23:-1] - - self.versionCata="sans" - if hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata[0].VERSION_CATALOGUE - - if self.versionCata==self.versionCataDuJDC : memeVersion=True - return memeVersion,textJDC - - #-------------------------------# - def traduitCatalogue(self,texte): - #-------------------------------# - nomTraducteur="traduit"+self.readercata.code+self.versionCataDuJDC+"To"+self.versionCata - sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../Traducteur"))) - try : - traducteur=__import__(nomTraducteur) - monTraducteur=traducteur.MonTraducteur(texte) - nouveauTexte=monTraducteur.traduit() - return nouveauTexte - except : - return texte - - - #------------------------------# - def verifieCHECKSUM(self,text): - #------------------------------# - indexDeb=text.find("#CHECKSUM:") - if indexDeb < 0 : - return 1, text - indexFin=text.find(":FIN CHECKSUM") - checkAvant=text[indexDeb:indexFin+13] - textJDC=text[0:indexDeb]+text[indexFin+13:-1] - checksum=self.getChecksum(textJDC) - pareil=(checkAvant==checksum) - return pareil, textJDC - - #---------------------------# - def getChecksum(self,texte): - #---------------------------# - newtexte=texte.replace('"','\\"') - commande='echo "'+newtexte+'"|md5sum' - a=os.popen(commande) - checksum=a.read() - a.close() - ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM" - return ligne - - - #---------------------------# - def _new_CF(self): - #---------------------------# - texte="CONDUITE_FORCEE();" - return texte - - - #---------------------------# - def _newTELEMAC(self): - #---------------------------# - #texte="INITIALIZATION();BOUNDARY_CONDITIONS();GENERAL_PARAMETERS();PHYSICAL_PARAMETERS();NUMERICAL_PARAMETERS();" - texte="COMPUTATION_ENVIRONMENT();HYDRO();GENERAL_PARAMETERS();NUMERICAL_PARAMETERS()" - #texte="TRACERS();" - return texte - - #---------------------------# - def _newPSEN(self): - #---------------------------# - if 'PF_PARAMETERS' in self.Ordre_Des_Commandes: - texte = "DIRECTORY() ;PF_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;" - else: - texte = "DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;" - # texte="" - return texte - - #---------------------------# - def _newPSEN_N1(self): - #---------------------------# - texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); " - #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); " - return texte - - #---------------------------# - - #---------------------------# - def _newZCRACKS(self): - #---------------------------# - texte="MAILLAGES();REMESHING();" - return texte - - #---------------------------# - def _newJDCCND(self): - #---------------------------# - extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)') - - #if self.salome == 0 : - QMessageBox.information( self, - tr("Fichier Med"), - tr("Veuillez selectionner un fichier Med")) - QSfichier = QFileDialog.getOpenFileName(self.appliEficas, - caption='Fichier Med', - filter=extensions) - QSfichier=QSfichier[0] - self.fichierMED=QSfichier - from acquiertGroupes import getGroupes - erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED) - if erreur != "" : print ("a traiter") - texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n" - texteSources="" - texteCond="" - texteNoCond="" - texteVcut="" - texteZs="" - for groupe in self.listeGroupes : - if groupe[0:8]=='CURRENT_': - texteSources +=groupe[8:]+"=SOURCE(" - texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n" - if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n" - if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n" - if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n" - if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n" - texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs - self.newTexteCND=texte - self.modified=1 - return texte - - - #---------------------------# - def BoutonFileSelected(self): - #---------------------------# - - QSfichier=self.openfile.selectedFiles()[0] - self.fichierMED=str(QSfichier) - from acquiertGroupes import getGroupes - erreur,self.listeGroupes,self.nomMaillage=getGroupes(self.fichierMED) - if erreur != "" : print ("a traiter") - - #----------------------------- - def BoutonSalomePressed(self): - #---------------------------- - Msg,self.listeGroupes=self.appliEficas.ChercheGrpMailleInSalome() - self.fichierMED="A_partir_de_SMESH" - self.nomMaillage="A_partir_de_SMESH" - self.openfile.close() - - - #----------------------------------------- - def initSplitterSizes(self, nbWidget=3): - #----------------------------------------- - #print ("je passe ds initSplitterSizes", nbWidget) - - if self.code in [ 'Adao', 'ADAO', ] : self.splitterSizes3=[1,1550,150] - elif self.code in [ 'MAP'] : self.splitterSizes3=[700,300] - else : self.splitterSizes3=[150,1000,300] - - if self.code in [ 'Adao', 'ADAO', ] : 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 - 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 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 - -if __name__ == "__main__": - self.code='ASTER' - name='prefs_'+prefs.code - prefsCode=__import__(name) - - - if hasattr(prefsCode,'encoding'): - # Hack pour changer le codage par defaut des strings - import sys - reload(sys) - sys.setdefaultencoding(prefs.encoding) - del sys.setdefaultencoding - # Fin hack - -# code=options.code -# - app = QApplication(sys.argv) - mw = JDCEditor(None,'azAster.comm') - app.setMainWidget(mw) - app.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()")) - mw.show() - - res = app.exec_loop() - sys.exit(res) diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index ff65676d..878cfc84 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -65,7 +65,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # Methodes faisant appel a ssIhm # ---------------------------------------- - def __init__ (self,appli,fichier = None, jdc=None, QWParent=None, units = None, include=0): + def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, units = None, include=0): #------------------------------------------------------------------------------------------ @@ -77,11 +77,11 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): self.fenetreCentraleAffichee=None self.dejaDansPlieTout=False self.listeDesListesOuvertes=set() - if appli!=None and hasattr(appli,"statusBar"): self.sb = appli.statusBar() + if appliEficas!=None and hasattr(appliEficas,"statusBar"): self.sb = appliEficas.statusBar() else : self.sb = None self.QWParent=QWParent - JDCEditorSsIhm. __init__ (self,appli,fichier, jdc,units,include) + JDCEditorSsIhm. __init__ (self,appliEficas,fichier, jdc,units,include) if self.jdc: comploader.chargerComposants() self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc ) @@ -551,7 +551,6 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): def run(self): #------------# fonction="run"+self.code - #print fonction if fonction in JDCEditor.__dict__: JDCEditor.__dict__[fonction](self,) #------------# @@ -564,6 +563,11 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # --------------------------------------------- # Methodes Non Crees dans ssIHM # --------------------------------------------- + #---------------# + def runVP(self): + #---------------# + texte=self.getTextJDC("MAPVp",pourRun=1) + print (texte) #---------------# def runMAP(self): @@ -660,13 +664,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): #-----------------------------------------------------# def determineNomFichier(self,path,extension): #-----------------------------------------------------# - if self.appli.code in DictExtensions: - chaine1=DictExtensions[self.appli.code]+" (*."+DictExtensions[self.appli.code]+");;" + 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.appli.code == "MAP" : + if self.appliEficas.code == "MAP" : extensions = extensions + ";; Run (*.input);;" fn = QFileDialog.getSaveFileName( self, @@ -792,7 +796,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): self.fichierComplet = os.path.splitext(fn)[0]+extension if hasattr(self.generator, "writeComplet"): - self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas) + self.generator.writeComplet(self.fichierComplet,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas) if self.salome : self.appliEficas.addJdcInSalome( self.fichierComplet) @@ -816,8 +820,8 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): if not self.modified and not saveas: return (0, None) # do nothing if text wasn't changed - if self.appli.code in DictExtensions : - extension=DictExtensions[self.appli.code] + if self.appliEficas.code in DictExtensions : + extension=DictExtensions[self.appliEficas.code] else : extension='.comm' diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py index 7a2d4be4..3ff669d8 100755 --- a/InterfaceQT4/editorSsIhm.py +++ b/InterfaceQT4/editorSsIhm.py @@ -53,13 +53,12 @@ class JDCEditorSsIhm : # Methodes Communes ou appelees depuis avec Ihm # --------------------------------------------- - def __init__ (self,appli,fichier = None, jdc = None, units = None, include=0 ): + def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ): #------------------------------------------------------------------------------# # paticularisee avec Ihm if debug : print ('dans le init de JDCEditorSsIhm') - self.appliEficas = appli - self.appli = appli + self.appliEficas = appliEficas self.fichier = fichier self.fichierComplet = fichier self.jdc = jdc @@ -70,7 +69,7 @@ class JDCEditorSsIhm : self.dict_reels = {} self.liste_simp_reel = [] - if appli != None : self.salome = self.appliEficas.salome + if self.appliEficas != None : self.salome = self.appliEficas.salome else : self.salome = 0 # ces attributs sont mis a jour par definitCode appelee par newEditor @@ -162,9 +161,8 @@ class JDCEditorSsIhm : self.nouveau=1 if self.jdc: - self.jdc.appli = self # a resorber self.jdc.editor = self - self.jdc.lang = self.appli.langue + self.jdc.lang = self.appliEficas.langue self.jdc.aReafficher=False txt_exception = None if not jdc: @@ -223,7 +221,7 @@ class JDCEditorSsIhm : #jdc=self.readercata.cata[0].JdC(procedure=text, jdc=self.readercata.cata.JdC(procedure=text, - appli=self, + appliEficas=self, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, nom=jdcName, @@ -255,13 +253,13 @@ class JDCEditorSsIhm : #jdc=self.readercata.cata[0].JdC( procedure =texte, #print (self.readercata.cata) jdc=self.readercata.cata.JdC( procedure =texte, - appli=self, + appliEficas=self, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, rep_mat=self.maConfiguration.rep_mat ) - jdc.lang = self.appli.langue + jdc.lang = self.appliEficas.langue if units is not None: jdc.recorded_units=units jdc.old_recorded_units=units @@ -286,7 +284,7 @@ class JDCEditorSsIhm : #jaux=self.readercata.cata[0].JdC( procedure="", jaux=self.readercata.cata.JdC( procedure="", - appli=self, + appliEficas=self, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, rep_mat=self.maConfiguration.rep_mat, @@ -295,7 +293,7 @@ class JDCEditorSsIhm : jaux.analyse() J=JdC_aux( procedure="", - appli=self, + appliEficas=self, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, jdc_pere=jaux, @@ -445,7 +443,7 @@ class JDCEditorSsIhm : # Le generateur existe on l'utilise self.generator=generator.plugins[format]() try : - jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appli=self.appliEficas) + jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas) if pourRun : jdc_formate=self.generator.textePourRun if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico except ValueError as e: @@ -536,7 +534,7 @@ class JDCEditorSsIhm : self.generator=generator.plugins[self.format]() print (self.generator) if hasattr(self.generator, "writeComplet"): - self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas) + self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas) # --------------------------------------------- diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py index 9a375d6d..a9ad4d76 100755 --- a/InterfaceQT4/eficas_go.py +++ b/InterfaceQT4/eficas_go.py @@ -107,7 +107,7 @@ def genereXML(code=None,fichier=None,ssCode=None,multi=False,langue='en',debug=T monEditeur=JDCEditorSsIhm(monEficasSsIhm,fichier) fichierXML=fichier[:fichier.rfind(".")]+'.xml' monEditeur.saveFile(fichierXML) - print (fichierXML) + monEditeur.generator.writeDefault(fichierXML) def lanceEficas_ssIhm(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en'): diff --git a/InterfaceQT4/groupe.py b/InterfaceQT4/groupe.py index 4413124f..53baea0f 100644 --- a/InterfaceQT4/groupe.py +++ b/InterfaceQT4/groupe.py @@ -61,12 +61,13 @@ class Groupe(QWidget,FacultatifOuOptionnel): self.listeMCAAjouter=[] self.dictMCVenantDesBlocs={} if hasattr(self,'RBDeplie') : self.RBDeplie.clicked.connect(self.setDeplie) - if hasattr(self,'RBPlie') : self.RBPlie.clicked.connect( self.setPlie) + self.setAcceptDrops(True) - if hasattr (self, 'commandesLayout'): - spacerItem = QSpacerItem(20, 5, QSizePolicy.Minimum, QSizePolicy.Expanding) - self.commandesLayout.addItem(spacerItem) + #if hasattr (self, 'commandesLayout'): + # print (' j ajoute un spacer dans ', self.node.item.nom) + # spacerItem = QSpacerItem(20, 5, QSizePolicy.Minimum, QSizePolicy.Expanding) + # self.commandesLayout.addItem(spacerItem) def donneFocus(self): for fenetre in self.listeFocus: @@ -82,7 +83,6 @@ class Groupe(QWidget,FacultatifOuOptionnel): for node in self.node.children: # non return mais continue car il faut tenir compte des blocs if node.appartientAUnNoeudPlie==True : continue - #print ("je suis apres le if pour ",node.item.nom) widget=node.getPanelGroupe(self,self.maCommande) #print ("widget pour ", node.item.nom, widget) self.listeFocus.append(node.fenetre) @@ -114,19 +114,8 @@ class Groupe(QWidget,FacultatifOuOptionnel): def afficheOptionnel(self): if self.editor.maConfiguration.closeOptionnel : return liste,liste_rouge=self.ajouteMCOptionnelDesBlocs() - listeSsLesPlus = [] - # ------ - genea =self.obj.getGenealogie() - listeMcPossible = self.obj.getListeMcOrdonnee(genea,self.jdc.cata_ordonne_dico) - listeMcPresents = self.obj.listeMcPresents() - for MC in liste : - if MC not in listeMcPresents : listeSsLesPlus.append(MC) - - #print (liste,liste_rouge,listeSsLesPlus,self) self.monOptionnel=self.editor.widgetOptionnel - #self.monOptionnel.afficheOptionnel(listeSsLesPlus,liste_rouge,self) self.monOptionnel.afficheOptionnel(liste,liste_rouge,self) - #self.monOptionnel.affiche(liste) def ajouteMCOptionnelDesBlocs(self): diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index 460c1453..f017edf0 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -47,88 +47,75 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): """ """ def __init__(self,node,editor,etape): + self.listeAffichageWidget=[] self.inhibe=0 self.ensure=0 editor.inhibeSplitter=1 Groupe.__init__(self,node,editor,None,etape.definition,etape,1,self) + spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding) + self.verticalLayoutCommande.addItem(spacerItem) editor.inhibeSplitter=0 - resize=0 - if node.item.getFr() != "" : - self.labelDoc.setText(node.item.getFr()) - resize=1 - else : self.labelDoc.close() - - if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close() + # Gestion du nom de L OPER si il est nomme + if not(hasattr(etape.definition,'sd_prod')) or (etape.definition.sd_prod==None): self.LENom.close() elif (hasattr(etape.definition,'sd_prod') and type(etape.definition.sd_prod)== types.FunctionType):self.LENom.close() elif (hasattr(etape, 'sdnom')) and etape.sdnom != "sansnom" and etape.sdnom != None: - self.LENom.setText(etape.sdnom) - resize=resize*1 + self.LENom.setText(etape.sdnom) else : - self.LENom.setText("") - resize=resize*1 - if resize : + self.LENom.setText("") + if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange) + self.racine=self.node.tree.racine + if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True) + + # Gestion de la doc de l objet + if node.item.getFr() != "" : + self.labelDoc.setText(node.item.getFr()) nouvelleSize=self.frameAffichage.height()+60 self.frameAffichage.setMinimumHeight(nouvelleSize) self.frameAffichage.resize(self.frameAffichage.width(),nouvelleSize) + else : self.labelDoc.close() - - + + # Gestion du nom de l etape maPolice= QFont("Times", 10,) self.setFont(maPolice) self.labelNomCommande.setText(tr(self.obj.nom)) - self.editor.maConfiguration.closeAutreCommande=False + # Gestion du Frame d affichage des autres commandes if self.editor.maConfiguration.closeAutreCommande == True : self.closeAutreCommande() else : - try : - self.bCatalogue.clicked.connect(self.afficheCatalogue) - self.bAvant.clicked.connect(self.afficheAvant) - self.bApres.clicked.connect(self.afficheApres) - except : - pass + self.bCatalogue.clicked.connect(self.afficheCatalogue) + self.bAvant.clicked.connect(self.afficheAvant) + self.bApres.clicked.connect(self.afficheApres) - if hasattr(self,'LENom'): self.LENom.returnPressed.connect(self.nomChange) - if self.editor.maConfiguration.closeFrameRechercheCommande==True : self.frameAffichage.close() self.closeAutreCommande() - if self.editor.code in ['CARMELCND',] : self.closeAutreCommande() - self.racine=self.node.tree.racine - if self.node.item.getIconName() == "ast-red-square" : self.LENom.setDisabled(True) self.setAcceptDrops(True) self.etablitOrdre() - if self.editor.code == "CARMELCND" : - self.RBPoubelle.close() # JDC Fige - return # Pas de MC Optionnels pour Carmel - if self.editor.maConfiguration.enleverPoubellePourCommande : self.RBPoubelle.close() # JDC Fige + + if self.editor.maConfiguration.pasDeMCOptionnels : return # Pas de MC Optionnels pour Carmel from .monWidgetOptionnel import MonWidgetOptionnel if self.editor.widgetOptionnel!= None : - self.monOptionnel=self.editor.widgetOptionnel + self.monOptionnel=self.editor.widgetOptionnel else : - self.editor.inhibeSplitter=1 - self.monOptionnel=MonWidgetOptionnel(self.editor) - self.editor.widgetOptionnel=self.monOptionnel - self.editor.splitter.addWidget(self.monOptionnel) - self.editor.ajoutOptionnel() - self.editor.inhibeSplitter=0 - self.monOptionnel=self.editor.widgetOptionnel - self.afficheOptionnel() - spacerItem = QSpacerItem(21, 500, QSizePolicy.Expanding, QSizePolicy.Expanding) - #spacerItem = QSpacerItem(21, 20, QSizePolicy.Preferred, QSizePolicy.Preferred) - #self.commandesLayout.addItem(spacerItem) - self.verticalLayoutCommande.addItem(spacerItem) - - #self.editor.restoreSplitterSizes() + self.editor.inhibeSplitter=1 + self.monOptionnel=MonWidgetOptionnel(self.editor) + self.editor.widgetOptionnel=self.monOptionnel + self.editor.splitter.addWidget(self.monOptionnel) + self.editor.ajoutOptionnel() + self.editor.inhibeSplitter=0 + self.monOptionnel=self.editor.widgetOptionnel + self.afficheOptionnel() #print "fin init de widget Commande" @@ -151,12 +138,12 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): # on s assure que ce n est pas un chgt de fenetre #print "je passe dans focusNextPrevChild" if self.editor.fenetreCentraleAffichee != self : return True - f=self.focusWidget() + f = self.focusWidget() if f not in self.listeAffichageWidget : i=0 while not hasattr (f,'AAfficher') : if f==None :i=-1; break - f=f.parentWidget() + f = f.parentWidget() if hasattr(f,'AAfficher') : f=f.AAfficher if i != -1 : i=self.listeAffichageWidget.index(f) else :i=self.listeAffichageWidget.index(f) @@ -201,10 +188,6 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): i=i+1 # si on boucle on perd l'ordre - def afficheNieme(self,n): - #print ('ds afficheNieme') - self.listeAffichageWidget[n].setFocus(7) - def afficheSuivant(self,f): #print ('ds afficheSuivant') try : @@ -247,7 +230,6 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): def focusInEvent(self,event): #print "je mets a jour dans focusInEvent de monWidget Commande " - if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel self.afficheOptionnel() @@ -269,17 +251,6 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): else : self.recentre() self.inhibeExpand=False - def reafficheSeulement(self,nodeAReafficher,index): - #print ('ds reafficheSeulement', nodeAReafficher) - parentNodeAReafficher=nodeAReafficher.parentQt - index=parentNodeAReafficher.commandesLayout.indexOf(nodeAReafficher) - oldFenetre=nodeAReafficher.node.fenetre - newWidget=nodeAReafficher.node.getPanelGroupe(parentNodeAReafficher,self,index) - nodeAReafficher.node.fenetre=newWidget - oldFenetre.setParent(None) - oldFenetre.close() - oldFenetre.deleteLater() - #print ("fin pour " , self.node.item.nom) def recentre(self): @@ -288,13 +259,7 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): s.horizontalScrollBar().setSliderPosition(self.avantH) s.verticalScrollBar().setSliderPosition(self.avantV) - def rendVisibleNoeud(self,node): - self.f=node.fenetre - #print "dans rendVisibleNoeud",self.f - QTimer.singleShot(1, self.rendVisible) - def rendVisible(self): - #print "dans rendVisible",self.f QApplication.processEvents() self.f.setFocus(7) self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(self.f) @@ -315,10 +280,10 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): if not(hasattr (self,'RBValide')) : return icon = QIcon() if self.node.item.object.isValid() : icon=QIcon(self.repIcon+"/ast-green-ball.png") - else : icon=QIcon(self.repIcon+"/ast-red-ball.png") + else : icon=QIcon(self.repIcon+"/ast-red-ball.png") nomIcone = self.node.item.getIconName() if nomIcone == "ast-yellow-square" : icon=QIcon(self.repIcon+"/ast-yel-ball.png") - if nomIcone == "ast-red-square" : self.LENom.setDisabled(True) + if nomIcone == "ast-red-square" : self.LENom.setDisabled(True) self.LENom.setDisabled(False) self.RBValide.setIcon(icon) diff --git a/InterfaceQT4/monWidgetSimpBool.py b/InterfaceQT4/monWidgetSimpBool.py index 5b12888f..53a60983 100644 --- a/InterfaceQT4/monWidgetSimpBool.py +++ b/InterfaceQT4/monWidgetSimpBool.py @@ -47,7 +47,9 @@ class MonWidgetSimpBool (Ui_WidgetSimpBool,Feuille): if valeur == None : return if valeur == True : self.RBTrue.setChecked(True) if valeur == False : self.RBFalse.setChecked(True) - + if self.monSimpDef.homo == 'constant' : + if valeur == True : self.RBFalse.setDisabled(True) + else : self.RBTrue.setDisabled(True) def boutonTrueClic(self): SaisieValeur.LEvaleurPressed(self,True) diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index 05b8db93..86a5f1fe 100755 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -92,8 +92,6 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): if hasattr (self, 'maConfiguration') and hasattr(self.maConfiguration,'taille') : self.taille=self.maConfiguration.taille else : self.taille=1700 - #if self.code in ['MAP',] : self.resize(1440,self.height()) - #else : self.resize(self.taille,self.height()) self.resize(self.taille,self.height()) diff --git a/InterfaceQT4/qtEficasSsIhm.py b/InterfaceQT4/qtEficasSsIhm.py index df16af25..c16a0c0f 100755 --- a/InterfaceQT4/qtEficasSsIhm.py +++ b/InterfaceQT4/qtEficasSsIhm.py @@ -131,14 +131,14 @@ class AppliSsIhm: def initEditor(self,fichier = None,jdc = None, units = None,include=0): if (hasattr(self, 'editor')) and self.editor != None : - print ('un seul editeur par appli') + print ('un seul editeur par application') sys.Exit() #self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include) self.editor = self.viewmanager.getNewEditorNormal() def initEditorNormal(self,fichier = None,jdc = None, units = None,include=0): if (hasattr(self, 'editor')) and self.editor != None : - print ('un seul editeur par appli') + print ('un seul editeur par application') sys.Exit() #self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include) self.editor = self.viewmanager.getNewEditorNormal() diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index 2ebb174b..a3232ea6 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -225,6 +225,7 @@ class ReaderCata (ReaderCataCommun): self.cata = self.importCata(self.fic_cata) # pointeur pour le dumpXSD self.cata.JdC.module=self.cata + if self.cata.JdC.fichierSource == None : self.cata.JdC.fichierSource = self.cata.__file__ self.cata.modeleMetier = modeleMetier if not self.cata : try: diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index bf33c7fa..575f5512 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -87,7 +87,7 @@ NONE = None def __init__(self, definition=None, procedure=None, cata=None, cata_ord_dico=None, parent=None, - nom='SansNom', appli=None, context_ini=None, **args): + nom='SansNom', appliEficas=None, context_ini=None, **args): self.procedure = procedure self.definition = definition self.cata = cata @@ -97,7 +97,7 @@ NONE = None self._build_reserved_kw_list() self.cata_ordonne_dico = cata_ord_dico self.nom = nom - self.appli = appli + self.appliEficas = appliEficas self.parent = parent self.context_ini = context_ini # On conserve les arguments supplementaires. Il est possible de passer @@ -149,8 +149,8 @@ NONE = None compte-rendu self.cr """ try: - #if self.appli != None: - # self.appli.afficheInfos( 'Compilation du fichier de commandes en cours ...') + #if self.appliEficas != None: + # self.appliEficas.afficheInfos( 'Compilation du fichier de commandes en cours ...') # Python 2.7 compile function does not accept unicode filename, so we encode it # with the current locale encoding in order to have a correct # traceback @@ -220,8 +220,8 @@ Causes possibles : if isinstance(sd, ASSD): self.sds_dict[sdnom] = sd - #if self.appli != None: - # self.appli.afficheInfos( + #if self.appliEficas != None: + # self.appliEficas.afficheInfos( # 'Interpretation du fichier de commandes en cours ...') # On sauve le contexte pour garder la memoire des constantes @@ -232,8 +232,8 @@ Causes possibles : exec(self.proc_compile, self.g_context) CONTEXT.unsetCurrentStep() - if self.appli != None: - self.appli.afficheInfos('') + if self.appliEficas != None: + self.appliEficas.afficheInfos('') except InterruptParsingError: # interrupt the command file parsing used by FIN to ignore the end @@ -441,10 +441,10 @@ Causes possibles : Retourne le nom du fichier correspondant a un numero d'unite logique (entier) ainsi que le source contenu dans le fichier """ - if self.appli: - # Si le JDC est relie a une application maitre, on delègue la + if self.appliEficas: + # Si le JDC est relie a une appliEficascation maitre, on delègue la # recherche - return self.appli.getFile(unite, fic_origine) + return self.appliEficas.getFile(unite, fic_origine) else: if unite != None: if os.path.exists("fort." + str(unite)): @@ -466,7 +466,7 @@ Causes possibles : Met le mode de traitement a PAR LOT ou a COMMANDE par COMMANDE en fonction de la valeur du mot cle PAR_LOT et - du contexte : application maitre ou pas + du contexte : appliEficascation maitre ou pas En PAR_LOT='NON', il n'y a pas d'ambiguite. d'analyse et juste avant la phase d'execution. @@ -475,11 +475,11 @@ Causes possibles : """ if user_value: self.parLot_user = parLot - if self.appli == None: - # Pas d application maitre + if self.appliEficas == None: + # Pas d appliEficascation maitre self.parLot = parLot else: - # Avec application maitre + # Avec appliEficascation maitre self.parLot = 'OUI' def accept(self, visitor): diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py index a9bcfc6f..c8710876 100644 --- a/Noyau/N_SIMP.py +++ b/Noyau/N_SIMP.py @@ -50,7 +50,7 @@ class SIMP(N_ENTITE.ENTITE): def __init__(self, typ,ang="", fr="", statut='f', into=None, intoSug = None,siValide = None, defaut=None, min=1, max=1, homo=1, position='local', val_min=float('-inf'), val_max=float('inf'), docu="", validators=None, nomXML=None, - sug=None,fenetreIhm=None, attribut=False, creeDesObjetsDeType = None): + sug=None,fenetreIhm=None, attribut=False, creeDesObjetsDeType = None, sortie='n'): """ Un mot-clé simple est caractérisé par les attributs suivants : - type : cet attribut est obligatoire et indique le type de valeur attendue @@ -72,6 +72,7 @@ class SIMP(N_ENTITE.ENTITE): - attribut : si projection XSD sur attribut - creeDesObjetsDeType : type des UserASSD si siValide en cree - nomXML : se projette en XSD avec un autre nom pour accepter les tirets + - sortie : force l ecriture dans le fichier de sortie (utile pour Telemac) """ #print (self) #import traceback @@ -112,6 +113,7 @@ class SIMP(N_ENTITE.ENTITE): self.attribut = attribut self.creeDesObjetsDeType = creeDesObjetsDeType self.nomXML = nomXML + self.sortie=sortie def verifCata(self): """ diff --git a/convert/autre_parseur.py b/convert/autre_parseur.py index 794f888a..aaa4377c 100644 --- a/convert/autre_parseur.py +++ b/convert/autre_parseur.py @@ -171,7 +171,7 @@ class PARSEUR_PYTHON(object): self.getOptions() return self.line - def getTexte(self,appli=None): + def getTexte(self,appliEficas=None): """ Retourne le texte issu de l'analyse """ diff --git a/convert/convert_TELEMAC.py b/convert/convert_TELEMAC.py index 2e934c09..08417508 100644 --- a/convert/convert_TELEMAC.py +++ b/convert/convert_TELEMAC.py @@ -93,31 +93,31 @@ class TELEMACparser(Pythonparser): - def convert(self, outformat, appli=None): + def convert(self, outformat, appliEficas=None): from Accas import A_BLOC, A_FACT, A_SIMP try : - self.dicoCasToCata = appli.readercata.dicoCasToCata + self.dicoCasToCata = appliEficas.readercata.dicoCasToCata except : self.dicoCasToCata = {} print ('pas de dicoCasToCata') - self.dicoInverse = appli.readercata.dicoInverse - self.dicoMC = appli.readercata.dicoMC - self.Ordre_Des_Commandes = appli.readercata.Ordre_Des_Commandes + self.dicoInverse = appliEficas.readercata.dicoInverse + self.dicoMC = appliEficas.readercata.dicoMC + self.Ordre_Des_Commandes = appliEficas.readercata.Ordre_Des_Commandes try : - self.TelemacdicoEn = appli.readercata.TelemacdicoEn + self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn except : self.TelemacdicoEn = {} print ('pas de TelemacdicoEn') try : - self.DicoEnumCasFrToEnumCasEn = appli.readercata.DicoEnumCasFrToEnumCasEn + self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn except : self.DicoEnumCasFrToEnumCasEn = {} print ('pas de DicoEnumCasFrToEnumCasEn') - if appli.langue=='fr' : + if appliEficas.langue=='fr' : #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn for k in self.DicoEnumCasFrToEnumCasEn : self.TelemacdicoEn[k]=self.DicoEnumCasFrToEnumCasEn[k] @@ -295,8 +295,8 @@ class TELEMACparser(Pythonparser): # ne sert plus - #appli.listeTelemac=self.dictSimp - appli.listeTelemac={} + #appliEficas.listeTelemac=self.dictSimp + appliEficas.listeTelemac={} if 'debut' in dicoComment : commentaire="COMMENTAIRE("+repr(dicoComment['debut'])+")\n" self.textePy=commentaire+self.textePy diff --git a/convert/convert_XML.py b/convert/convert_XML.py index 8d9f9b8e..c19648ab 100644 --- a/convert/convert_XML.py +++ b/convert/convert_XML.py @@ -60,7 +60,7 @@ class XMLparser: - def convert(self, outformat, appli=None): + def convert(self, outformat, appliEficas=None): # ici on ne fait rien # on le fera a la creation du JDC try: diff --git a/convert/convert_pyth.py b/convert/convert_pyth.py index 098612eb..9a73c09c 100644 --- a/convert/convert_pyth.py +++ b/convert/convert_pyth.py @@ -115,7 +115,7 @@ class Pythparser(object): s= s.replace('""','"<%s>"'%self.filename) self.cr.fatal(tr("Erreur a l'evaluation :\n %s", s)) - def convert(self,outformat,appli=None): + def convert(self,outformat,appliEficas=None): if outformat == 'dict': return self.getdict() else: diff --git a/convert/convert_python.py b/convert/convert_python.py index 123f3183..510721e9 100644 --- a/convert/convert_python.py +++ b/convert/convert_python.py @@ -111,13 +111,13 @@ class Pythonparser(object): self.cr.fatal(tr("Impossible d'ouvrir le fichier %s" ,str(filename))) return - def convert(self,outformat,appli=None): + def convert(self,outformat,appliEficas=None): if outformat == 'exec': try: #import cProfile, pstats, StringIO #pr = cProfile.Profile() #pr.enable() - l= PARSEUR_PYTHON(self.text).getTexte(appli) + l= PARSEUR_PYTHON(self.text).getTexte(appliEficas) #pr.disable() #s = StringIO.StringIO() diff --git a/convert/parseur_python.py b/convert/parseur_python.py index e3f28ba3..fb7fe91c 100644 --- a/convert/parseur_python.py +++ b/convert/parseur_python.py @@ -296,7 +296,7 @@ class PARSEUR_PYTHON(object): def __init__(self,texte): self.texte = texte self.l_objets=None - self.appli=None + self.appliEficas=None def isAffectation(self,texte): """ @@ -581,7 +581,7 @@ class PARSEUR_PYTHON(object): if nouvelindice == len(texte) : nouvelindice=nouvelindice -1 break - if mot in self.appli.liste_simp_reel: + if mot in self.appliEficas.liste_simp_reel: if valeur[0] != "'": try : clef=eval(valeur) @@ -612,7 +612,7 @@ class PARSEUR_PYTHON(object): #cas du tuple de valeurs valeur=texte[indiceC+1:nouvelindice+1] indiceC=nouvelindice+1 - if mot in self.appli.liste_simp_reel: + if mot in self.appliEficas.liste_simp_reel: valeur=valeur[1:-1] for val in valeur.split(',') : # Attention la derniere valeur est"" @@ -650,21 +650,21 @@ class PARSEUR_PYTHON(object): #index=epure1.find(u"=") #epure2=epure1[index+1:len(epure1)].replace(u"_F(u","(u") #dict_reel_concept=self.construitGenea(epure2) - if self.appli: - dict_reel_concept=construitGenea(epure2,self.appli.liste_simp_reel) + if self.appliEficas: + dict_reel_concept=construitGenea(epure2,self.appliEficas.liste_simp_reel) else: dict_reel_concept={} if nomConcept == "sansnom" : nomConcept = "" if nomConcept !=None : if len(dict_reel_concept) != 0: - self.appli.dict_reels[nomConcept]=dict_reel_concept + self.appliEficas.dict_reels[nomConcept]=dict_reel_concept - def getTexte(self,appli=None): + def getTexte(self,appliEficas=None): """ Retourne le texte issu de l'analyse """ - self.appli=appli + self.appliEficas=appliEficas try: #if 1: if not self.l_objets : self.analyse() @@ -688,10 +688,10 @@ if __name__ == "__main__" : #fichier = 'D:/Eficas_dev/Tests/zzzz100a.comm' #fichier = 'U:/Eficas_dev/Tests/test_eval.comm' texte = open(fichier,'r').read() - class appli(object): + class appliEficas(object): dict_reels={} liste_simp_reel=["VALE","VALE_C","GROUP_MA","RAYON"] - a=appli() + a=appliEficas() compile(txt, '', 'exec') print((a.dict_reels)) diff --git a/generator/a.py b/generator/a.py new file mode 100644 index 00000000..db583c47 --- /dev/null +++ b/generator/a.py @@ -0,0 +1,5 @@ +Title = 'toto' +txt='' +txt += "Title" + "= " + str(Title) + "\n" +print txt + diff --git a/generator/generator_PSEN.py b/generator/generator_PSEN.py index e60d43e4..f2c1b22b 100755 --- a/generator/generator_PSEN.py +++ b/generator/generator_PSEN.py @@ -57,7 +57,7 @@ class PSENGenerator(DicoImbriqueGenerator): extensions=('.comm',) #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None, appli=None): + def gener(self,obj,format='brut',config=None, appliEficas=None): try : self.MachineDico = obj.MachineDico diff --git a/generator/generator_ProcessOutputs.py b/generator/generator_ProcessOutputs.py index 2c7b0fae..efce52f0 100755 --- a/generator/generator_ProcessOutputs.py +++ b/generator/generator_ProcessOutputs.py @@ -50,7 +50,7 @@ class ProcessOutputsGenerator(PythonGenerator,ModificationGenerator): extensions=('.comm',) #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None, appli=None): + def gener(self,obj,format='brut',config=None, appliEficas=None): # Cette instruction genere le contenu du fichier de commandes (persistance) texteModification=self.generTexteModif(obj) diff --git a/generator/generator_TELEMAC.py b/generator/generator_TELEMAC.py index 3b52f688..a89b564e 100644 --- a/generator/generator_TELEMAC.py +++ b/generator/generator_TELEMAC.py @@ -58,11 +58,11 @@ class TELEMACGenerator(PythonGenerator): """ #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None,appli=None,statut="Leger"): + def gener(self,obj,format='brut',config=None,appliEficas=None,statut="Leger"): self.statut = statut - self.langue = appli.langue - try : self.TelemacdicoEn = appli.readercata.TelemacdicoEn + self.langue = appliEficas.langue + try : self.TelemacdicoEn = appliEficas.readercata.TelemacdicoEn except : print ('Attention : pas de TelemacdicoEn declare') self.TelemacdicoEn = {} @@ -76,7 +76,7 @@ class TELEMACGenerator(PythonGenerator): self.DicoEnumCasEnInverse[motClef]=d if self.langue == 'fr' : #from enum_Telemac2d_auto import DicoEnumCasFrToEnumCasEn - self.DicoEnumCasFrToEnumCasEn = appli.readercata.DicoEnumCasFrToEnumCasEn + self.DicoEnumCasFrToEnumCasEn = appliEficas.readercata.DicoEnumCasFrToEnumCasEn for motClef in self.DicoEnumCasFrToEnumCasEn: d={} for valTelemac in self.DicoEnumCasFrToEnumCasEn[motClef]: @@ -85,12 +85,12 @@ class TELEMACGenerator(PythonGenerator): self.DicoEnumCasEnInverse[motClef]=d self.initDico() # Pour Simplifier les verifs d ecriture - if hasattr(appli,'listeTelemac') : self.listeTelemac=appli.listeTelemac + if hasattr(appliEficas,'listeTelemac') : self.listeTelemac=appliEficas.listeTelemac else : self.listeTelemac = () self.dicoCataToCas={} try : - self.dicoCasToCata=appli.readercata.dicoCasToCata + self.dicoCasToCata=appliEficas.readercata.dicoCasToCata except : print ('Attention pas de dicoCasToCata declare') self.dicoCasToCata={} @@ -148,8 +148,8 @@ class TELEMACGenerator(PythonGenerator): # ecriture de Leger #---------------------------------------------------------------------------------------- - def writeComplet(self,fn,jdc,config,appli) : - jdc_formate=self.gener(jdc,config=config,appli=appli,statut="Entier") + def writeComplet(self,fn,jdc,config,appliEficas) : + jdc_formate=self.gener(jdc,config=config,appliEficas=appliEficas,statut="Entier") self.writeDefault(fn) @@ -174,10 +174,8 @@ class TELEMACGenerator(PythonGenerator): s=PythonGenerator.generMCSIMP(self,obj) - # Attention pas sur --> ds certains cas non traite par MCFACT ? - # a reflechir avec Yoann - # ajouter le statut ? - if self.statut == 'Leger' : + # si le statut = Leger on peut vouloir forcer l ecriture + if self.statut == 'Leger' and obj.definition.sortie == 'n': if hasattr(obj.definition,'defaut') and (obj.definition.defaut == obj.valeur) and (obj.nom not in self.listeTelemac) : return s if hasattr(obj.definition,'defaut') and obj.definition.defaut != None and (type(obj.valeur) == tuple or type(obj.valeur) == list) and (tuple(obj.definition.defaut) == tuple(obj.valeur)) and (obj.nom not in self.listeTelemac) : return s diff --git a/generator/generator_XML.py b/generator/generator_XML.py index 1f3fe65a..6401ded1 100644 --- a/generator/generator_XML.py +++ b/generator/generator_XML.py @@ -54,7 +54,7 @@ class XMLGenerator(PythonGenerator): extensions=('.comm',) #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): try : self.texteXML=obj.toXml() diff --git a/generator/generator_aplat.py b/generator/generator_aplat.py index 2bbdaade..6eaff182 100644 --- a/generator/generator_aplat.py +++ b/generator/generator_aplat.py @@ -90,7 +90,7 @@ class AplatGenerator(object): fp.write(self.text) fp.close() - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): """ Retourne une representation du JDC obj sous une forme qui est parametree par format. Si format vaut 'brut', 'standard' ou 'beautifie', retourne le texte issu de generator diff --git a/generator/generator_dico.py b/generator/generator_dico.py index 20cba9eb..91c69c23 100644 --- a/generator/generator_dico.py +++ b/generator/generator_dico.py @@ -55,7 +55,7 @@ class DicoGenerator(PythonGenerator): extensions=('.comm',) #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): self.initDico() diff --git a/generator/generator_dicoImbrique.py b/generator/generator_dicoImbrique.py index 4c201b97..d5d845cf 100644 --- a/generator/generator_dicoImbrique.py +++ b/generator/generator_dicoImbrique.py @@ -54,7 +54,7 @@ class DicoImbriqueGenerator(PythonGenerator): extensions=('.comm',) #---------------------------------------------------------------------------------------- - def gener(self,obj,format='brut',config=None, appli=None): + def gener(self,obj,format='brut',config=None, appliEficas=None): self.initDico() diff --git a/generator/generator_map.py b/generator/generator_map.py index 43b4bb71..97e7edd0 100644 --- a/generator/generator_map.py +++ b/generator/generator_map.py @@ -56,7 +56,7 @@ class MapGenerator(PythonGenerator): """ - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): self.initDico() self.text=PythonGenerator.gener(self,obj,format) if obj.isValid() :self.genereExeMap() diff --git a/generator/generator_mapVP.py b/generator/generator_mapVP.py index bafbfbfe..95273e67 100644 --- a/generator/generator_mapVP.py +++ b/generator/generator_mapVP.py @@ -59,9 +59,12 @@ class MapGenerator(PythonGenerator): """ - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): + self.appliEficas=appliEficas + self.cata=self.appliEficas.readercata.cata self.initDico() self.text=PythonGenerator.gener(self,obj,format) + self.textePourRun ='' if obj.isValid() :self.genereExeMap() return self.text @@ -69,18 +72,8 @@ class MapGenerator(PythonGenerator): def genereExeMap(self) : ''' Prepare le contenu du fichier de parametres python - peut ensuite etre obtenu au moyen de la fonction getTubePy(). ''' - #nomSpec="spec_"+self.schema - #self.texteEXE="from map.spec import %s;\n"%nomSpec - #self.texteEXE+="node=%s.new();\n"%nomSpec - #self.texteEXE+="node.getInputData();\n" - #self.texteEXE+="node.setInputData(%s);\n"%self.dictValeur - #self.texteEXE+="node.execute();\n" - #self.texteEXE+="res=node.getOutputData();\n" - #self.texteEXE = "%s\n"%self.dictValeur self.texteEXE = "" - self.txtEquations += ']\n' self.texteEXE += self.genereCsv() self.texteEXE += self.genereCalc() self.texteEXE += self.txtNomCst @@ -90,7 +83,9 @@ class MapGenerator(PythonGenerator): self.texteEXE += self.txtValNA self.texteEXE += self.txtInitName self.texteEXE += self.txtInitVal - self.texteEXE += self.txtEquations + self.texteEXE += self.genereEquations() + self.textePourRun = self.texteEXE + #print (self.texteEXE) @@ -106,7 +101,21 @@ class MapGenerator(PythonGenerator): txt = txtNom + txtVal return txt - + def genereEquations(self) : + txt="equation =[" + index=0 + for param in self.listInitialParameters: + print (param) + txt+= 'Dy[j*5 + '+str(index)+ '] = ' + txt+="," + #if obj.nom in( 'initiation','propagation','termination','stabilization') : + # for objFils in obj.data: + # for mc in objFils.mcListe : + # self.txtEquations += "'" + mc.nom + "', " + txt=txt[0:-1] + txt+="]\n" + return txt + def genereCsv(self) : txt = 'study_name = ' +self.dictValeur['SimulationName'] + "\n" txt += 'csv_output_file_name = ' + self.dictValeur['OutPutFolder'] + '/c_solver_stiff_ode_1d_' + self.dictValeur['SimulationName']+ '.csv\n' @@ -116,7 +125,6 @@ class MapGenerator(PythonGenerator): if not hasattr(self,'schema') : self.schema="" self.dictParam={} self.dictValeur={} - self.txtEquations = "equation = [ " def writeDefault(self, fn): fileEXE = fn[:fn.rfind(".")] + '.py' @@ -150,19 +158,17 @@ class MapGenerator(PythonGenerator): self.txtValNA += ']\n' if obj.nom == 'InitialParameters' : + self.listInitialParameters =[] self.txtInitName = "initial_Value_names = [ " self.txtInitVal = "initial_Values = [ " for objFils in obj.data: for mc in objFils.mcListe : self.txtInitName += "'" + mc.nom + "', " self.txtInitVal += str(mc.valeur) + ", " + self.listInitialParameters.append(mc.nom) self.txtInitName += ']\n' self.txtInitVal += ']\n' - if obj.nom in( 'initiation','propagation','termination','stabilization') : - for objFils in obj.data: - for mc in objFils.mcListe : - self.txtEquations += "'" + mc.nom + "', " return s def generMCSIMP(self,obj) : diff --git a/generator/generator_python.py b/generator/generator_python.py index 7a41cd62..426ffd33 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -86,14 +86,14 @@ class PythonGenerator(object): fin='fin CR format python pour python') # Le texte au format python est stocke dans l'attribut text self.text='' - self.appli=None + self.appliEficas=None def writefile(self,filename): fp=open(filename,'w') fp.write(self.text) fp.close() - def gener(self,obj,format='brut',config=None,appli=None): + def gener(self,obj,format='brut',config=None,appliEficas=None): """ Retourne une representation du JDC obj sous une forme qui est parametree par format. @@ -105,8 +105,7 @@ class PythonGenerator(object): if obj == None : print ('appel a gener avec None') return - self.appli=obj.getJdcRoot().appli - #self.appli=obj.appli + self.appliEficas=appliEficas liste= self.generator(obj) #format='standard' if format == 'brut': @@ -517,9 +516,9 @@ class PythonGenerator(object): if vientDeListe and repr(valeur) != str(valeur) : s=repr(valeur) if (s.find('.')== -1 and s.find('e')== -1 and s.find('E')==-1) : s=s+'.0' clefobj=etape.getSdname() - if self.appli.appliEficas and clefobj in self.appli.appliEficas.dict_reels: - if valeur in self.appli.appliEficas.dict_reels[clefobj]: - s=self.appli.appliEficas.dict_reels[clefobj][valeur] + if self.appliEficas and clefobj in self.appliEficas.dict_reels: + if valeur in self.appliEficas.dict_reels[clefobj]: + s=self.appliEficas.dict_reels[clefobj][valeur] elif type(valeur) == bytes or type(valeur) == str : if valeur.find('\n') == -1: diff --git a/generator/generator_vers3DSalome.py b/generator/generator_vers3DSalome.py index 331cbfbe..9f405a45 100644 --- a/generator/generator_vers3DSalome.py +++ b/generator/generator_vers3DSalome.py @@ -96,7 +96,7 @@ class vers3DSalomeGenerator(PythonGenerator): self.commande = "" self.dict_attributs = {} - def gener(self,node,config=None,appli=None): + def gener(self,node,config=None,appliEficas=None): """ """ self.node=node