From: pascale.noyret Date: Thu, 30 Jan 2020 15:38:07 +0000 (+0100) Subject: 1ere version correcte des UserADDS X-Git-Tag: V200520bis~87 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=dfb5d7049386dde00401b6b0eee47dcd5e6b8bd0;p=tools%2Feficas.git 1ere version correcte des UserADDS --- diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 23d66f8b..f0754dd8 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -502,7 +502,6 @@ class ETAPE(I_MCCOMPO.MCCOMPO): #rafraichisst de la validite de l'etape (probleme avec l'ordre dans les macros : etape puis mots cles) self.isValid() if not self.isValid() and self.nom == "INCLUDE" : - self.cr.fatal(('Etape : %s ligne : %r %s'), - self.nom, self.appel[0], tr("\n Include Invalide. \n ne sera pas pris en compte")) + self.cr.fatal('Etape : {} ligne : {} {}'.format(self.nom, self.appel[0], tr("\n Include Invalide. \n ne sera pas pris en compte"))) return cr diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index 71e3cb70..9010f047 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -75,7 +75,6 @@ class JDC(I_OBJECT.OBJECT): l=[] for k,v in d.items(): - print (k,v) #if type(v) != types.InstanceType and not isinstance(v,object): continue if not isinstance(v,object): continue # On considere que seul assd indique un type quelconque pas CO @@ -147,7 +146,7 @@ class JDC(I_OBJECT.OBJECT): etapeTraitee.isValid() def recalculeValiditeApresChangementGlobalJdc(self, motClef): - print ("je passe dans recalculeValiditeApresChangementGlobalJdc") + #print ("je passe dans recalculeValiditeApresChangementGlobalJdc") #import traceback #traceback.print_stack() try : @@ -156,7 +155,6 @@ class JDC(I_OBJECT.OBJECT): liste=() for etapeTraitee in self.etapes : if etapeTraitee.nom not in liste: continue - print ('me voila pour ', etapeTraitee.nom) #self.forceRecalculBloc(etapeTraitee) etapeTraitee.state='arecalculer' etapeTraitee.deepUpdateConditionBloc() diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 7cea87cf..20a0927a 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -77,12 +77,12 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): ou leve une exception --> utilisee par ops.POURSUITE et INCLUDE """ - #print ("getContexteJdc",self,self.nom, text) + print ("getContexteJdc",self,self.nom, text) # On recupere l'etape courante step=CONTEXT.getCurrentStep() self.text_included_converted=0 - #try: - if 1 : + try: + #if 1 : # on essaie de creer un objet JDC auxiliaire avec un contexte initial # Attention getContexteAvant retourne un dictionnaire qui contient # le contexte courant. Ce dictionnaire est reactualise regulierement. @@ -152,8 +152,8 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.jdc_aux=j self.jdc.jdcDict=self.jdc_aux - #except: - else : + except: + #else : traceback.print_exc() # On retablit l'etape courante step CONTEXT.unsetCurrentStep() @@ -226,15 +226,25 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): if callable(v):continue self.g_context[k]=param2.Variable(k,v) + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') + print (j) + print (dir(j)) + print (j.current_context) # On recupere le contexte courant self.current_context=j.current_context + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') self.index_etape_courante=j.index_etape_courante + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') self.jdc_aux=j + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') # On retablit l'etape courante step CONTEXT.unsetCurrentStep() + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') CONTEXT.setCurrentStep(step) + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') + print ('kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmmmmm') return j_context def reevalueSdJdc(self): @@ -616,9 +626,10 @@ 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) + print (contexte) if contexte == None : raise EficasException("Impossible de construire le jeu de commandes correspondant au fichier") else: @@ -630,7 +641,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""" @@ -795,6 +806,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): return if type(self.definition.op_init) == types.FunctionType: + print ('mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm dans updateContext') self.definition.op_init(*(self,d)) if self.sd != None :d[self.sd.nom]=self.sd for co in self.sdprods: @@ -1044,6 +1056,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro) + #def makeInclude(self, unite=None, fname=None): def makeInclude(self, unite=None, fname=None): """ Inclut un fichier dont l'unite logique est unite @@ -1052,12 +1065,16 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): Sinon on retourne None. Les concepts produits par l'INCLUDE sont pris en compte par le JDC parent lors du calcul du contexte (appel de ???) """ - #print "makeInclude",unite + print ("makeInclude",fname) # On supprime l'attribut unite qui bloque l'evaluation du source de l'INCLUDE # car on ne s'appuie pas sur lui dans EFICAS mais sur l'attribut fichier_ini # Si unite n'a pas de valeur, l'etape est forcement invalide. On peut retourner None - if not unite and not fname: - return + #if not unite and not fname: + # return + # 2020 on supprime unite + # attention cependant c est utilise pour poursuite + # PNPN a revoir + if not fname : return if not hasattr(self,'fichier_ini') : # Si le fichier n'est pas defini on le demande @@ -1082,8 +1099,11 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): raise EficasException(self.fichier_err) try: + print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') self.makeContexteInclude(self.fichier_ini ,self.fichier_text) + print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') self.parent.recordUnit(unite,self) + print ('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') except: l=traceback.format_exception_only(tr("Fichier invalide %s",sys.exc_info()[1])) if self.jdc.appliEficas: @@ -1103,6 +1123,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.updateFichierInit(unite) self.fichier_unite=unite if self.fichier_err is not None: raise EficasException(self.fichier_err) + print ('self.g_context', self.g_context) #ATTENTION SURCHARGE : cette methode surcharge celle de Noyau (a garder en synchro) diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 749ac5fe..0f7943f0 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -341,7 +341,6 @@ class MCSIMP(I_OBJECT.OBJECT): self.initModif() self.valeur = new_valeur self.val = new_valeur - print ('dans setValeur pour ', self.nom) if self.valeur and self.waitUserAssd() and not(self.waitUserAssdEnCreation()) : self.valeur.ajoutUtilisePar(self) if self.isValid():self.setValeurObjPyxb(new_valeur) self.updateConditionBloc() diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py index 7d1dde89..56b08c19 100644 --- a/Ihm/I_OBJECT.py +++ b/Ihm/I_OBJECT.py @@ -183,6 +183,8 @@ class OBJECT: # doit etre surcharge dans MC_COMPO et MC_SIMP pass + def demandeRedessine(self): + CONNECTOR.Emit(self,"redessine") diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 0b4c134d..8cb3810b 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -290,6 +290,7 @@ class JDCNode(QTreeWidgetItem,GereRegles): self.item.connect("valid",self.onValid,()) self.item.connect("supp" ,self.onSupp,()) self.item.connect("add" ,self.onAdd,()) + self.item.connect("redessine" ,self.onRedessine,()) self.state="" self.fenetre=None @@ -730,7 +731,12 @@ class JDCNode(QTreeWidgetItem,GereRegles): self.updateNodes() if hasattr(self.item,'jdc'): self.item.jdc.aReafficher=True - + def onRedessine(self): + #--------------------- + print ('dans redessine pour', self) + self.updateNodeTexte() + #if not(self.fenetre): return + # a priori l objet C++ n est plus la si la fenetre n est pas visible def updateNodeValid(self): #----------------------- diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index e5b5c469..3428cf4b 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -44,6 +44,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): def getPanelGroupe(self,parentQt,maCommande): + #print (self,self.item.nom, ) maDefinition=self.item.get_definition() monObjet=self.item.object monNom=self.item.nom @@ -135,16 +136,22 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif self.item.waitAssd(): + + # PN - pour ne pas appeller trop souvent self.item.getSdAvantDuBonType() + if not (self.item.waitUserAssdEnCreation()) : maListe=self.item.getSdAvantDuBonType() if self.item.waitUserAssdEnCreation() : from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeUserAssd widget=MonWidgetCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande) - elif len(self.item.getSdAvantDuBonType()) == 0 : + #elif len(self.item.getSdAvantDuBonType()) == 0 : + elif len(maListe) == 0 : from InterfaceQT4.monWidgetVide import MonWidgetVide widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande) - elif len(self.item.getSdAvantDuBonType()) < 4 : + #elif len(self.item.getSdAvantDuBonType()) < 4 : + elif len(maListe) < 4 : from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButtonSD widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande) - elif len(self.item.getSdAvantDuBonType()) < 7 : + #elif len(self.item.getSdAvantDuBonType()) < 7 : + elif len(maListe) < 7 : from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande) else : diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index f6a84342..d549b36d 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -65,7 +65,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # ---------------------------------------- def __init__ (self,appliEficas,fichier = None, jdc=None, QWParent=None, units = None, include=0): - #------------------------------------------------------------------------------------------ + #------------------------------------------------------------------------------------------------ QWidget.__init__(self,None) diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py index 2a0c12ed..ce7b08ef 100755 --- a/InterfaceQT4/editorSsIhm.py +++ b/InterfaceQT4/editorSsIhm.py @@ -54,7 +54,7 @@ class JDCEditorSsIhm : # --------------------------------------------- def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ): - #------------------------------------------------------------------------------# + #-----------------------------------------------------------------------------------# # paticularisee avec Ihm if debug : print ('dans le init de JDCEditorSsIhm') @@ -223,7 +223,7 @@ class JDCEditorSsIhm : #jdc=self.readercata.cata[0].JdC(procedure=text, jdc=self.readercata.cata.JdC(procedure=text, - appliEficas=self, + appliEficas=self.appliEficas, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, nom=jdcName, @@ -252,7 +252,7 @@ class JDCEditorSsIhm : jdc=self.readercata.cata.JdC( procedure =texte, - appliEficas=self, + appliEficas=self.appliEficas, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, rep_mat=self.maConfiguration.rep_mat @@ -280,7 +280,7 @@ class JDCEditorSsIhm : #jaux=self.readercata.cata[0].JdC( procedure="", jaux=self.readercata.cata.JdC( procedure="", - appliEficas=self, + appliEficas=self.appliEficas, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, rep_mat=self.maConfiguration.rep_mat, @@ -289,7 +289,7 @@ class JDCEditorSsIhm : jaux.analyse() J=JdC_aux( procedure="", - appliEficas=self, + appliEficas=self.appliEficas, cata=self.readercata.cata, cata_ord_dico=self.readercata.cata_ordonne_dico, jdc_pere=jaux, diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py index 3f48ee04..ca49911a 100755 --- a/InterfaceQT4/eficas_go.py +++ b/InterfaceQT4/eficas_go.py @@ -38,8 +38,8 @@ if ihmQTDir not in sys.path : sys.path.append(ihmQTDir) if editeurDir not in sys.path : sys.path.append(editeurDir) -def lanceEficas(code=None, multi=False, langue='en'): -#--------------------------------------------------- +def lanceEficas(code=None, multi=False, langue='en', labelCode=None): +#------------------------------------------------------------------- """ Lance l'appli EFICAS avec Ihm """ @@ -56,14 +56,14 @@ def lanceEficas(code=None, multi=False, langue='en'): from InterfaceQT4.qtEficas import Appli app = QApplication(sys.argv) - Eficas=Appli(code=code,salome=0,multi=multi,langue=langue) + Eficas=Appli(code=code,salome=0,multi=multi,langue=langue,labelCode=labelCode) Eficas.show() res=app.exec_() sys.exit(res) -def getEficasSsIhm(code=None, multi=False, langue='en'): -#------------------------------------------------------ +def getEficasSsIhm(code=None, multi=False, langue='en', labelCode=None): +#------------------------------------------------------------------------ """ Lance l'appli EFICAS sans Ihm """ @@ -72,7 +72,7 @@ def getEficasSsIhm(code=None, multi=False, langue='en'): if options.code != None : code=options.code from InterfaceQT4.qtEficasSsIhm import AppliSsIhm - Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue) + Eficas=AppliSsIhm(code=code, salome=0, multi=multi, langue=langue, labelCode=labelCode) return Eficas diff --git a/InterfaceQT4/monWidgetBloc.py b/InterfaceQT4/monWidgetBloc.py index 6b970a96..1f656d4f 100644 --- a/InterfaceQT4/monWidgetBloc.py +++ b/InterfaceQT4/monWidgetBloc.py @@ -35,3 +35,5 @@ class MonWidgetBloc(Ui_WidgetBloc,Groupe): self.parentQt.commandesLayout.insertWidget(-1,self,1) + def afficheOptionnel(self): + return diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index f017edf0..7a235e72 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -115,7 +115,7 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.editor.ajoutOptionnel() self.editor.inhibeSplitter=0 self.monOptionnel=self.editor.widgetOptionnel - self.afficheOptionnel() + self.afficheOptionnel() #print "fin init de widget Commande" diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index a8cb9ac9..a6c69d7a 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -67,7 +67,7 @@ class ASSD(object): self.order = self.parent.icmd else: self.order = 0 - # attributs pour le Catalogue de Structure de Données Jeveux + # attributs pour le Catalogue de Structure de Données # "self.cata_sdj" est un attribut de classe self.ptr_class_sdj = None self.ptr_sdj = None diff --git a/Noyau/N_BLOC.py b/Noyau/N_BLOC.py index a8f657e1..d5f64107 100644 --- a/Noyau/N_BLOC.py +++ b/Noyau/N_BLOC.py @@ -35,6 +35,7 @@ from .N_Exception import AsException from .N_types import forceList + class BLOC(N_ENTITE.ENTITE): """ @@ -100,6 +101,7 @@ class BLOC(N_ENTITE.ENTITE): self.checkCondition() self.verifCataRegles() + def verifPresence(self, dict, globs): """ Cette méthode vérifie si le dictionnaire passé en argument (dict) @@ -118,8 +120,11 @@ class BLOC(N_ENTITE.ENTITE): dico.update(dict) if self.condition != None: try: + #if 1 : test = eval(self.condition, globs, dico) return test + #try: + # 1 except NameError: # erreur 'normale' : un mot-clé n'est pas présent et on veut # l'évaluer dans la condition @@ -166,4 +171,9 @@ def blocUtils(): """Valide si aucune des valeurs de 'mcsimp' n'est dans 'valeurs'.""" return not au_moins_un(mcsimp, valeurs) + def getEficasAttribut( nomUserASSD, nomAttr): + #print ('dans getEficasAttribut de Bloc') + if nomUserASSD == None : return None + return ( nomUserASSD.getEficasAttribut(nomAttr)) + return locals() diff --git a/Noyau/N_CONVERT.py b/Noyau/N_CONVERT.py index e2f456e5..b900ade1 100644 --- a/Noyau/N_CONVERT.py +++ b/Noyau/N_CONVERT.py @@ -108,8 +108,8 @@ class UserASSDConversion(TypeConversion): TypeConversion.__init__(self, classUser) def function(self, o): + #print ('je convertis : ', o, 'en ', self.typeACreer ) #import traceback - print ('je convertis : ', o, 'en ', self.typeACreer ) #traceback.print_stack() if o == None : return None nouvelObj=self.typeACreer(o) diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 9f74b90a..96f82cf7 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -89,7 +89,6 @@ NONE = None cata_ord_dico=None, parent=None, nom='SansNom', appliEficas=None, context_ini=None, **args): self.procedure = procedure - print (self.procedure) self.definition = definition self.cata = cata # PN pourquoi ? @@ -236,8 +235,6 @@ Causes possibles : exec(self.proc_compile, self.g_context) CONTEXT.unsetCurrentStep() - if self.appliEficas != None: - self.appliEficas.afficheInfos('') #try : # print ('PNPN') @@ -453,25 +450,24 @@ 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.appliEficas: + #if self.appliEficas: # Si le JDC est relie a une appliEficascation maitre, on delègue la # recherche - return self.appliEficas.getFile(unite, fic_origine) - else: - if unite != None: - if os.path.exists("fort." + str(unite)): - fname = "fort." + str(unite) - if fname == None: - raise AsException("Impossible de trouver le fichier correspondant" - " a l unite %s" % unite) - if not os.path.exists(fname): - raise AsException("%s n'est pas un fichier existant" % fname) - fproc = open(fname, 'r') - text = fproc.read() - fproc.close() - text = text.replace('\r\n', '\n') - linecache.cache[fname] = 0, 0, text.split('\n'), fname - return fname, text + # return self.appliEficas.getFile(unite, fic_origine) + #else: + # if unite != None: + # if os.path.exists("fort." + str(unite)): + # fname = "fort." + str(unite) + if fname == None: + raise AsException("Impossible de trouver le fichier correspondant") + if not os.path.exists(fname): + raise AsException(fname + " n'est pas un fichier existant" ) + fproc = open(fname, 'r') + text = fproc.read() + fproc.close() + text = text.replace('\r\n', '\n') + linecache.cache[fname] = 0, 0, text.split('\n'), fname + return fname, text def set_parLot(self, parLot, user_value=False): """ diff --git a/Noyau/N_MACRO.py b/Noyau/N_MACRO.py index a80f98e4..e7069e03 100644 --- a/Noyau/N_MACRO.py +++ b/Noyau/N_MACRO.py @@ -87,7 +87,7 @@ class MACRO(N_ENTITE.ENTITE): nommage = nommage def __init__( - self, nom, op, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None, + self, nom, op=None, sd_prod=None, reentrant='n', repetable='o', fr="",ang="",fenetreIhm=None, docu="", regles=(), op_init=None, niveau = None, fichier_ini=0, UIinfo=None, **args): """ Méthode d'initialisation de l'objet MACRO. Les arguments sont utilisés pour initialiser diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index 7d08838b..52e96325 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -54,8 +54,8 @@ 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, ------------------------") + #print (self, val, definition, nom, parent) self.definition = definition self.nom = nom self.val = val @@ -104,6 +104,7 @@ class MCSIMP(N_OBJECT.OBJECT): for leNom,laVariable in self.jdc.g_context.items(): if id(laVariable)== id(val) and (leNom != 'sansNom'): val.initialiseNom(leNom) + if val.parent== None : val.initialiseParent(self) return val if self.convProto: val = self.convProto.convert(val) @@ -118,11 +119,12 @@ class MCSIMP(N_OBJECT.OBJECT): if self.convProto: objVal = self.convProto.convert(nomVal) objVal.initialiseNom(nomVal) + if objVal.parent== None : objVal.initialiseParent(self) p=self.parent while p in self.parent : print ('mise a jour de ',p) - if has_attr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(self.objVal) - else : p.listeDesReferencesCrees=(self.objVal,) + if hasattr(p, 'listeDesReferencesCrees') : p.listeDesReferencesCrees.append(objVal) + else : p.listeDesReferencesCrees=(objVal,) p=p.parent return (self.setValeur(objVal), 'reference cree') @@ -234,3 +236,7 @@ class MCSIMP(N_OBJECT.OBJECT): """ return [co for co in forceList(self.valeur) if isinstance(co, CO) and co.isTypCO()] + + def supprime(self): + if hasattr(self, 'val') and hasattr(self.val, 'supprime') :self.val.supprime() + N_OBJECT.OBJECT.supprime(self) diff --git a/Noyau/N_UserASSD.py b/Noyau/N_UserASSD.py index 3a11b938..b9d25d7e 100644 --- a/Noyau/N_UserASSD.py +++ b/Noyau/N_UserASSD.py @@ -36,30 +36,36 @@ class UserASSD(ASSD): Classe de base pour definir des types de structures de donnees definie par l utilisateur equivalent d un concept ASSD pour un SIMP ou un FACT - Attention : le parent est le JDC et non le MC createur que l on ne connait pas + Attention : le parent est a None au debut et non le MC createur que l on ne connait pas Lorsqu on ecrit le jdc, n ecrit nom=UserASSD() + le parent est le SIMP qui cree l objet a la lecture si la classe commence par un majuscule on fait le boulot dans MCSIMP, sinon dans l init de parametre car le parsing considere qu on a un parametre """ def __init__(self,nom='sansNom'): - self.nom = nom - self.jdc = CONTEXT.getCurrentJdC() - self.parent = self.jdc + self.nom = nom + self.jdc = CONTEXT.getCurrentJdC() + self.parent = None self.initialiseValeur() self.utilisePar = set() - if self.nom != 'sansNom' : self.id = self.parent.regSD(self) + if self.nom != 'sansNom' : self.id = self.jdc.regSD(self) else : self.id = None + self.ptr_sdj = None + def initialiseParent(self, parent): + #print ('je passe initialiseParent pour : ', self, parent) + self.parent= parent + def initialiseNom(self,nom): - print ('je passe initialiseNom pour : ', self, nom) - for (i,j) in self.parent.sdsDict.items() : + #print ('je passe initialiseNom pour : ', self, nom) + for (i,j) in self.jdc.sdsDict.items() : if j == self : - del(self.parent.sdsDict[i]) - self.parent.sdsDict[nom]=self + del(self.jdc.sdsDict[i]) + self.jdc.sdsDict[nom]=self self.nom=nom - if self.nom != 'sansNom' and self.id ==None : self.id = self.parent.regSD(self) + if self.nom != 'sansNom' and self.id ==None : self.id = self.jdc.regSD(self) def initialiseValeur(self,valeur=None): self.valeur=valeur @@ -71,15 +77,35 @@ class UserASSD(ASSD): try : self.utilisePar.remove(mc) except : pass - def renomme(self,nouveauNom): - self.parent.delConcept(self.nom) - self.parent.sdsDict[nouveauNom] = self + self.jdc.delConcept(self.nom) + self.jdc.sdsDict[nouveauNom] = self self.setName(nouveauNom) + #print ('je suis dans renomme',nouveauNom, self.nom) + #print (self.utilisePar) + for mc in (self.utilisePar): + mc.demandeRedessine() + def deleteReference(self): print ('je suis dans deleteReference') for MC in self.utilisePar : MC.valeur=None - self.parent.delConcept(self.nom) + self.jdc.delConcept(self.nom) + def getEficasAttribut(self, attribut): + #print ('je suis dans getEficasAttr', attribut) + if self.parent == None : return None + #print ('apres if') + try : + valeur = self.parent.parent.getMocle(attribut) + except : + valeur = None + #print (valeur) + return valeur + + + def supprime(self): + self.deleteReference() + ASSD.supprime(self) + diff --git a/Noyau/N_VALIDATOR.py b/Noyau/N_VALIDATOR.py index 3a946cac..5610bb1f 100644 --- a/Noyau/N_VALIDATOR.py +++ b/Noyau/N_VALIDATOR.py @@ -62,7 +62,7 @@ class Protocol(object): self.args = {} def register(self, T, A): - print (T,A) + print ('register Protocol',T,A) self.registry[T] = A def adapt(self, obj): diff --git a/UiQT5/desWidgetFact.ui b/UiQT5/desWidgetFact.ui index c7f86cb3..d57b619e 100644 --- a/UiQT5/desWidgetFact.ui +++ b/UiQT5/desWidgetFact.ui @@ -433,7 +433,8 @@ ... - + + ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png diff --git a/convert/convert_dico.py b/convert/convert_dico.py index 52a8d37e..0e8e7675 100644 --- a/convert/convert_dico.py +++ b/convert/convert_dico.py @@ -88,7 +88,7 @@ class Dicoparser(Pythonparser): if isinstance(valeurs[mot],dict) : self.traiteMCFact(mot,valeurs[mot]) else : self.textePy += mot+' = ' +str(valeurs[mot])+',' self.textePy+=');\n' # fin de la commande - print (self.textePy) + #print (self.textePy) return self.textePy def traiteMCFact(self,mot,valeurs):