]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
CCAR: introduction de methodes complementaires pour les validateurs
authoreficas <>
Mon, 6 Oct 2003 08:18:43 +0000 (08:18 +0000)
committereficas <>
Mon, 6 Oct 2003 08:18:43 +0000 (08:18 +0000)
dans Ihm/I_VALIDATOR.py et leur appel depuis composimp.py

Accas/__init__.py
Editeur/composimp.py
Editeur/widgets.py
Ihm/I_JDC.py
Ihm/I_MCSIMP.py
Noyau/N_BLOC.py
Validation/V_MCSIMP.py

index c59ec20ca30764ed0fbeb82a493252d9c81d2c81..1d96b19b4c53843b54ca66b9cd6666309dd4110b 100644 (file)
@@ -70,7 +70,17 @@ from Noyau.N__F import _F
 from Noyau.N_Exception import AsException
 from Noyau.N_utils import AsType
 
-from Noyau.N_VALIDATOR import Valid,RangeVal,OrdList,NoRepeat,LongStr,EnumVal,CardVal,TypeVal,InstanceVal,OrVal,AndVal
+#from Noyau.N_VALIDATOR import Valid,RangeVal,OrdList,NoRepeat,LongStr,EnumVal,CardVal,TypeVal,InstanceVal,OrVal,AndVal
+from A_VALIDATOR import OrdList,NoRepeat,LongStr,OrVal,AndVal
+from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal
+from A_VALIDATOR import CardVal, InstanceVal
+
+# On remplace la factory des validateurs initialement dans Noyau par celle
+# de A_VALIDATOR
+import A_VALIDATOR
+import Noyau.N_ENTITE
+Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory
+
 
 from Extensions.niveau import NIVEAU
 from Extensions.etape_niveau import ETAPE_NIVEAU
index 45f404c1390afdc4bc25fea11ffa53e3121342d6..6fb84f369832fe5d978231df85ac48fbb3a0eb6c 100644 (file)
@@ -1307,6 +1307,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       Cette méthode attribue le panel à l'objet pointé par self en fonction de la
       nature de la valeur demandée pour cet objet
       """
+      print "affect_panel : ",self.nom,self.is_list(),self.has_into(), self.get_into(None)
       if self.wait_shell():
           # l'objet attend un shell
           self.panel = SHELLPanel
@@ -1375,6 +1376,79 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
     text= self.object.GetText()
     return text
 
+  def has_into(self):
+      """
+          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          ou s'il n'en propose pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          de la definition du mot cle.
+          Dans le cas avec validateur, il faut combiner l'information précédente avec
+          celle issue de l'appel de la méthode has_into sur le validateur. On utilisera
+          l'operateur ET pour effectuer cette combinaison (AndVal).
+      """
+      if not self.object.definition.validators:
+           if self.definition.into:
+               return 1
+           else:
+               return 0
+      else:
+           # Dans le cas avec validateurs, pour que le mot cle soit considéré
+           # comme proposant un choix, il faut que into soit présent OU
+           # que la méthode has_into du validateur retourne 1. Dans les autres cas
+           # on retournera 0 (ne propose pas de choix)
+           if self.definition.into:
+                return 1
+           elif self.object.definition.validators.has_into():
+                return 1
+           else:
+                return 0
+
+  def get_into(self,liste_courante=None):
+      """
+          Cette méthode retourne la liste de choix proposée par le mot cle. Si le mot cle ne propose
+          pas de liste de choix, la méthode retourne None.
+          L'argument d'entrée liste_courante, s'il est différent de None, donne la liste des choix déjà
+          effectués par l'utilisateur. Dans ce cas, la méthode get_into doit calculer la liste des choix
+          en en tenant compte.
+          Cette méthode part du principe que la relation entre into du mot clé et les validateurs est
+          une relation de type ET (AndVal).
+      """
+      if not self.object.definition.validators :
+         return self.object.definition.into
+      else:
+         return self.object.definition.validators.get_into(liste_courante,self.definition.into)
+         
+  def is_list(self):
+      """
+          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          ou s'il n'en attend pas (valeur de retour 0)
+
+          Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
+          Dans le cas sans validateur, l'information est donnée par l'attribut max 
+          de la definition du mot cle.
+          Dans le cas avec validateur, il faut combiner l'information précédente avec
+          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+          l'operateur ET pour effectuer cette combinaison (AndVal).
+      """
+      if not self.object.definition.validators:
+           if self.definition.max <= 1:
+               return 0
+           else: 
+               return 1
+      else:
+           # Dans le cas avec validateurs, pour que le mot cle soit considéré 
+           # comme acceptant une liste, il faut que max soit supérieur a 1
+           # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+           # on retournera 0 (n'attend pas de liste)
+           if self.definition.max <= 1:
+                return 0
+           elif not self.object.definition.validators.is_list():
+                return 0
+           else:
+                return 1
+
   def wait_co(self):
       """
       Méthode booléenne qui retourne 1 si l'objet pointé par self
