X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Ihm%2FI_MCSIMP.py;h=c2d771fc7ee08671bf87b509b87cc50619e446d3;hb=c3b19c097b238b972a67f1b5cbced6a670adccdf;hp=61ce69d2bae66ac26b460e489c141de07965b2d8;hpb=2dea30e48cdfed1d2d788518bf54bbc2341fba73;p=tools%2Feficas.git diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 61ce69d2..c2d771fc 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -40,10 +40,13 @@ from Noyau.N_utils import repr_float from Noyau.N_ASSD import ASSD,assd from Noyau.N_GEOM import GEOM,geom from Noyau.N_CO import CO +import Accas # fin attention from Extensions import parametre +from Extensions import param2 import I_OBJECT +import CONNECTOR class MCSIMP(I_OBJECT.OBJECT): @@ -215,10 +218,67 @@ class MCSIMP(I_OBJECT.OBJECT): def isoblig(self): return self.definition.statut=='o' + def valid_valeur(self,new_valeur): + """ + Verifie que la valeur passee en argument (new_valeur) est valide + sans modifier la valeur courante (evite d'utiliser set_valeur et est plus performant) + """ + old_valeur=self.valeur + old_val=self.val + self.valeur = new_valeur + self.val = new_valeur + self.state="modified" + validite=self.isvalid() + self.valeur = old_valeur + self.val = old_valeur + self.state="modified" + self.isvalid() + return validite + + def valid_valeur_partielle(self,new_valeur): + """ + Verifie que la valeur passee en argument (new_valeur) est partiellement valide + sans modifier la valeur courante (evite d'utiliser set_valeur et est plus performant) + """ + old_valeur=self.valeur + old_val=self.val + + self.valeur = new_valeur + self.val = new_valeur + self.state="modified" + validite=0 + if self.isvalid(): + validite=1 + elif self.definition.validators : + validite=self.definition.validators.valide_liste_partielle(new_valeur) + + if validite==0: + min,max=self.get_min_max() + if len(new_valeur) < min : + validite=1 + + self.valeur = old_valeur + self.val = old_valeur + self.state="modified" + self.isvalid() + return validite + + def update_condition_bloc(self): + """ Met a jour les blocs conditionnels dependant du mot cle simple self + """ + if self.definition.position == 'global' : + self.etape.deep_update_condition_bloc() + elif self.definition.position == 'global_jdc' : + self.jdc.deep_update_condition_bloc() + else: + self.parent.update_condition_bloc() + def set_valeur(self,new_valeur,evaluation='oui'): + #print "set_valeur",new_valeur self.init_modif() self.valeur = new_valeur self.val = new_valeur + self.update_condition_bloc() self.fin_modif() return 1 @@ -227,14 +287,18 @@ class MCSIMP(I_OBJECT.OBJECT): Essaie d'évaluer new_valeur comme une SD, une déclaration Python ou un EVAL: Retourne la valeur évaluée (ou None) et le test de réussite (1 ou 0) """ - sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None) + sd = self.jdc.get_sd_avant_etape(new_valeur,self.etape) + #sd = self.jdc.get_contexte_avant(self.etape).get(new_valeur,None) + #print sd if sd : return sd,1 + lsd = self.jdc.cherche_list_avant(self.etape,new_valeur) + if lsd : + return lsd,1 else: d={} # On veut EVAL avec tous ses comportements. On utilise Accas. Perfs ?? - from Accas import EVAL - d['EVAL']=EVAL + d['EVAL']=Accas.EVAL try : objet = eval(new_valeur,d) return objet,1 @@ -242,6 +306,10 @@ class MCSIMP(I_OBJECT.OBJECT): itparam=self.cherche_item_parametre(new_valeur) if itparam: return itparam,1 + try : + object=eval(new_valeur.valeur,d) + except : + pass if CONTEXT.debug : traceback.print_exc() return None,0 @@ -258,6 +326,11 @@ class MCSIMP(I_OBJECT.OBJECT): except: return None + def update_concept(self,sd): + if type(self.valeur) in (types.ListType,types.TupleType) : + if sd in self.valeur:self.fin_modif() + else: + if sd == self.valeur:self.fin_modif() def delete_concept(self,sd): """ @@ -267,20 +340,24 @@ class MCSIMP(I_OBJECT.OBJECT): Met a jour la valeur du mot cle simple suite à la disparition du concept sd """ + #print "delete_concept",sd if type(self.valeur) == types.TupleType : if sd in self.valeur: + self.init_modif() self.valeur=list(self.valeur) self.valeur.remove(sd) - self.init_modif() + self.fin_modif() elif type(self.valeur) == types.ListType: if sd in self.valeur: - self.valeur.remove(sd) self.init_modif() + self.valeur.remove(sd) + self.fin_modif() else: if self.valeur == sd: + self.init_modif() self.valeur=None self.val=None - self.init_modif() + self.fin_modif() def replace_concept(self,old_sd,sd): """ @@ -291,34 +368,36 @@ class MCSIMP(I_OBJECT.OBJECT): Met a jour la valeur du mot cle simple suite au remplacement du concept old_sd """ + #print "replace_concept",old_sd,sd if type(self.valeur) == types.TupleType : if old_sd in self.valeur: + self.init_modif() self.valeur=list(self.valeur) i=self.valeur.index(old_sd) self.valeur[i]=sd - self.init_modif() + self.fin_modif() elif type(self.valeur) == types.ListType: if old_sd in self.valeur: + self.init_modif() i=self.valeur.index(old_sd) self.valeur[i]=sd - self.init_modif() + self.fin_modif() else: if self.valeur == old_sd: + self.init_modif() self.valeur=sd self.val=sd - self.init_modif() + self.fin_modif() def set_valeur_co(self,nom_co): """ Affecte à self l'objet de type CO et de nom nom_co """ + #print "set_valeur_co",nom_co step=self.etape.parent if nom_co == None or nom_co == '': new_objet=None else: - # Pour le moment on importe en local le CO de Accas. - # Si problème de perfs, il faudra faire autrement - from Accas import CO # Avant de créer un concept il faut s'assurer du contexte : step # courant sd= step.get_sd_autour_etape(nom_co,self.etape,avec='oui') @@ -335,7 +414,7 @@ class MCSIMP(I_OBJECT.OBJECT): CONTEXT.unset_current_step() CONTEXT.set_current_step(step) step.set_etape_context(self.etape) - new_objet = CO(nom_co) + new_objet = Accas.CO(nom_co) CONTEXT.unset_current_step() CONTEXT.set_current_step(cs) self.init_modif() @@ -346,6 +425,7 @@ class MCSIMP(I_OBJECT.OBJECT): # On force l'enregistrement de new_objet en tant que concept produit # de la macro en appelant get_type_produit avec force=1 self.etape.get_type_produit(force=1) + #print "set_valeur_co",new_objet return 1,"Concept créé" def verif_existence_sd(self): @@ -353,9 +433,12 @@ class MCSIMP(I_OBJECT.OBJECT): Vérifie que les structures de données utilisées dans self existent bien dans le contexte avant étape, sinon enlève la référence à ces concepts """ + #print "verif_existence_sd" + # Attention : possible probleme avec include l_sd_avant_etape = self.jdc.get_contexte_avant(self.etape).values() if type(self.valeur) in (types.TupleType,types.ListType) : l=[] + self.init_modif() for sd in self.valeur: if isinstance(sd,ASSD) : if sd in l_sd_avant_etape : @@ -363,15 +446,12 @@ class MCSIMP(I_OBJECT.OBJECT): else: l.append(sd) self.valeur=tuple(l) - # Est ce init_modif ou init_modif_up - # Normalement init_modif va avec fin_modif - self.init_modif() self.fin_modif() else: if isinstance(self.valeur,ASSD) : if self.valeur not in l_sd_avant_etape : - self.valeur = None self.init_modif() + self.valeur = None self.fin_modif() def get_min_max(self): @@ -387,46 +467,38 @@ class MCSIMP(I_OBJECT.OBJECT): """ return self.definition.type -#-------------------------------------------------------------------------------- -# PN : ajout pour Salome des methodes suivantes (jusqu aux méthodes surchargees) -#-------------------------------------------------------------------------------- - def get_salome_valeurs(self): - l=[] - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - if self.list_salome_valeurs != [] : - for val in self.list_salome_valeurs: - l.append(val) - return l - - def put_salome_valeurs(self,list): - self.list_salome_valeurs=[] - for val in list: - self.list_salome_valeurs.append(val) - - def add_salome_valeurs(self,val): - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - try: - self.list_salome_valeurs.append(val) - except : - try: - for uneval in val : - self.list_salome_valeurs.append(uneval) - except : - pass - - def has_salome_valeurs(self): - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - if self.list_salome_valeurs != []: - return true - else: - return false + def delete_mc_global(self): + """ Retire self des declarations globales + """ + if self.definition.position == 'global' : + etape = self.get_etape() + if etape : + del etape.mc_globaux[self.nom] + elif self.definition.position == 'global_jdc' : + del self.jdc.mc_globaux[self.nom] + + def update_mc_global(self): + """ + Met a jour les mots cles globaux enregistrés dans l'étape parente + et dans le jdc parent. + Un mot cle simple peut etre global. + """ + if self.definition.position == 'global' : + etape = self.get_etape() + if etape : + etape.mc_globaux[self.nom]=self + elif self.definition.position == 'global_jdc' : + if self.jdc: + self.jdc.mc_globaux[self.nom]=self + + def nbrColonnes(self): + genea = self.get_genealogie() + if "VALE_C" in genea and "DEFI_FONCTION" in genea : return 3 + if "VALE" in genea and "DEFI_FONCTION" in genea : return 2 + print dir(self) + return 0 #-------------------------------------------------------------------------------- -# PN : fin ajout pour Salome -#-------------------------------------------------------------------------------- #ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation # Elles doivent etre reintegrees des que possible @@ -460,8 +532,11 @@ class MCSIMP(I_OBJECT.OBJECT): self.cr.fatal("None n'est pas une valeur autorisée") else: # type,into ... - if v.__class__.__name__=='PARAMETRE' or v.__class__.__name__ == 'ITEM_PARAMETRE': - verif_type=1 + #PN ??? je n ose pas y toucher ??? + #if v.__class__.__name__ in ('PARAMETRE','EVAL', 'ITEM_PARAMETRE','PARAMETRE_EVAL'): + if ((issubclass(v.__class__,param2.Formula)) or + (v.__class__.__name__ in ('EVAL', 'ITEM_PARAMETRE','PARAMETRE_EVAL'))): + verif_type=self.verif_typeihm(v) else: verif_type=self.verif_type(val=v,cr=None) # cas des tuples avec un ITEM_PARAMETRE @@ -469,16 +544,20 @@ class MCSIMP(I_OBJECT.OBJECT): if type(v) == types.TupleType : new_val=[] for i in v: - if i.__class__.__name__ != 'PARAMETRE': - if i.__class__.__name__ != 'ITEM_PARAMETRE': - new_val.append(i) + if ((issubclass(i.__class__,param2.Formula)) or + (i.__class__.__name__ in ('EVAL', 'ITEM_PARAMETRE','PARAMETRE_EVAL'))): + if self.verif_typeihm(val=i,cr=cr) == 0: + verif_type = 0 + break + else: + new_val.append(i) if new_val != [] : verif_type=self.verif_type(val=new_val,cr=cr) else : # Cas d une liste de paramétre - verif_type= 1 + verif_type=self.verif_typeliste(val=v,cr=cr) else: - verif_type=self.verif_type(val=v,cr=None) + verif_type=self.verif_type(val=v,cr=cr) valid = verif_type*self.verif_into(cr=cr)*self.verif_card(cr=cr) # # On verifie les validateurs s'il y en a et si necessaire (valid == 1) @@ -498,3 +577,19 @@ class MCSIMP(I_OBJECT.OBJECT): self.set_valid(valid) return self.valid + + + def verif_typeihm(self,val,cr='non'): + try : + val.eval() + return 1 + except : + pass + return self.verif_type(val,cr) + + def verif_typeliste(self,val,cr='non') : + verif=0 + for v in val : + verif=verif+self.verif_typeihm(v,cr) + return verif +