From b48e15bfc2f6b6d09351a2bdd53b7587026e09c7 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Mon, 10 Sep 2018 17:47:22 +0200 Subject: [PATCH] gros merge avec les patchs de la 8.5 et les avancees de mdm --- Accas/A_ETAPE.py | 2 +- Accas/A_MCBLOC.py | 8 +- Accas/A_MCFACT.py | 4 +- Accas/A_MCSIMP.py | 5 +- Efi2Xsd/AccasXsd.py | 3 + Efi2Xsd/MCAccasXsd.py | 206 ++++++++++++++---------- Ihm/I_JDC.py | 34 ++-- Ihm/I_MACRO_ETAPE.py | 11 +- Ihm/I_MCCOMPO.py | 1 + Ihm/I_MCFACT.py | 7 + Ihm/I_MCLIST.py | 1 + Ihm/I_MCSIMP.py | 5 +- InterfaceQT4/configuration.py | 6 + InterfaceQT4/editor.py | 16 +- InterfaceQT4/editorSsIhm.py | 11 +- InterfaceQT4/gereIcones.py | 15 +- InterfaceQT4/groupe.py | 1 - InterfaceQT4/monGroupeOptionnel.py | 8 +- InterfaceQT4/monLayoutBouton.py | 4 +- InterfaceQT4/monWidgetFact.py | 11 ++ InterfaceQT4/monWidgetOptionnel.py | 2 + InterfaceQT4/monWidgetPlusieursInto.py | 16 +- InterfaceQT4/monWidgetPlusieursTuple.py | 2 +- InterfaceQT4/monWidgetRadioButton.py | 4 +- InterfaceQT4/qtEficas.py | 20 ++- InterfaceQT4/qtSaisie.py | 3 +- InterfaceQT4/readercata.py | 19 +++ InterfaceQT4/readercataXML.py | 5 +- InterfaceQT4/typeNode.py | 2 +- InterfaceQT4/viewManager.py | 2 +- Noyau/N_BLOC.py | 4 +- Noyau/N_ETAPE.py | 14 +- Noyau/N_FACT.py | 16 +- Noyau/N_JDC.py | 8 +- Noyau/N_JDC_CATA.py | 3 +- Noyau/N_MCBLOC.py | 5 +- Noyau/N_MCCOMPO.py | 30 +++- Noyau/N_MCFACT.py | 12 +- Noyau/N_MCLIST.py | 1 + Noyau/N_MCSIMP.py | 13 +- Noyau/N_OPER.py | 2 +- Noyau/N_SIMP.py | 33 ++-- UiQT5/desWidgetFact.ui | 46 ++++-- 43 files changed, 425 insertions(+), 196 deletions(-) diff --git a/Accas/A_ETAPE.py b/Accas/A_ETAPE.py index 4c72b812..a3dbd595 100644 --- a/Accas/A_ETAPE.py +++ b/Accas/A_ETAPE.py @@ -25,6 +25,6 @@ from Efi2Xsd.MCAccasXsd import X_MCCOMPO class ETAPE(I_ETAPE.ETAPE,V_ETAPE.ETAPE,X_MCCOMPO,N_ETAPE.ETAPE): def __init__(self,oper=None,reuse=None,args={}): - #print ('ETAPE accas', oper.nom) + print ('------------- ETAPE accas', oper.nom, args) N_ETAPE.ETAPE.__init__(self,oper,reuse,args) V_ETAPE.ETAPE.__init__(self) diff --git a/Accas/A_MCBLOC.py b/Accas/A_MCBLOC.py index d6d1bcb5..df125d12 100644 --- a/Accas/A_MCBLOC.py +++ b/Accas/A_MCBLOC.py @@ -21,10 +21,10 @@ from __future__ import absolute_import from Noyau import N_MCBLOC from Validation import V_MCBLOC from Ihm import I_MCBLOC -from Efi2Xsd.MCAccasXsd import X_MCCOMPO +from Efi2Xsd.MCAccasXsd import X_MCBLOC -class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,X_MCCOMPO,V_MCBLOC.MCBLOC): - def __init__(self,val,definition,nom,parent): - N_MCBLOC.MCBLOC.__init__(self,val,definition,nom,parent) +class MCBLOC(I_MCBLOC.MCBLOC,N_MCBLOC.MCBLOC,X_MCBLOC,V_MCBLOC.MCBLOC): + def __init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=None): + N_MCBLOC.MCBLOC.__init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction) V_MCBLOC.MCBLOC.__init__(self) diff --git a/Accas/A_MCFACT.py b/Accas/A_MCFACT.py index 31fe0a4e..50fd1a8d 100644 --- a/Accas/A_MCFACT.py +++ b/Accas/A_MCFACT.py @@ -24,6 +24,6 @@ from Ihm import I_MCFACT from Efi2Xsd.MCAccasXsd import X_MCFACT class MCFACT(I_MCFACT.MCFACT,N_MCFACT.MCFACT,X_MCFACT,V_MCFACT.MCFACT): - def __init__(self,val,definition,nom,parent): - N_MCFACT.MCFACT.__init__(self,val,definition,nom,parent) + def __init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=None): + N_MCFACT.MCFACT.__init__(self,val,definition,nom,parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction) V_MCFACT.MCFACT.__init__(self) diff --git a/Accas/A_MCSIMP.py b/Accas/A_MCSIMP.py index c3920907..a3c63cb6 100644 --- a/Accas/A_MCSIMP.py +++ b/Accas/A_MCSIMP.py @@ -24,6 +24,7 @@ from Ihm import I_MCSIMP from Efi2Xsd.MCAccasXsd import X_MCSIMP class MCSIMP(I_MCSIMP.MCSIMP,N_MCSIMP.MCSIMP,X_MCSIMP,V_MCSIMP.MCSIMP): - def __init__(self,val,definition,nom,parent): - N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent) + def __init__(self,val,definition,nom,parent,objPyxbDeConstruction=None): + #def __init__(self,val,definition,nom,parent,objPyxbDeConstruction) quand cela sera correct dans les update_etape. pour l instant on laisse le defaut a None : 9 Aout 18: + N_MCSIMP.MCSIMP.__init__(self,val,definition,nom,parent,objPyxbDeConstruction) V_MCSIMP.MCSIMP.__init__(self) diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index e61df38f..4483ad41 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -18,6 +18,7 @@ from mapDesTypes import dictBLOCEficasXML, dictBLOCXMLEficas from mapDesTypes import dictPourCast, dictNomsDesTypes from mapDesTypes import listeParamDeTypeTypeAttendu, listeParamDeTypeStr, dictPourCast from mapDesTypes import listeParamTjsSequence, listeParamSelonType +from mapDesTypes import Tuple from balises import * @@ -223,6 +224,8 @@ class X_SIMP (X_definition): # il faut traduire le min et le max # il faut ajouter les regles # il faut gerer les types tuple et fichier + + if hasattr(self.type[0], 'label') and self.type[0].label == "Tuple" : return ('XXXXXXXX') return dictNomsDesTypes[self.type[0]] def traduitValMinValMax(self): diff --git a/Efi2Xsd/MCAccasXsd.py b/Efi2Xsd/MCAccasXsd.py index 03ee55eb..83a31a74 100755 --- a/Efi2Xsd/MCAccasXsd.py +++ b/Efi2Xsd/MCAccasXsd.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- import sys,os +import traceback #import raw.efficas as efficas import types @@ -21,22 +22,31 @@ class X_MCSIMP: # self.valeur tient compte de la valeur par defaut # utiliser getValeur ? expression numpy if not self.cata.modeleMetier : return - if CONTEXT.fromXML : return #print ('X_MCSIMP buildObjPyxb', self.nom, self,self.valeur) - self.monNomClasseModeleMetier='T_'+self.nom - 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) - elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None - else : self.objPyxb=self.maClasseModeleMetier() + #if self.nom == 'diameter' : + # traceback.print_stack() + # print ('****************************************************') + # print ('objPyxbDeConstruction', self.objPyxbDeConstruction) + #if self.objPyxbDeConstruction == None : print (self.nom, ' pas de pyxb') + if self.objPyxbDeConstruction != None : + self.objPyxb = self.objPyxbDeConstruction + self.objPyxbDeConstruction = None + else : + self.monNomClasseModeleMetier='T_'+self.nom + 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) + elif self.definition.into != None and 'TXM' in self.definition.type : self.objPyxb = None + else : self.objPyxb=self.maClasseModeleMetier(); self.filsPyxb=None + #print ('X_MCSIMP', self.nom, self.objPyxb) #print ('fin X_MCSIMP', self.objPyxb, self.nom,self) def setValeurObjPyxb(self,newVal): - print ('dans setValeurObjPyxb') + #print ('dans setValeurObjPyxb') if not self.cata.modeleMetier : return try : print (self.nom , ' a pour pere', self.perePyxb, self.perePyxb.nom) @@ -47,7 +57,7 @@ class X_MCSIMP: else : nvlObj=self.maClasseModeleMetier() self.val=newVal indexOC=0 - print ('avant',self.nom, self.perePyxb.objPyxb.orderedContent()) + #print ('avant',self.nom, self.perePyxb.objPyxb.orderedContent()) for i in self.perePyxb.objPyxb.orderedContent(): if id(i._Content__value) == id(self.objPyxb) : break indexOC +=1 @@ -94,7 +104,7 @@ class X_MCSIMP: #print (monBinding) def deletePyxbObject(self): - print ('je passe par la', self, self.nom) + print ('je passe ds deletePyxbObject pour ', self, self.nom) class X_MCCOMPO: @@ -102,63 +112,76 @@ class X_MCCOMPO: # def buildObjPyxb(self,mc_list) : if not self.cata.modeleMetier : return - if CONTEXT.fromXML : return - print ('_______________________________________') - print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list) - self.monNomClasseModeleMetier='T_'+self.nom - self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) - listArg=[] + #print ('________________________________________________') + #print ('X_MCCOMPO buildObjPyxb', self.nom, self, mc_list) + + self.listArg=[] for objAccas in mc_list : - # on remonte les mots-clefs des blocs - #print (type (objAccas)) if objAccas.nature == 'MCBLOC' : - # Attention --> mc_list et mc_liste - for fils in objAccas.mc_liste: - fils.perePyxb=self - listArg.append(fils.objPyxb) - print (fils.nom ,' a pour pere Pyxb', self, self.nom) + self.exploreBLOC(objAccas) elif objAccas.nature == 'MCList' : for fils in objAccas : fils.perePyxb=self - listArg.append(fils.objPyxb) + self.listArg.append(fils.objPyxb) else : - listArg.append(objAccas.objPyxb) + self.listArg.append(objAccas.objPyxb) objAccas.perePyxb=self #print (objAccas.nom ,' a pour pere Pyxb', self, self.nom) - #print ( objAccas.nom, ' a pour perepyxb ' , objAccas.perePyxb.nom) - self.objPyxb=self.maClasseModeleMetier(*listArg) - print ('Fin ', self.nom, self.objPyxb) - print ('_______________________________________') + + self.monNomClasseModeleMetier='T_'+self.nom + self.maClasseModeleMetier=getattr(self.cata.modeleMetier,self.monNomClasseModeleMetier) + if self.objPyxbDeConstruction != None : + self.objPyxb = self.objPyxbDeConstruction + self.objPyxbDeConstruction = None + #print ('je passe dans le if pour ', self.nom, self.objPyxb, self) + else : + self.objPyxb=self.maClasseModeleMetier(*self.listArg) + #print ('Fin __________ ', self.nom, self.objPyxb) + #print ('X_MCCOMPO', self.nom, self.objPyxb) + #print ('_______________________________________') def deletePyxbObject(self): print ('******************************************') - print ('je passe par la', self, self.nom) + print ('je passe ds deletePyxbObject pour ', self, self.nom) print (self.perePyxb) print (dir(self)) print ('******************************************') - + def exploreBLOC(self,objAccas): + laListeSsLesBlocs=[] + for fils in objAccas.mc_liste: + if fils.nature == 'MCBLOC' : + self.exploreBLOC(fils) + elif fils.nature == 'MCList' : + for objFils in fils : + fils.perePyxb=self + self.listArg.append(fils.objPyxb) + #print (fils.nom ,' a pour pere Pyxb', self, self.nom) + else : + self.listArg.append(fils.objPyxb) + fils.perePyxb=self + #print (fils.nom ,' a pour pere Pyxb', self, self.nom) + class X_MCBLOC (X_MCCOMPO): # -------------------------- def buildObjPyxb(self,mc_list): - if CONTEXT.fromXML : return if not self.cata.modeleMetier : return # mise a none ? le bloc n a pas d existence en pyxb self.perePyxb=None - print ('_______________________________________') - print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list) + #print ('_______________________________________') + #print ('X_MCBLOC buildObjPyxb', self.nom, self, mc_list) # on rattache ses fils au bloc mais leur pere sera ensuite le MCCOMPO qui contient le bloc # Pas sur d en avoir besoin self.filsPyxb=[] self.objPyxb=None for objAccas in mc_list : self.filsPyxb.append(objAccas.objPyxb) - print (self.filsPyxb) - print ('Fin ', self.nom, self.objPyxb) - print ('_______________________________________') + #print (self.filsPyxb) + #print ('Fin ', self.nom, self.objPyxb) + #print ('_______________________________________') @@ -167,14 +190,14 @@ class X_MCLIST (X_MCCOMPO): # -------------------------- def buildObjPyxb(self,mc_list): - print ('_______________________________________') - print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self) - print ('on ne fait rien') - print ('_______________________________________') + #print ('__________________________________________________________________') + #print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self) + #print ('on ne fait rien pour les MCLISTs, cela sera fait dans chaque MCFACT') + #print ('__________________________________________________________________') pass + # detruire la methode suivante #def build2ObjPyxb(self,mc_list): - # if CONTEXT.fromXML : return # print ('_______________________________________') # print ('X_MCLIST buildObjPyxb traite ds X_MCLIST', self.nom, self) # if not self.cata.modeleMetier : return @@ -187,7 +210,7 @@ class X_MCLIST (X_MCCOMPO): #print (type (objAccas)) #print (objAccas.nom, objAccas.objPyxb, type(objAccas.objPyxb)) #print ( type (objAccas.objPyxb) == list ) - if type (objAccas.objPyxb) == list : + #if type (objAccas.objPyxb) == list : #print ('ds le if') # for fils in objAccas.objPyxb : # listArg.append(fils.objPyxb) @@ -208,14 +231,9 @@ class X_MCLIST (X_MCCOMPO): class X_MCFACT (X_MCCOMPO): # ------------------------- -# on gere au niveau du MCLIST +# on gere au niveau du MCCOMPO pass - #def build2ObjPyxb(self,mc_list): - # print ('_______________________________________') - # print ('X_MCFACT buildObjPyxb debut et fin', self.nom, self) - # print ('_______________________________________') - class X_JDC (X_MCCOMPO): # --------------------- @@ -230,78 +248,104 @@ class X_JDC (X_MCCOMPO): pyxb.GlobalValidationConfig._setContentInfluencesGeneration(pyxb.GlobalValidationConfig.ALWAYS) pyxb.GlobalValidationConfig._setInvalidElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) pyxb.GlobalValidationConfig._setOrphanElementInContent(pyxb.GlobalValidationConfig.RAISE_EXCEPTION) - + #print ('fin buildObjPyxb _______________________________________') def enregistreEtapePyxb(self,etape): # OK seulement si sequence (choice ? ...) - print ('ds enregistreEtapePyxb', etape.nom) if not self.cata.modeleMetier : return - #if self.source== "xml" : return + print ('enregistreEtapePyxb' , etape) self.objPyxb.append(etape.objPyxb) etape.perePyxb = self #self.toXml() def toXml(self): - #if not self.cata.modeleMetier : return + if not self.cata.modeleMetier : return + print ('***************',self.objPyxb,'***************',) + print ('***************',self.objPyxb.orderedContent(),'***************',) print(self.objPyxb.toDOM().toprettyxml()) print(self.objPyxb.toxml()) + return (self.objPyxb.toDOM().toprettyxml()) def analyseFromXML(self): - print ("je suis la") + print ("je suis ds analyseFromXML -- > appel ds analyse de I_JDC.py") if self.procedure == "" : return - self.source='xml' self.objPyxb=self.cata.modeleMetier.CreateFromDocument(self.procedure) for objEtape in self.objPyxb.content(): - print ('analyse de ', objEtape) objEtape.dictArgs= (self.pyxbToDict(objEtape)) objEtape.monNomClasseAccas=objEtape._ExpandedName.localName() - print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas)) - print (objEtape._ExpandedName, type(objEtape._ExpandedName)) objEtape.monNomClasseAccas=objEtape.monNomClasseAccas[2:] - #print (objEtape) - #print (objEtape.monNomClasseAccas) + objEtape.dictPyxb['objEnPyxb']=objEtape + objEtape.dictArgs['dicoPyxbDeConstruction']=objEtape.dictPyxb maClasseAccas=getattr(self.cata,objEtape.monNomClasseAccas) + objAccasEtape=maClasseAccas(**(objEtape.dictArgs)) + # attention objAccasEtape = None normal (cf buildSd) - print ( '________________') + print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') print (objEtape , type(objEtape)) - #print (dir(objEtape)) - print (objEtape.dictArgs) - print ( '________________') - objAccasEtape=maClasseAccas(**(objEtape.dictArgs)) - self.source='None' + print (objEtape.dictPyxb) + print (maClasseAccas) + print (objAccasEtape) + + #print (objEtape.monNomClasseAccas, type(objEtape.monNomClasseAccas)) + #print (objEtape._ExpandedName, type(objEtape._ExpandedName)) + #print (objEtape.dictPyxb[u'experience']) + #print (objEtape.dictArgs) + #print (objEtape.dictPyxb) + print ( 'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') + #exit() + def pyxbToDict(self,objAAnalyser): - # la transformation de l objAAnalyser ne fonctionne pas pour tout + # la transformation de l objAAnalyser en type lu par eficas ne fonctionne pas pour tout # faudrait - il travailler sur les types des objets ? # c est a revoir -> fonction cast a prevoir ds les 2 sens if objAAnalyser is None: return + #print ('debut pour ',objAAnalyser) dictArgs = {} if isinstance(objAAnalyser, pyxb.binding.basis.simpleTypeDefinition): - if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser) - if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser,) - if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser,) - if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser,) - if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)): - return repr(objAAnalyser) + objAAnalyser.dictPyxb=objAAnalyser + #print (objAAnalyser.dictPyxb , type(objAAnalyser.dictPyxb)) + if isinstance(objAAnalyser, pyxb.binding.basis.enumeration_mixin): return str(objAAnalyser) + if isinstance(objAAnalyser, types.StringTypes): return str(objAAnalyser) + if isinstance(objAAnalyser, types.FloatType): return float(objAAnalyser) + if isinstance(objAAnalyser, (types.IntType, types.LongType)): return int(objAAnalyser) + #if isinstance(objAAnalyser, (types.NoneType, types.BooleanType, types.FloatType, types.IntType, types.LongType)): + return repr(objAAnalyser) + # ou ? return objAAnalyser #if isinstance(objAAnalyser, types.StringTypes): return pyxb.utils.utility.QuotedEscaped(objAAnalyser,) #pour une enum getattr(value dans le type) # return pythonLiteral(ReferenceFacet(facet=value, **kw)) - return objAAnalyser + objAAnalyser.dictPyxb = {} for expandedName, elementDeclaration in objAAnalyser._ElementMap.items(): objPyxbName = expandedName.localName() objPyxbValue = getattr(objAAnalyser, objPyxbName) if objPyxbValue == None or objPyxbValue == [] : continue if elementDeclaration.isPlural(): dictArgs[objPyxbName] = [] - for objPyxb in objPyxbValue : dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb)) + #objAAnalyser.dictPyxb[objPyxbName]={} + objAAnalyser.dictPyxb[objPyxbName]=[] + #objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser + for objPyxb in objPyxbValue : + #print ('-------------',objPyxb) + dictArgs[objPyxbName].append(self.pyxbToDict(objPyxb)) + objPyxb.dictPyxb['objEnPyxb'] = objPyxb + objAAnalyser.dictPyxb[objPyxbName].append(objPyxb.dictPyxb) else: dictArgs[objPyxbName] = self.pyxbToDict(getattr(objAAnalyser, objPyxbName)) - print ("***********************************") - print ('pyxbToDict ', objAAnalyser) - print (dictArgs) + #print ('ajout ds dico de ', objAAnalyser , 'de', objPyxbName, objPyxbValue) + objAAnalyser.dictPyxb[objPyxbName] = objPyxbValue.dictPyxb + #print ('ajout ds dico de ', objPyxbValue.dictPyxb, 'de', objPyxbName) + objAAnalyser.dictPyxb['objEnPyxb']=objAAnalyser + #print ("***********************************") + #print ('pyxbToDict fin pour ********** ', objAAnalyser) + #print ('pyxbToDict ', objAAnalyser, objAAnalyser.dictPyxb) + #print ('pyxbToDict fin pour ********** ', objAAnalyser) + #print ("***********************************") + #print (dictArgs) + #print (dictPyxb) #for i in dictArgs.keys(): print (i, " ", dictArgs[i], " ", type(dictArgs[i])) - print ("***********************************") + #print ('fin pour ',objAAnalyser) return dictArgs diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index a8aaebc1..99589568 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -423,21 +423,21 @@ class JDC(I_OBJECT.OBJECT): comprises entre le premier DEBUT/POURSUITE et le premier FIN et rendre actives les autres """ - if self.definition.code == 'ASTER' : + #if self.definition.code == 'ASTER' : # Seulement pour ASTER : # Avant DEBUT actif vaut 0 # Apres DEBUT et avant le 1er FIN actif vaut 1 # Apres le 1er FIN actif vaut -1 - actif=0 - else: - actif=1 + # actif=0 + #actif=1 for etape in self.etapes: - if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1 - if actif == 1: + #if actif == 0 and etape.nom in ['DEBUT','POURSUITE']:actif=1 + #if actif == 1: etape.active() - else: - etape.inactive() - if etape.nom == 'FIN':actif=-1 + self.enregistreEtapePyxb(etape) + #else: + # etape.inactive() + #if etape.nom == 'FIN':actif=-1 def deplaceEntite(self,indexNoeudACopier,indexNoeudOuColler,pos): """ @@ -478,6 +478,7 @@ class JDC(I_OBJECT.OBJECT): self.initModif() index_etape=self.etapes.index(etape) + etape.deletePyxbObject() self.etapes.remove(etape) if etape.niveau is not self: @@ -542,10 +543,17 @@ class JDC(I_OBJECT.OBJECT): e.updateContext(context) def analyse(self): - self.compile() - if not self.cr.estvide():return - self.execCompile() - self.activeEtapes() + if self.editor.format == 'xml' : + # il ne faut pas le faire quand le jeu de donnees est vide + self.setCurrentContext() + self.analyseFromXML() + #print ('stop demande'); exit() + #self.execCompileFromXML() + else : + self.compile() + self.execCompile() + if not self.cr.estvide():return + self.activeEtapes() def registerParametre(self,param): """ diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index c3ea63d1..0de991d8 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -163,8 +163,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # Erreurs dans l'INCLUDE. On garde la memoire du fichier # mais on n'insere pas les concepts # On retablit l'etape courante step - print (j.cr) - print ("valid ",j.isValid()) + #print (j.cr) + #print ("valid ",j.isValid()) CONTEXT.unsetCurrentStep() CONTEXT.setCurrentStep(step) raise EficasException(tr("Impossible de relire le fichier %s \n ")+ six.text_type(j.cr)) @@ -174,7 +174,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # L'INCLUDE n'est pas valide. # on produit un rapport d'erreurs cr=j.report() - print ('cr', cr) + #print ('cr', cr) # On retablit l'etape courante step CONTEXT.unsetCurrentStep() CONTEXT.setCurrentStep(step) @@ -545,6 +545,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): for e in self.etapes: e.niveau=self.niveau e.parent=self.parent + e.state='change' index=self.jdc.etapes.index(self) self.jdc.etapes=self.jdc.etapes[:index+1]+self.etapes+self.jdc.etapes[index+1:] @@ -613,7 +614,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): """ Cette methode sert a craer un contexte en interpratant un texte source Python. """ - print ("makeContexteInclude",fichier) + #print ("makeContexteInclude",fichier) # on recupere le contexte d'un nouveau jdc dans lequel on interprete text contexte = self.getContexteJdc(fichier,text) if contexte == None : @@ -627,7 +628,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # g_context est utilise pour avoir les concepts produits par la macro # contexte_fichier_init est utilise pour avoir les concepts supprimes par la macro self.contexte_fichier_init = contexte - print ("fin makeContexteInclude",fichier) + #print ("fin makeContexteInclude",fichier) def reevalueFichierInitObsolete(self): """Recalcule les concepts produits par le fichier enregistre""" diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index e6675cda..e8e30416 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -193,6 +193,7 @@ class MCCOMPO(I_OBJECT.OBJECT): self.initModif() self.mc_liste.remove(objet) CONNECTOR.Emit(self,"supp",objet) + objet.deletePyxbObject() objet.deleteMcGlobal() objet.updateConditionBloc() objet.supprime() diff --git a/Ihm/I_MCFACT.py b/Ihm/I_MCFACT.py index de49c8f0..6e30cc1e 100644 --- a/Ihm/I_MCFACT.py +++ b/Ihm/I_MCFACT.py @@ -42,6 +42,13 @@ class MCFACT(I_MCCOMPO.MCCOMPO): if len(objet) > 1 : return 0 else : return 1 + def getMinMax(self): + """ + Retourne les valeurs min et max admissibles pour la valeur de self + """ + return self.definition.min,self.definition.max + + def getLabelText(self): """ Retourne le label de self suivant qu'il s'agit d'un MCFACT diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index b1959059..15e80c99 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -80,6 +80,7 @@ class MCList: self.remove(obj) CONNECTOR.Emit(self,"supp",obj) self.updateConditionBloc() + obj.deletePyxbObject() obj.supprime() self.etape.modified() self.finModif() diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 1a907c8a..7c46b589 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -64,9 +64,10 @@ class MCSIMP(I_OBJECT.OBJECT): if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice': self.monType=type_permis return self.valideMatrice(cr=cr) - if self.definition.siValide != None : + validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr) + if self.definition.siValide != None and validite: self.definition.siValide(self) - return Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr) + return validite def getNomConcept(self): p=self diff --git a/InterfaceQT4/configuration.py b/InterfaceQT4/configuration.py index 8110fd46..0c094e4f 100644 --- a/InterfaceQT4/configuration.py +++ b/InterfaceQT4/configuration.py @@ -130,6 +130,12 @@ class configBase(object): self.withXSD=False self.afficheIhm=True self.closeParenthese=False + self.enleverActionStructures=False + self.enleverParametres=False + self.enleverSupprimer=False + self.ajoutExecution=False + self.utilParExtensions=False + diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index 51528725..a95c1c62 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -420,7 +420,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # si possible on renomme l objet comme le noeud couper if (self.QWParent.edit == "couper"): - print ('je pass la') + #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 ')) @@ -521,9 +521,9 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): nodeOuAjouter=self.node_selected[0] if nodeOuAjouter != self.tree.racine : while nodeOuAjouter.treeParent != self.tree.racine: - print (nodeOuAjouter) + #print (nodeOuAjouter) nodeOuAjouter=nodeOuAjouter.treeParent - print (nodeOuAjouter.parent == self.tree.racine) + #print (nodeOuAjouter.parent == self.tree.racine) nouveau=nodeOuAjouter.appendBrother(nomEtape) try : self.node_selected[0].setSelected(False) @@ -1023,13 +1023,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): def ajoutMCFact(self,etape,MCFils,listeAvant=()): #----------------------------------------------# # dans le JDC - print ('ajoutMCFact') + #print ('ajoutMCFact') ouChercher=etape - print (ouChercher) + #print (ouChercher) for mot in listeAvant : ouChercher=ouChercher.getChild(mot,restreint="oui") - print (mot) - print (ouChercher) + #print (mot) + #print (ouChercher) monMC=etape.getChild(ouChercher,restreint="oui") if monMC== None : monMC= ouChercher.addEntite(MCFils) monMC.isValid() @@ -1115,7 +1115,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): #----------------------- def getEtapeCourante(self) : #----------------------- - print (self.tree.selectedItems()) + #print (self.tree.selectedItems()) if len(self.tree.selectedItems()) != 1 : return None etape=self.tree.selectedItems()[0].item.object.getEtape() return etape diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py index 66c2f887..0e3cb69d 100755 --- a/InterfaceQT4/editorSsIhm.py +++ b/InterfaceQT4/editorSsIhm.py @@ -169,6 +169,7 @@ class JDCEditorSsIhm : self.jdc.aReafficher=False txt_exception = None if not jdc: +# si on est en XMML ne faut-il pas passer en Accas ? self.jdc.analyse() txt_exception = self.jdc.cr.getMessException() if txt_exception : @@ -222,7 +223,7 @@ class JDCEditorSsIhm : CONTEXT.unsetCurrentStep() - #jdc=self.readercata.cata[0].JdC(procedure=text, + #if elf.appliEficas.maConfiguration jdc=self.readercata.cata.JdC(procedure=text, appli=self, cata=self.readercata.cata, @@ -267,7 +268,12 @@ class JDCEditorSsIhm : jdc.recorded_units=units jdc.old_recorded_units=units ## PNPN est ce que la ligne suivante est bien utile ? - if texte == "" :jdc.analyse() + # elle positionne le contexte + # est ce qu on ne doit pas changer le format en Accas si on vient d accas ? + if self.format == 'xml' : return jdc + if texte == "" : + jdc.editor=self + jdc.analyse() return jdc #--------------------------------# @@ -433,6 +439,7 @@ class JDCEditorSsIhm : 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 diff --git a/InterfaceQT4/gereIcones.py b/InterfaceQT4/gereIcones.py index 4c278f36..13b31b09 100644 --- a/InterfaceQT4/gereIcones.py +++ b/InterfaceQT4/gereIcones.py @@ -234,7 +234,14 @@ class ContientIcones(object): from .monViewTexte import ViewText try : if sys.platform[0:5]=="linux" : - cmd="xdg-open "+ str(fichier) + #cmd="xdg-open "+ str(fichier) + #changer pour marcher dans l'EDC + #cmd="gedit "+ str(fichier) + from os.path import splitext + fileName,extension = splitext(fichier) + if extension in self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions: + cmd=self.parentQt.editor.appliEficas.maConfiguration.utilParExtensions[extension] + " " + str(fichier) + else: cmd="xdg-open "+ str(fichier) os.system(cmd) else : os.startfile(str(fichier)) @@ -266,7 +273,7 @@ class ContientIcones(object): self.appliEficas.maConfiguration.savedir, filters) else: - print(filters) + #print(filters) fichier = QFileDialog.getOpenFileName(self.appliEficas, tr('Ouvrir Fichier'), self.appliEficas.maConfiguration.savedir, @@ -299,13 +306,9 @@ class ContientIcones(object): def BFichierOuRepertoirePressed(self): self.fileName="" - print (0) self.file_dialog=QFileDialog() - print (1) self.file_dialog.setFileMode(QFileDialog.Directory); - print (2) self.file_dialog.setFileMode(QFileDialog.Directory|QFileDialog.ExistingFiles) - print (3) self.file_dialog.setOption(QFileDialog.DontUseNativeDialog,True); self.file_dialog.setWindowTitle('Choose File or Directory') self.explore(self.file_dialog) diff --git a/InterfaceQT4/groupe.py b/InterfaceQT4/groupe.py index 8964f639..55b66eec 100644 --- a/InterfaceQT4/groupe.py +++ b/InterfaceQT4/groupe.py @@ -41,7 +41,6 @@ class Groupe(QWidget,FacultatifOuOptionnel): QWidget.__init__(self,None) self.node=node self.node.fenetre=self - if self.node.item.nom == 'MASSES' : traceback.print_stack() self.setupUi(self) self.editor=editor self.obj=obj diff --git a/InterfaceQT4/monGroupeOptionnel.py b/InterfaceQT4/monGroupeOptionnel.py index 2ebdbc0e..7b17edba 100644 --- a/InterfaceQT4/monGroupeOptionnel.py +++ b/InterfaceQT4/monGroupeOptionnel.py @@ -81,12 +81,12 @@ class MonRBButtonCustom(QCheckBox): maDefinition = self.monOptionnel.parentMC.definition.entites[self.texte] maLangue = self.monOptionnel.parentMC.jdc.lang if hasattr(maDefinition,maLangue): - monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang) + self.monAide = getattr(maDefinition,self.monOptionnel.parentMC.jdc.lang) else : - monAide = "" + self.monAide = "" except : - monAide = "" - self.monOptionnel.parentMC.editor.afficheCommentaire(monAide) + self.monAide = "" + self.monOptionnel.parentMC.editor.afficheCommentaire(self.monAide) class MonPBButtonCustom(QWidget,Ui_customPB): diff --git a/InterfaceQT4/monLayoutBouton.py b/InterfaceQT4/monLayoutBouton.py index a1c11b7b..49a431a4 100644 --- a/InterfaceQT4/monLayoutBouton.py +++ b/InterfaceQT4/monLayoutBouton.py @@ -39,7 +39,9 @@ class MonLayoutBouton : self.appliEficas = appliEficas self.buttonGroup = QButtonGroup() - for nomEtape in self.appliEficas.readercata.cata_ordonne_dico: + + for etape in self.appliEficas.readercata.cata.JdC.commandes : + nomEtape = etape.nom toolButton = QToolButton(self.appliEficas.toolBarCommande) icon = QIcon() if nomEtape in self.appliEficas.maConfiguration.dicoIcones: diff --git a/InterfaceQT4/monWidgetFact.py b/InterfaceQT4/monWidgetFact.py index 38f5805b..d756cb28 100644 --- a/InterfaceQT4/monWidgetFact.py +++ b/InterfaceQT4/monWidgetFact.py @@ -41,6 +41,9 @@ class MonWidgetFactCommun(Groupe): self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse) self.parentQt.commandesLayout.insertWidget(insertIn,self) self.doitAfficherOptionnel=False + min,max=obj.getMinMax() + if max < 2 and hasattr(self, 'RBPlus') : self.RBPlus.close() + if max > 1 and hasattr(self, 'RBPlus') : self.RBPlus.clicked.connect(self.ajouteMCParPB) def enterEvent(self,event): #print "enterEvent ", self.node.item.getLabelText()[0] @@ -57,6 +60,14 @@ class MonWidgetFactCommun(Groupe): #print "delayAffiche, self.doitAfficherOptionnel = ", self.doitAfficherOptionnel if self.doitAfficherOptionnel and self.editor.code != "CARMELCND" :self.afficheOptionnel() + def ajouteMCParPB(self): + texteListeNom="+"+self.obj.nom + parentOuAjouter=self.parentQt + from .monWidgetBloc import MonWidgetBloc + while (parentOuAjouter and isinstance(parentOuAjouter, MonWidgetBloc)) : + parentOuAjouter=parentOuAjouter.parentQt + parentOuAjouter.ajoutMC(texteListeNom) + class MonWidgetFact(Ui_WidgetFact,MonWidgetFactCommun): def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1): diff --git a/InterfaceQT4/monWidgetOptionnel.py b/InterfaceQT4/monWidgetOptionnel.py index fa3cd9db..904e5841 100644 --- a/InterfaceQT4/monWidgetOptionnel.py +++ b/InterfaceQT4/monWidgetOptionnel.py @@ -42,9 +42,11 @@ class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): self.vireLesAutres(MC) if MC.node.item.nom in self.dicoMCWidgetOptionnel : + #print (MC.node.item.nom) self.dicoMCWidgetOptionnel[MC.node.item.nom].close() self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None) self.dicoMCWidgetOptionnel[MC.node.item.nom].deleteLater() + del self.dicoMCWidgetOptionnel[MC.node.item.nom] if liste==[] : return groupe = MonGroupeOptionnel(liste,liste_rouge,self,MC) self.groupesOptionnelsLayout.insertWidget(0,groupe) diff --git a/InterfaceQT4/monWidgetPlusieursInto.py b/InterfaceQT4/monWidgetPlusieursInto.py index 0c81134a..ddbc9894 100644 --- a/InterfaceQT4/monWidgetPlusieursInto.py +++ b/InterfaceQT4/monWidgetPlusieursInto.py @@ -86,7 +86,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def changeTout(self,int): - print ('changeTout') + #print ('changeTout') if self.inhibe : return self.inhibe=True if not(self.CBCheck.isChecked()) : @@ -111,7 +111,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) self.changeValeur() def setValeurs(self): - print ('setValeurs') + #print ('setValeurs') self.listeValeursCourantes =self.node.item.getValeur() if self.listeValeursCourantes == None : self.listeValeursCourantes=[] #print "ds set Valeur", self.listeValeursCourantes, self.node.item.getValeur() @@ -168,7 +168,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def ajoutCB(self,index,valeur=None): - print ('ajoutCB') + #print ('ajoutCB') nomCB="lineEditVal"+str(index) if hasattr(self,nomCB) : return nouveauCB = QCheckBox(self.scrollArea) @@ -184,7 +184,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def ajout1Valeur(self,valeur=None): - print ('ajout1Valeur') + #print ('ajout1Valeur') if valeur == None : return liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur)) if validite == 0 : return @@ -202,7 +202,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def changeValeur(self): - print ('changeValeur') + #print ('changeValeur') if self.inhibe == True: return if hasattr(self,'LEFiltre') :self.noircirResultatFiltre() self.listeValeursCourantesAvant=self.listeValeursCourantes @@ -235,7 +235,7 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def prepareListeResultatFiltre(self): - print ('prepareListeResultatFiltre') + #print ('prepareListeResultatFiltre') filtre=str(self.LEFiltre.text()) for cb in self.listeCB: texte=cb.text() @@ -248,12 +248,12 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) self.listeCbRouge.append(cb) def prepareListeResultat(self): - print ('prepareListeResultat') + #print ('prepareListeResultat') self.clearAll() self.setValeurs() def clearAll(self): - print ('clearAll') + #print ('clearAll') for cb in self.listeCB : cb.setText("") diff --git a/InterfaceQT4/monWidgetPlusieursTuple.py b/InterfaceQT4/monWidgetPlusieursTuple.py index ace27ef0..531f0a43 100644 --- a/InterfaceQT4/monWidgetPlusieursTuple.py +++ b/InterfaceQT4/monWidgetPlusieursTuple.py @@ -412,7 +412,7 @@ class MonWidgetPlusieursTuple(Feuille,GereListe): validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete) if not validite : - self.editor.afficheInfos(texte,Qt.red) + self.editor.afficheInfos(comm+comm2,Qt.red) return # on calcule le dernier lineedit rempli avant de changer la valeur diff --git a/InterfaceQT4/monWidgetRadioButton.py b/InterfaceQT4/monWidgetRadioButton.py index 711e84f2..129046be 100644 --- a/InterfaceQT4/monWidgetRadioButton.py +++ b/InterfaceQT4/monWidgetRadioButton.py @@ -55,7 +55,7 @@ class MonWidgetRadioButtonCommun (Feuille): def setValeursApresBouton(self): if self.objSimp.getValeur()==None : return valeur=self.objSimp.getValeur() - if not(type(valeur) == str) : valeur=str(valeur) + if not(isinstance(valeur, str)) : valeur = str(valeur) try : self.dict_bouton[valeur].setChecked(True) self.dict_bouton[valeur].setFocus(True) @@ -73,7 +73,7 @@ class MonWidgetRadioButtonCommun (Feuille): nomBouton="radioButton_"+str(i) bouton=getattr(self,nomBouton) valeur=self.maListeDeValeur[i-1] - if not(type(valeur) == str) : valeur=str(valeur) + if not(isinstance(valeur, str)) : valeur = str(valeur) bouton.setText(tr(valeur)) self.dict_bouton[valeur]=bouton bouton.clicked.connect(self.boutonclic) diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index c5eb945f..08de9be6 100755 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -99,11 +99,16 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): icon = QIcon(self.repIcon+"/parametres.png") self.actionParametres.setIcon(icon) - if hasattr (self, 'maConfiguration') and self.maConfiguration.boutonDsMenuBar : self.frameEntete.setMaximumSize(QSize(16777215,100)) self.frameEntete.setMinimumSize(QSize(0,100)) - + if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverActionStructures : + self.enleverActionsStructures() + if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverParametres : + self.enleverParametres() + if hasattr (self, 'maConfiguration') and self.maConfiguration.enleverSupprimer : + self.enleverSupprimer() + self.myQtab.removeTab(0) self.blEnteteGlob = QBoxLayout(2,self.frameEntete) @@ -139,6 +144,7 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): self.menuFichier.removeAction(self.actionARemplacer) self.connecterSignaux() self.toolBar.addSeparator() + if self.code != None : self.construitMenu() self.setWindowTitle(self.VERSION_EFICAS) @@ -196,6 +202,8 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): Appli.__dict__[self.code.upper()](self,) if self.suiteTelemac : self.lookSuiteTelemac() self.metMenuAJourUtilisateurs() + if hasattr (self, 'maConfiguration') and self.maConfiguration.ajoutExecution : + self.ajoutExecution() def initAides(self): #print "je passe la" @@ -379,6 +387,14 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): self.menuOptions.addAction(self.actionParametres_Eficas) self.menuOptions.setTitle(tr("Options")) + def MAPIDENTIFICATION(self): + self.enlevernewInclude() + self.enleverSupprimer() + #self.ajoutExecution() + self.enleverRechercherDsCatalogue() + self.enleverActionsStructures() + self.enleverParametres() + def PSEN(self): if self.first: self.first=0 try : self.action_Nouveau.triggered.disconnect(self.fileNew) diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py index 1881851f..1b0b79ab 100644 --- a/InterfaceQT4/qtSaisie.py +++ b/InterfaceQT4/qtSaisie.py @@ -111,7 +111,8 @@ class SaisieValeur(object): valeur=valeurBrute # pour traiter 11.0 - 30.0 pour le CIST - if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) : + #if (valeurTraitee and (type(valeurTraitee) in types.StringTypes) and (self.node.item.waitTxm())) : + if (valeurTraitee and isinstance(valeurTraitee, str) and (self.node.item.waitTxm())) : valeur=str(valeurTraitee) diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index 4b8c25dc..f788c8b6 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -188,7 +188,21 @@ class ReaderCata (ReaderCataCommun): """ # import du catalogue self.choisitCata() + + if self.appliEficas.maConfiguration.withXSD : + try : + #import raw.Telemac2d as modeleMetier + #import raw.cata_genere_fact as modeleMetier + import raw.cata_map_genere as modeleMetier + #import raw.cata_bloc as modeleMetier + print ('import Test ad modeleMetier') + except : + modeleMetier = None + else : + modeleMetier = None + self.cata = self.importCata(self.fic_cata) + self.cata.modeleMetier = modeleMetier if not self.cata : QMessageBox.critical( self.QWParent, tr("Import du catalogue"),tr("Impossible d'importer le catalogue ")+ self.fic_cata) self.appliEficas.close() @@ -200,6 +214,8 @@ class ReaderCata (ReaderCataCommun): # retrouveOrdreCataStandard fait une analyse textuelle du catalogue # remplace par retrouveOrdreCataStandardAutre qui utilise une numerotation # des mots cles a la creation + #print (self.cata) + #print (dir(self.cata)) self.retrouveOrdreCataStandardAutre() if self.appliEficas.maConfiguration.modeNouvCommande == "initial" : self.retrouveOrdreCataStandard() if hasattr(self.cata, 'Ordre_Des_Commandes') : self.Ordre_Des_Commandes=self.cata.Ordre_Des_Commandes @@ -254,6 +270,7 @@ class ReaderCata (ReaderCataCommun): except: pass + #if 1 : try : o=__import__(nom_cata) return o @@ -271,6 +288,8 @@ class ReaderCata (ReaderCataCommun): contient le nom des mots cles dans le bon ordre """ self.cata_ordonne_dico, self.appliEficas.liste_simp_reel=autre_analyse_cata.analyseCatalogue(self.cata) + #self.appliEficas.liste_simp_reel = () + #self.cata_ordonne_dico = {} def retrouveOrdreCataStandard(self): """ diff --git a/InterfaceQT4/readercataXML.py b/InterfaceQT4/readercataXML.py index 3d421d90..5579a82b 100644 --- a/InterfaceQT4/readercataXML.py +++ b/InterfaceQT4/readercataXML.py @@ -33,7 +33,8 @@ from monChoixCata import MonChoixCata from Extensions.i18n import tr from Extensions.eficas_exception import EficasException import uiinfo -from Efi2Xsd import readerEfficas +from Efi2Xsd import readerEfiXsd +# ATtention pas teste depuis le chgt de nom from readercata import ReaderCataCommun @@ -69,7 +70,7 @@ class ReaderCata (ReaderCataCommun): #xml = open('/home/A96028/QT5GitEficasTravail/eficas/CataTestXSD/cata_test1.xml').read() self.choisitCata() xml=open(self.fic_cata).read() - SchemaMed = readerEfficas.efficas.CreateFromDocument(xml) + SchemaMed = readerEfiXsd.efficas.CreateFromDocument(xml) SchemaMed.exploreCata() self.cata=SchemaMed uiinfo.traite_UIinfo(self.cata) diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py index 396436d2..f9e2e944 100644 --- a/InterfaceQT4/typeNode.py +++ b/InterfaceQT4/typeNode.py @@ -50,7 +50,7 @@ class PopUpMenuNodeMinimal(object) : #---------------------------# def createPopUpMenu(self): - print ("createPopUpMenu") + #print ("createPopUpMenu") #self.appliEficas.salome=True self.createActions() self.menu = QMenu(self.tree) diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 95e43e86..0050a294 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -419,7 +419,7 @@ class MyViewManager(object): if editor.getEtapeCourante() == None : QMessageBox.information( self.appliEficas, tr("Selectionner une etape"), - tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide et inserer le catalogue apres")) + tr("Le texte ne peut pas etre insere dans un fichier vide,\nCreer un materiau vide ou une zone vide et inserer le catalogue apres")) return listeParam = [] diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py index e1b24e8f..c8f64871 100644 --- a/Noyau/N_BLOC.py +++ b/Noyau/N_BLOC.py @@ -80,12 +80,12 @@ class BLOC(N_ENTITE.ENTITE): self.entites = args self.affecter_parente() - def __call__(self, val, nom, parent=None): + def __call__(self, val, nom, parent=None, dicoPyxbDeConstruction=None): """ Construit un objet MCBLOC a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) """ - return self.class_instance(nom=nom, definition=self, val=val, parent=parent) + return self.class_instance(nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction) def verifCata(self): """ diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py index c3296c9b..a92b04f9 100644 --- a/Noyau/N_ETAPE.py +++ b/Noyau/N_ETAPE.py @@ -66,7 +66,16 @@ class ETAPE(N_MCCOMPO.MCCOMPO): - reuse : indique le concept d'entree reutilise. Il se trouvera donc en sortie si les conditions d'execution de l'operateur l'autorise - valeur : arguments d'entree de type mot-cle=valeur. Initialise avec l'argument args. - """ + - objPyxbDeConstruction + """ + # faut il le faire ds MC_Build ? + # traitement de Pyxb si Pyxb + self.dicoPyxbDeConstruction = args.get('dicoPyxbDeConstruction', None) + if self.dicoPyxbDeConstruction : + del args['dicoPyxbDeConstruction'] + self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb'] + else : + self.objPyxbDeConstruction=None self.definition = oper self.reuse = reuse self.valeur = args @@ -81,12 +90,15 @@ class ETAPE(N_MCCOMPO.MCCOMPO): self.actif = 1 self.makeRegister() self.icmd = None + print ('uuuuuuuuuuuuuuu fin init de ETAPE', self,oper) def makeRegister(self): """ Initialise les attributs jdc, id, niveau et realise les enregistrements necessaires + surcharge dans Ihm """ + print ('makeRegister de ETAPE') if self.parent: self.jdc = self.parent.getJdcRoot() self.id = self.parent.register(self) diff --git a/Noyau/N_FACT.py b/Noyau/N_FACT.py index 721f76d0..6de7e404 100644 --- a/Noyau/N_FACT.py +++ b/Noyau/N_FACT.py @@ -54,7 +54,7 @@ class FACT(N_ENTITE.ENTITE): list_instance = N_MCLIST.MCList label = 'FACT' - def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None, + def __init__(self, fr="", docu="", regles=(), statut='f', defaut=None,ang="",fenetreIhm=None, min=0, max=1, validators=None, **args): """ Un mot-clé facteur est caractérisé par les attributs suivants : @@ -89,7 +89,7 @@ class FACT(N_ENTITE.ENTITE): self.affecter_parente() self.fenetreIhm = fenetreIhm - def __call__(self, val, nom, parent): + def __call__(self, val, nom, parent, dicoPyxbDeConstruction = None): """ Construit la structure de donnee pour un mot cle facteur a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de @@ -130,24 +130,30 @@ class FACT(N_ENTITE.ENTITE): l = self.list_instance() l.init(nom=nom, parent=parent) if type(val) in (tuple, list, self.list_instance): + indice=0 for v in val: if type(v) == dict or isinstance(v, _F): objet = self.class_instance( - nom=nom, definition=self, val=v, parent=parent) + nom=nom, definition=self, val=v, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction[indice]) + indice=indice+1 l.append(objet) elif isinstance(v, self.class_instance): +# if faut gerer ici --> on passe la avec une liste de concept ? +# PNPN --> si pyxb l.append(v) else: l.append(N_OBJECT.ErrorObj(self, v, parent, nom)) elif type(val) == dict or isinstance(val, _F): objet = self.class_instance( - nom=nom, definition=self, val=val, parent=parent) + nom=nom, definition=self, val=val, parent=parent,dicoPyxbDeConstruction=dicoPyxbDeConstruction) l.append(objet) elif isinstance(val, self.class_instance): +# idem --> quand passe t on la l.append(val) else: l.append(N_OBJECT.ErrorObj(self, val, parent, nom)) - + l.cata=l.jdc.cata + l.buildObjPyxb(l) return l def verifCata(self): diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index cdcf0e9a..172ed05a 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -177,6 +177,12 @@ Causes possibles : self.cr.exception("Compilation impossible : " + ''.join(l)) return + def setCurrentContext(self): + # beaucoup trop simple Ne tient pas compte des imports + # et des include + # ne sert que pour le POC + CONTEXT.setCurrentStep(self) + def execCompile(self): """ Cette methode execute le jeu de commandes compile dans le contexte @@ -197,7 +203,7 @@ Causes possibles : init2 = "from " + obj_cata.__name__ + " import *" exec(init2, self.g_context) else : - # ici on est en xml + # ici on a un catalogue en grammaire Eficas XML # il faut ajouter ce qu on a construit au contexte for (k,v) in obj_cata.contexteXML.items() : self.g_context[k]=v diff --git a/Noyau/N_JDC_CATA.py b/Noyau/N_JDC_CATA.py index 6ce9f5c6..27a76e8f 100644 --- a/Noyau/N_JDC_CATA.py +++ b/Noyau/N_JDC_CATA.py @@ -70,7 +70,8 @@ class JDC_CATA(N_ENTITE.ENTITE): CONTEXT.unsetCurrentCata() CONTEXT.setCurrentCata(self) self.fenetreIhm=None - + self.dictTypesXSD={} + def __call__(self, procedure=None, cata=None, cata_ord_dico=None, nom='SansNom', parent=None, **args): """ diff --git a/Noyau/N_MCBLOC.py b/Noyau/N_MCBLOC.py index 5207082b..ec8744fa 100644 --- a/Noyau/N_MCBLOC.py +++ b/Noyau/N_MCBLOC.py @@ -39,7 +39,7 @@ class MCBLOC(N_MCCOMPO.MCCOMPO): nature = "MCBLOC" - def __init__(self, val, definition, nom, parent): + def __init__(self, val, definition, nom, parent,dicoPyxbDeConstruction=None): """ Attributs : @@ -56,11 +56,14 @@ class MCBLOC(N_MCCOMPO.MCCOMPO): - mc_liste : liste des sous-objets du bloc construite par appel à la méthode build_mc """ + #print ('MCBLOC' , val, definition, nom, parent) self.definition = definition self.nom = nom self.val = val self.parent = parent self.valeur = val + self.objPyxbDeConstruction=None + self.dicoPyxbDeConstruction=dicoPyxbDeConstruction if parent: self.jdc = self.parent.jdc self.niveau = self.parent.niveau diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py index 28f808b5..c99d57d6 100644 --- a/Noyau/N_MCCOMPO.py +++ b/Noyau/N_MCCOMPO.py @@ -41,6 +41,11 @@ class MCCOMPO(N_OBJECT.OBJECT): Construit la liste des sous-entites du MCCOMPO à partir du dictionnaire des arguments (valeur) """ + + #import traceback + #traceback.print_stack() + #print(("MCCOMPO.build_mc _____________________________________", self.nom)) + #print (self.dicoPyxbDeConstruction) if CONTEXT.debug: print(("MCCOMPO.build_mc ", self.nom)) # Dans la phase de reconstruction args peut contenir des mots-clés @@ -51,6 +56,7 @@ class MCCOMPO(N_OBJECT.OBJECT): args = self.valeur if args == None: args = {} mc_liste = [] + # On recopie le dictionnaire des arguments pour protéger l'original des # delete (del args[k]) @@ -62,6 +68,9 @@ class MCCOMPO(N_OBJECT.OBJECT): # 2- les entités non présentes dans les arguments, présentes dans la définition avec un défaut # Phase 1.1 : on traite d'abord les SIMP pour enregistrer les mots cles # globaux + # PN ligne suivante uniquement pour commodite + # a detruire quand cela fonctionne recursivement + if not hasattr(self, 'dicoPyxbDeConstruction') : self.dicoPyxbDeConstruction = {} for k, v in list(self.definition.entites.items()): if v.label != 'SIMP': continue @@ -71,7 +80,12 @@ class MCCOMPO(N_OBJECT.OBJECT): # si une valeur existe dans args ou est obligatoire (generique si toutes les # entites ont l attribut statut ) # - objet = v(val=args.get(k, None), nom=k, parent=self) + if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction : + objPyxbDeConstruction=self.dicoPyxbDeConstruction[k] + del self.dicoPyxbDeConstruction[k] + else : + objPyxbDeConstruction=None + objet = v(val=args.get(k, None), nom=k, parent=self,objPyxbDeConstruction=objPyxbDeConstruction) mc_liste.append(objet) # Si l'objet a une position globale on l'ajoute aux listes # correspondantes @@ -94,7 +108,12 @@ class MCCOMPO(N_OBJECT.OBJECT): # si une valeur existe dans args ou est obligatoire (generique si toutes les # entites ont l attribut statut ) # - objet = v(val=args.get(k, None), nom=k, parent=self) + if self.dicoPyxbDeConstruction and k in self.dicoPyxbDeConstruction : + dicoPyxbDeConstruction=self.dicoPyxbDeConstruction[k] + del self.dicoPyxbDeConstruction[k] + else : + dicoPyxbDeConstruction=None + objet = v(val=args.get(k, None), nom=k, parent=self,dicoPyxbDeConstruction=dicoPyxbDeConstruction) mc_liste.append(objet) if k in args: del args[k] @@ -121,7 +140,7 @@ class MCCOMPO(N_OBJECT.OBJECT): # 2- on l'ajoute à mc_liste # 3- on récupère les arguments restant # 4- on reconstruit le dictionnaire équivalent à mc_liste - bloc = v(nom=k, val=args, parent=self) + bloc = v(nom=k, val=args, parent=self,dicoPyxbDeConstruction=self.dicoPyxbDeConstruction) mc_liste.append(bloc) args = bloc.reste_val # On ne recalcule pas le contexte car on ne tient pas compte des blocs @@ -134,6 +153,11 @@ class MCCOMPO(N_OBJECT.OBJECT): # (utile seulement pour IHM graphique) mc_liste = self.ordonneListe(mc_liste) # on retourne la liste ainsi construite + self.cata=self.jdc.cata + self.buildObjPyxb(mc_liste) + #else : print ('pas de construction pour ', self.nom, self.objPyxbDeConstruction) + #print ('buildObjPyxb : ' , self.nom) + print(("MCCOMPO.build_mc fin_____________________________________", self.nom)) return mc_liste def ordonneListe(self, mc_liste): diff --git a/Noyau/N_MCFACT.py b/Noyau/N_MCFACT.py index 8edc5cc8..dad024a4 100644 --- a/Noyau/N_MCFACT.py +++ b/Noyau/N_MCFACT.py @@ -34,7 +34,7 @@ class MCFACT(N_MCCOMPO.MCCOMPO): """ nature = "MCFACT" - def __init__(self, val, definition, nom, parent): + def __init__(self, val, definition, nom, parent,dicoPyxbDeConstruction): """ Attributs : - val : valeur du mot clé simple @@ -42,6 +42,16 @@ class MCFACT(N_MCCOMPO.MCCOMPO): - nom - parent """ + #print ('MCFACT', self, val, definition, nom, parent, objPyxbDeConstruction) + import traceback + #traceback.print_stack() + #if nom == 'experience' : print ('MCFACT', self, parent, dicoPyxbDeConstruction); exit() + self.dicoPyxbDeConstruction=dicoPyxbDeConstruction + if self.dicoPyxbDeConstruction : + self.objPyxbDeConstruction=self.dicoPyxbDeConstruction['objEnPyxb'] + del self.dicoPyxbDeConstruction['objEnPyxb'] + else : + self.objPyxbDeConstruction=None self.definition = definition self.nom = nom self.val = val diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py index 1f2cee9c..97b5caf2 100644 --- a/Noyau/N_MCLIST.py +++ b/Noyau/N_MCLIST.py @@ -50,6 +50,7 @@ class MCList(UserList): nature = 'MCList' def init(self, nom, parent): + self.objPyxbDeConstruction=None self.definition = None self.nom = nom self.parent = parent diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index df387df0..9c1125b1 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -40,7 +40,7 @@ class MCSIMP(N_OBJECT.OBJECT): """ nature = 'MCSIMP' - def __init__(self, val, definition, nom, parent): + def __init__(self, val, definition, nom, parent,objPyxbDeConstruction): """ Attributs : @@ -57,19 +57,28 @@ class MCSIMP(N_OBJECT.OBJECT): - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut """ + #print ("MCSIMP, ------------------------") + #print (self, val, definition, nom, parent) + #print ("MCSIMP, ------------------------") self.definition = definition self.nom = nom self.val = val self.parent = parent self.convProto = ConversionFactory('type', typ=self.definition.type) self.valeur = self.GETVAL(self.val) + self.objPyxbDeConstruction=objPyxbDeConstruction if parent: - self.jdc = self.parent.jdc + self.jdc = self.parent.jdc + self.cata = self.jdc.cata self.niveau = self.parent.niveau self.etape = self.parent.etape + self.buildObjPyxb() else: # Le mot cle simple a été créé sans parent + # est-ce possible ? + print ('je suis dans le else sans parent du build') self.jdc = None + self.cata = None self.niveau = None self.etape = None diff --git a/Noyau/N_OPER.py b/Noyau/N_OPER.py index 0ab3f555..955b0897 100644 --- a/Noyau/N_OPER.py +++ b/Noyau/N_OPER.py @@ -86,7 +86,7 @@ class OPER(N_ENTITE.ENTITE): label = 'OPER' nommage = nommage - def __init__(self, nom, op, sd_prod, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None, + def __init__(self, nom, op=None, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None, docu="", regles=(), op_init=None, niveau = None, UIinfo=None, **args): """ Méthode d'initialisation de l'objet OPER. Les arguments sont utilisés pour initialiser diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py index 84055eb1..9606f351 100644 --- a/Noyau/N_SIMP.py +++ b/Noyau/N_SIMP.py @@ -69,6 +69,10 @@ class SIMP(N_ENTITE.ENTITE): - sug : valeur suggere - fenetreIhm=None """ + #print (self) + #import traceback + #traceback.print_stack() + #print (self) N_ENTITE.ENTITE.__init__(self, validators) # Initialisation des attributs if type(typ) == tuple: @@ -110,27 +114,26 @@ class SIMP(N_ENTITE.ENTITE): self.checkPosition() self.checkValidators() - def __call__(self, val, nom, parent=None): + def __call__(self, val, nom, parent=None, objPyxbDeConstruction = None): """ Construit un objet mot cle simple (MCSIMP) a partir de sa definition (self) de sa valeur (val), de son nom (nom) et de son parent dans l arboresence (parent) """ - return self.class_instance(nom=nom, definition=self, val=val, parent=parent) - - def creeT_SIMP(self): - from Efi2Xsd.readerEfficas import monSIMP - from Efi2Xsd.mapDesTypes import dictSIMPEficasXML - - self.objXML=monSIMP() - for nomEficasArg in dictSIMPEficasXML : - argu=getattr(self,nomEficasArg) - nomXMLarg=dictSIMPEficasXML[nomEficasArg] - if not isinstance(nomXMLarg, (list, tuple)) : - print(nomXMLarg, argu) + return self.class_instance(nom=nom, definition=self, val=val, parent=parent, objPyxbDeConstruction=objPyxbDeConstruction) + +# def creeT_SIMP(self): +# from Efi2Xsd.readerEfficas import monSIMP +# from Efi2Xsd.mapDesTypes import dictSIMPEficasXML +# self.objXML=monSIMP() +# for nomEficasArg in dictSIMPEficasXML : +# argu=getattr(self,nomEficasArg) +# nomXMLarg=dictSIMPEficasXML[nomEficasArg] +# if not isinstance(nomXMLarg, (list, tuple)) : +# print(nomXMLarg, argu) #if nomEficasArg in listeParamDeTypeTypeAttendu: # typeAttendu = self.typ - - setattr(self.objXML, nomXMLarg, argu) +# +# setattr(self.objXML, nomXMLarg, argu) diff --git a/UiQT5/desWidgetFact.ui b/UiQT5/desWidgetFact.ui index 2a9dbbec..cba4773d 100644 --- a/UiQT5/desWidgetFact.ui +++ b/UiQT5/desWidgetFact.ui @@ -37,16 +37,7 @@ 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -388,6 +379,38 @@ + + + + + 21 + 25 + + + + + 21 + 25 + + + + border : 0px + + + ... + + + + ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + + + + 21 + 25 + + + + @@ -455,9 +478,6 @@ - - verticalSpacer_2 - -- 2.39.2