index 1d648f27f6cdc1731ea54d5b82eafa150227b626..e33547a1230bd3d2440028a8d7c0dddd8e763260 100644 (file)
@@ -35,6 +35,7 @@ from utils import save_in_file
 from centerwindow import centerwindow
 
 from Noyau.N_utils import repr_float
+from Accas import AsException
     
 class Fenetre :
     """ Cette classe permet de créer une fenêtre Toplevel dans laquelle
@@ -641,7 +642,11 @@ class ListeChoix :
 
     def chooseitem(self,mot,label,commande):
         """ Active la méthode de choix passée en argument"""
-        commande(mot)
+        try:
+           commande(mot)
+        except AsException,e:
+           raison=str(e)
+           showerror(raison.split('\n')[0],raison)
         
     def selectitem(self,mot,label,commande) :
         """ Met l'item sélectionné (représenté par son label) en surbrillance
index 62d82bdf79a5f2af4ca9f12ef7fe1f6f79916a64..8768ec591bc1bcc546326ff5a751c05e9bec0ea7 100644 (file)
@@ -171,6 +171,10 @@ class JDC(I_OBJECT.OBJECT):
           self.reset_context()
           self.active_etapes()
           return e
+        except AsException,e:
+          self.reset_current_step()
+          self.editmode=0
+          raise AsException("Impossible d ajouter la commande "+name + '\n' +str(e))
         except:
           traceback.print_exc()
           self.reset_current_step()
index d190284e29791a253fdbb3645896951f54c770de..7baeb14264376fe08c06b4b837c535d7bcc1bf3b 100644 (file)
@@ -114,9 +114,6 @@ class MCSIMP(I_OBJECT.OBJECT):
       s=s+' )'
       return s
 
-  def get_min_max(self):
-    return self.definition.min,self.definition.max
-
   def wait_co(self):
     """
         Méthode booléenne qui retourne 1 si l'objet attend un objet ASSD 
index 4a3beac1a619e7b828606e0731f899f884361913..0f8a2b602053162813cd2a250f80897064b47666 100644 (file)
@@ -132,12 +132,6 @@ class BLOC(N_ENTITE.ENTITE):
           l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
           raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
                      '\n',"Erreur dans la condition : ", self.condition,string.join(l))
-        except TypeError:
-          # erreur 'normale' : un mot-clé est en fait un morceau de mot clef : TYPE_CHAM[0:2] par exemple 
-          if CONTEXT.debug:
-             l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
-             print "WARNING : Erreur a l'evaluation de la condition "+string.join(l)
-          return 0
         except:
           l=traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2])
           raise AsException("Catalogue entite : ", self.nom,", de pere : ", self.pere.nom,
index d3bf23b77b679541811b78a19f42f4941886ea5c..04f8e9e275ea4938546996154de22fe86830d783 100644 (file)
@@ -84,7 +84,11 @@ class MCSIMP:
           if cr == 'oui' :
             self.cr.fatal(string.join(("Mot-clé : ",self.nom," obligatoire non valorisé")))
           valid = 0
-        if v != None :
+        if v is None:
+          valid=0
+          if cr == 'oui' :
+             self.cr.fatal("None n'est pas une valeur autorisée")
+        else:
           # type,into ...
           valid = self.verif_type(val=v,cr=cr)*self.verif_into(cr=cr)*self.verif_card(cr=cr)
           #