]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
1ere version correcte des UserADDS
authorpascale.noyret <pascale.noyret@edf.fr>
Thu, 30 Jan 2020 15:38:07 +0000 (16:38 +0100)
committerpascale.noyret <pascale.noyret@edf.fr>
Thu, 30 Jan 2020 15:38:07 +0000 (16:38 +0100)
22 files changed:
Ihm/I_ETAPE.py
Ihm/I_JDC.py
Ihm/I_MACRO_ETAPE.py
Ihm/I_MCSIMP.py
Ihm/I_OBJECT.py
InterfaceQT4/browser.py
InterfaceQT4/composimp.py
InterfaceQT4/editor.py
InterfaceQT4/editorSsIhm.py
InterfaceQT4/eficas_go.py
InterfaceQT4/monWidgetBloc.py
InterfaceQT4/monWidgetCommande.py
Noyau/N_ASSD.py
Noyau/N_BLOC.py
Noyau/N_CONVERT.py
Noyau/N_JDC.py
Noyau/N_MACRO.py
Noyau/N_MCSIMP.py
Noyau/N_UserASSD.py
Noyau/N_VALIDATOR.py
UiQT5/desWidgetFact.ui
convert/convert_dico.py

index 23d66f8b44b6f6070a4ed676681d27d1dac8d695..f0754dd8bd4e264c7e318cbfa55db80490faf06d 100644 (file)
@@ -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
 
index 71e3cb70f0ecaf853e2604eaca028fbe2f1fd0fd..9010f0473b9356901d79d427b328e61b62390ec8 100644 (file)
@@ -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()
index 7cea87cfb99bc66e27c2baf540988e0c6b3b972d..20a0927a2020f444c195ba194a3cd7663ef2439e 100644 (file)
@@ -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)
index 749ac5fe2f6bec141ba3435bcf05f6274b3366d9..0f7943f0108530b3c35a4b2ba5c9872071ab0e4f 100644 (file)
@@ -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()
index 7d1dde898ff1dda0fc946e845585e920e5f30f85..56b08c19d914cac556558e5584d8b9e8a677618b 100644 (file)
@@ -183,6 +183,8 @@ class OBJECT:
   # doit etre surcharge dans MC_COMPO et MC_SIMP 
       pass
 
+  def demandeRedessine(self):
+      CONNECTOR.Emit(self,"redessine")
 
 
 
index 0b4c134dcb33c646f1fdd3322cbbd7cd60c08e5d..8cb3810ba2050431f57c0e53b6390de56893172c 100644 (file)
@@ -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):
     #-----------------------
index e5b5c46927cb5406a1f609c9a507b3890d936270..3428cf4b53ccd93c5093acf8ea5f348fe3a1f87b 100644 (file)
@@ -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 :
index f6a84342b2be6af27d4084a6203088a27fe2fe2e..d549b36d45d6d0af0cdd27231364d38de500e304 100755 (executable)
@@ -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)
index 2a0c12ed309835539d3bc9c1b5d017a739e28062..ce7b08ef437a16b6a008be8a0669e447df952559 100755 (executable)
@@ -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,
index 3f48ee04c1b63cfc33eb76efc77f1f240b217069..ca49911a986d832362e7da04a34162d9bf8f3509 100755 (executable)
@@ -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
 
 
index 6b970a967e8cf1836b37c40faf29f1046d53e2eb..1f656d4f2381b5f4ba1e7b3456c9f3de159d61cb 100644 (file)
@@ -35,3 +35,5 @@ class MonWidgetBloc(Ui_WidgetBloc,Groupe):
       self.parentQt.commandesLayout.insertWidget(-1,self,1)
 
 
+  def afficheOptionnel(self):
+      return
index f017edf09396dee7a1b6b8b84118dbdaa3e25eb7..7a235e72199e61a111bda31d56055be40d1fac80 100644 (file)
@@ -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"
       
index a8cb9ac9c93dba96ff7812ea68aa3a80a6856f7d..a6c69d7a3f8b34c034aeeedc148904c0009ad714 100644 (file)
@@ -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
index a8f657e18dabe42f0e5e9ebfdd71306ca516b965..d5f64107cc2d4949c1a4b38290cfdde6b9bb8e11 100644 (file)
@@ -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()
index e2f456e52a6f33a81a18030a24b6b879c5700690..b900ade1a5bbe45016abaef4bcce1543901ade36 100644 (file)
@@ -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)
index 9f74b90a97dc2e87299846af4ac02a6e977f145f..96f82cf7d18fc8ee4088b8044f4fb8e86f00b12f 100644 (file)
@@ -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):
         """
index a80f98e489cd3d144b48db3b912e11503dd72f8c..e7069e03e3c805983e03a3606b439adcf4d08dce 100644 (file)
@@ -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
index 7d08838be357a68449e809002ff60d8630b95359..52e963255a3a6c437b8bf4cd9c3ba781232eb25f 100644 (file)
@@ -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)
index 3a11b9384e956cfad8719d4aa837fd5f75ca8f42..b9d25d7e0f0ef2b6454bd4c331eacb8d54f5b621 100644 (file)
@@ -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)
+        
index 3a946cac5042a8f7b55a93f0b4aaa8573c78cd01..5610bb1ff87a071a94220aaf8dc4a902c6369643 100644 (file)
@@ -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):
index c7f86cb3ed5dac856697173a90e92361a39d2d95..d57b619e80ccc5c6084b30c21b009c05fcd935c7 100644 (file)
           <string>...</string>
          </property>
          <property name="icon">
-          <iconset theme="add"/>
+          <iconset>
+           <normaloff>../Editeur/icons/PlusBleu.png</normaloff>../Editeur/icons/PlusBleu.png</iconset>
          </property>
          <property name="iconSize">
           <size>
index 52a8d37e4c03349a06db6ef767fcb40d9424c09d..0e8e7675a8bcf51e9543aa3b0b93006aa9788e27 100644 (file)
@@ -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):