Salome HOME
CCAR: rabattre la version V1_15a4 dans la branche principale
[tools/eficas.git] / Ihm / I_JDC.py
index 9607736f0606fbd5e4f0a7a4fd3331957158a813..2b39f2a444d2250267ef4b40e1bb74e975e06bf6 100644 (file)
@@ -33,6 +33,10 @@ from Noyau.N_ETAPE import ETAPE
 from Noyau.N_Exception import AsException
 from Extensions import commentaire,parametre,parametre_eval
 import CONNECTOR
+import Validation
+
+class LASSD:
+   pass
 
 class JDC(I_OBJECT.OBJECT):
    """
@@ -60,7 +64,7 @@ class JDC(I_OBJECT.OBJECT):
       d=self.get_contexte_avant(etape)
       l=[]
       for k,v in d.items():
-        if type(v) != types.InstanceType : continue
+        if type(v) != types.InstanceType and not isinstance(v,object): continue
         # On considère que seul assd indique un type quelconque pas CO
         elif self.assd in types_permis :
            l.append(k)
@@ -72,8 +76,8 @@ class JDC(I_OBJECT.OBJECT):
    def get_sd_avant_du_bon_type_pour_type_de_base(self,etape,type):
       """
           Retourne la liste des concepts avant etape d'1 type de base acceptable
-         Attention different de la routine précédente : 1 seul type passé en parametre
-         Teste sur issubclass et par sur le type permis
+          Attention different de la routine précédente : 1 seul type passé en parametre
+          Teste sur issubclass et par sur le type permis
       """
       d=self.get_contexte_avant(etape)
       l=[]
@@ -91,11 +95,11 @@ class JDC(I_OBJECT.OBJECT):
        d=self.get_contexte_avant(etape)
        for k,v in d.items():
           if issubclass(v.__class__,LASSD):
-            if k == valeur :
-               return k
-       # Attention pour enlever les . a la fin des pretendus reels
-            if k == valeur[0:-1] :
-               return v
+             if k == valeur :
+                return k
+        # Attention pour enlever les . a la fin des pretendus reels
+             if k == valeur[0:-1] :
+                return v
        return None
 
    def est_permis(self,v,types_permis):
@@ -110,7 +114,7 @@ class JDC(I_OBJECT.OBJECT):
              return 1
           elif type_ok == 'TXM' and v.__class__.__name__ == 'chaine' : 
              return 1
-          elif type(type_ok) != types.ClassType : 
+          elif type(type_ok) != types.ClassType and not isinstance(type_ok,type)
              continue
           elif v.__class__ == type_ok or issubclass(v.__class__,type_ok):
              return 1
@@ -136,6 +140,7 @@ class JDC(I_OBJECT.OBJECT):
         objet.nom = "_comm_"+`ind`
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
+        self.reset_context()
         self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
@@ -148,8 +153,8 @@ class JDC(I_OBJECT.OBJECT):
         objet = parametre.PARAMETRE(nom=nom_param)
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
-        self.editmode=0
         self.reset_context()
+        self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
@@ -161,8 +166,8 @@ class JDC(I_OBJECT.OBJECT):
         objet = parametre_eval.PARAMETRE_EVAL(nom=nom_param)
         if pos == None : pos = 0
         self.etapes.insert(pos,objet)
-        self.editmode=0
         self.reset_context()
+        self.editmode=0
         self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
@@ -185,13 +190,13 @@ class JDC(I_OBJECT.OBJECT):
             objet.parent.dict_niveaux[objet.nom_niveau_definition].register(objet)
             objet.niveau = objet.parent.dict_niveaux[objet.nom_niveau_definition]
         self.etapes.insert(pos,objet)
-       # il faut vérifier que les concepts utilisés par objet existent bien
-       # à ce niveau d'arborescence
-       objet.verif_existence_sd()
+        self.reset_context()
+        # il faut vérifier que les concepts utilisés par objet existent bien
+        # à ce niveau d'arborescence
+        objet.verif_existence_sd()
         objet.update_mc_global()
-        self.active_etapes()
         self.editmode=0
-        self.reset_context()
+        self.active_etapes()
         CONNECTOR.Emit(self,"add",objet)
         self.fin_modif()
         return objet
@@ -207,8 +212,8 @@ class JDC(I_OBJECT.OBJECT):
           if pos == None : pos = 0
           self.etapes.insert(pos,e)
           self.reset_current_step()
-          self.editmode=0
           self.reset_context()
+          self.editmode=0
           self.active_etapes()
           CONNECTOR.Emit(self,"add",e)
           self.fin_modif()
@@ -524,9 +529,9 @@ class JDC(I_OBJECT.OBJECT):
      l_mc = []
      for etape in self.etapes :
          if etape.isactif() :
-           if not etape.isvalid() :
-              l = etape.get_liste_mc_inconnus()
-              if l : l_mc.extend(l)
+            if not etape.isvalid() :
+               l = etape.get_liste_mc_inconnus()
+               if l : l_mc.extend(l)
      return l_mc    
 
    def get_genealogie(self):
@@ -564,6 +569,11 @@ class JDC(I_OBJECT.OBJECT):
       #print "reset_context",self,self.nom
       self.current_context={}
       self.index_etape_courante=0
+      ind={}
+      for i,etape in enumerate(self.etapes):
+        ind[etape]=i
+      self.index_etapes=ind
+
    #   for etape in self.etapes:
    #       etape.reset_context()
 
@@ -693,6 +703,41 @@ class JDC(I_OBJECT.OBJECT):
    def changefichier(self,fichier):
        self.fin_modif()
 
+   def eval_in_context(self,valeur,etape):
+      """ Tente d'evaluer valeur dans le contexte courant de etape
+          Retourne le parametre valeur inchange si l'evaluation est impossible
+      """
+      #contexte initial du jdc
+      context=self.condition_context.copy()
+      #contexte courant des concepts. Il contient les parametres
+      context.update(self.get_contexte_avant(etape))
+      try :
+         objet = eval(valeur,context)
+         return objet
+      except:
+         #traceback.print_exc()
+         pass
+      return valeur
+
+#ATTENTION SURCHARGE : cette methode doit etre gardée en synchronisation avec celle de Noyau
+   def supprime(self):
+      #print "supprime",self
+      Noyau.N_JDC.JDC.supprime(self)
+      self.appli=None
+      self.g_context={}
+      self.const_context={}
+      self.sds=[]
+      self.sds_dict={}
+      self.mc_globaux={}
+      self.current_context={}
+      self.condition_context={}
+      self.etapes_niveaux=[]
+      self.niveau=None
+      self.params=[]
+      self.fonctions=[]
+      self._etape_context=None
+      self.etapes=[]
+       
 #ATTENTION SURCHARGE : cette methode doit etre gardée en synchronisation avec celle de Noyau
    def register(self,etape):
       """
@@ -713,6 +758,7 @@ class JDC(I_OBJECT.OBJECT):
       """
       if not self.editmode:
          self.etapes.append(etape)
+         self.index_etapes[etape] = len(self.etapes) - 1
       else:
          pass
       return self.g_register(etape)
@@ -793,3 +839,10 @@ class JDC(I_OBJECT.OBJECT):
          linecache.cache[file]=0,0,string.split(text,'\n'),file
       return file,text
 
+   def isvalid(self,cr='non'):
+     if hasattr(self,'valid'): old_valid=self.valid
+     else:old_valid=0
+     valid=Validation.V_JDC.JDC.isvalid(self,cr)
+     if valid != old_valid:
+       CONNECTOR.Emit(self,"valid")
+     return valid