1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2017 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
22 from __future__ import print_function
24 from builtins import str
29 from copy import copy,deepcopy
31 from . import typeNode
34 from Editeur import Objecttreeitem
36 from Noyau.N_CR import justify_text
37 from Accas import SalomeEntry
39 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
41 def createPopUpMenu(self):
42 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
45 def getPanelGroupe(self,parentQt,maCommande):
46 maDefinition=self.item.get_definition()
47 monObjet=self.item.object
51 if monObjet.isInformation():
52 from .monWidgetInfo import MonWidgetInfo
53 widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
58 # Attention l ordre des if est important
59 # Attention il faut gerer les blocs et les facteurs
60 # a gerer comme dans composimp
61 # Gestion des matrices
62 if self.item.wait_matrice ():
63 from .monWidgetMatrice import MonWidgetMatrice
64 widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
68 #print "____________________________", monNom, self.item.wait_co()
69 #print "____________________________", monNom, self.item.wait_assd()
70 # Gestion d'une seule valeur (eventuellement un tuple ou un complexe)
71 if maDefinition.into != [] and maDefinition.into != None:
72 if type(maDefinition.into) ==types.FunctionType : monInto=maDefinition.into()
73 else : monInto = maDefinition.into
76 if maDefinition.max == 1 :
79 if maDefinition.into != [] and maDefinition.into != None:
81 from .monWidgetRadioButton import MonWidgetRadioButton
82 widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
83 elif len(monInto) < 7 :
84 from .monWidget4a6RadioButton import MonWidget4a6RadioButton
85 widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
87 from .monWidgetCB import MonWidgetCB
88 widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
90 elif self.item.wait_bool() :
91 from .monWidgetSimpBool import MonWidgetSimpBool
92 widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
93 elif self.item.wait_fichier():
94 from .monWidgetSimpFichier import MonWidgetSimpFichier
95 widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
98 elif self.item.wait_date():
99 from .monWidgetDate import MonWidgetDate
100 widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
101 elif self.item.wait_heure():
102 from .monWidgetHeure import MonWidgetHeure
103 widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
105 elif self.item.wait_tuple() :
106 if self.item.object.definition.type[0].ntuple == 2:
107 from .monWidgetSimpTuple2 import MonWidgetSimpTuple2
108 widget=MonWidgetSimpTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
109 elif self.item.object.definition.type[0].ntuple == 3 :
110 from .monWidgetSimpTuple3 import MonWidgetSimpTuple3
111 widget=MonWidgetSimpTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
113 print ("Pas de Tuple de longueur > 3")
114 print ("Prevenir la maintenance ")
116 elif self.item.wait_complex():
117 from .monWidgetSimpComplexe import MonWidgetSimpComplexe
118 widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
120 elif self.item.wait_co():
121 if len(self.item.get_sd_avant_du_bon_type()) == 0 :
122 from .monWidgetUniqueSDCO import MonWidgetUniqueSDCO
123 widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
125 from .monWidgetSDCOInto import MonWidgetSDCOInto
126 widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
127 elif self.item.wait_assd():
128 if len(self.item.get_sd_avant_du_bon_type()) == 0 :
129 from .monWidgetVide import MonWidgetVide
130 widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
131 elif len(self.item.get_sd_avant_du_bon_type()) < 4 :
132 from .monWidgetRadioButton import MonWidgetRadioButtonSD
133 widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
134 elif len(self.item.get_sd_avant_du_bon_type()) < 7 :
135 from .monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
136 widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
138 from .monWidgetCB import MonWidgetCBSD
139 widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
141 elif self.item.wait_Salome() and self.editor.salome:
142 from .monWidgetSimpSalome import MonWidgetSimpSalome
143 widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
145 elif self.item.wait_TXM():
146 from .monWidgetSimpTxt import MonWidgetSimpTxt
147 widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
149 from .monWidgetSimpBase import MonWidgetSimpBase
150 widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
154 if maDefinition.intoSug != [] and maDefinition.intoSug != None:
155 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
156 from .monWidgetIntoSug import MonWidgetIntoSug
157 widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
159 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
160 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
161 #if maDefinition.into != [] and maDefinition.into != None:
162 # Attention pas fini --> on attend une liste de ASSD avec ordre
163 elif self.item.wait_assd() and self.item.is_list_SansOrdreNiDoublon():
164 #if self.item.is_list_Chargement():
165 #from monWidgetPlusieursTuple2AvecChargement import MonWidgetPlusieursTuple2AvecChargement
166 #widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
169 listeAAfficher = self.item.get_sd_avant_du_bon_type()
170 if len(listeAAfficher) == 0:
171 from .monWidgetVide import MonWidgetVide
172 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
174 from .monWidgetPlusieursInto import MonWidgetPlusieursInto
175 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
176 elif self.item.wait_assd() :
177 listeAAfficher = self.item.get_sd_avant_du_bon_type()
178 if len(listeAAfficher) == 0:
179 from .monWidgetVide import MonWidgetVide
180 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
181 elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
182 from .monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
183 widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
185 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
186 widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
187 elif self.item.wait_tuple() :
188 if self.item.object.definition.type[0].ntuple == 2:
189 from .monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
190 widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
191 elif self.item.object.definition.type[0].ntuple == 3 :
192 from .monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
193 widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
195 print ("Pas de Tuple de longueur > 3")
196 print ("Prevenir la maintenance ")
197 elif self.item.has_into():
198 if self.item.is_list_SansOrdreNiDoublon():
200 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
201 from .monWidgetPlusieursInto import MonWidgetPlusieursInto
202 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
204 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
205 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
207 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
208 from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
209 widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
211 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
212 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
215 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
216 from .monWidgetPlusieursBase import MonWidgetPlusieursBase
217 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
219 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
220 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
226 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
233 #-----------------------------------------------
235 # Methodes liees aux informations sur le Panel
236 # ou au mot-clef simple
238 #-----------------------------------------------
240 # get_into a priori inutile --> commentee
242 # wait_into a priori inutile --> commentee
251 Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
252 ou s'il n'en attend pas (valeur de retour 0)
254 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
255 Dans le cas sans validateur, l'information est donnee par l'attribut max
256 de la definition du mot cle.
257 Dans le cas avec validateur, il faut combiner l'information precedente avec
258 celle issue de l'appel de la methode is_list sur le validateur.On utilisera
259 l'operateur ET pour effectuer cette combinaison (AndVal).
262 min,max = self.GetMinMax()
266 # Dans le cas avec validateurs, pour que le mot cle soit considere
267 # comme acceptant une liste, il faut que max soit superieur a 1
268 # ET que la methode is_list du validateur retourne 1. Dans les autres cas
269 # on retournera 0 (n'attend pas de liste)
270 if self.definition.validators :
271 is_a_list= self.definition.validators.is_list() * is_a_list
274 def is_list_SansOrdreNiDoublon(self):
275 if self.definition.homo=="SansOrdreNiDoublon" : return 1
278 def is_list_Chargement(self):
279 if self.definition.docu != "" : return 1
284 Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
285 ou s'il n'en propose pas (valeur de retour 0)
287 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
288 Dans le cas sans validateur, l'information est donnee par l'attribut into
289 de la definition du mot cle.
290 Dans le cas avec validateurs, pour que le mot cle soit considere
291 comme proposant un choix, il faut que into soit present OU
292 que la methode has_into du validateur retourne 1. Dans les autres cas
293 on retournera 0 (ne propose pas de choix)
296 if self.definition.into:
298 elif self.definition.validators :
299 has_an_into= self.definition.validators.has_into()
302 def has_intoSug(self):
303 if self.definition.intoSug: return 1
308 """ Retourne les valeurs min et max de la definition de object """
309 return self.object.get_min_max()
311 def GetMultiplicite(self):
313 Retourne la multiplicite des valeurs affectees a l'objet
314 represente par l'item. Pour le moment retourne invariablement 1.
318 def GetIntervalle(self):
320 Retourne le domaine de valeur attendu par l'objet represente
323 return self.object.getintervalle()
325 def GetListeValeurs(self) :
326 """ Retourne la liste des valeurs de object """
327 valeurs=self.object.get_liste_valeurs()
329 if "R" in self.object.definition.type:
330 clef=self.object.GetNomConcept()
331 if clef in self.appli.dict_reels:
332 if type(valeurs) == tuple:
335 if val in self.appli.dict_reels[clef]:
336 valeurs_reelles.append(self.appli.dict_reels[clef][val])
338 valeurs_reelles.append(val)
340 if valeurs in self.appli.dict_reels[clef]:
341 valeurs_reelles=self.appli.dict_reels[clef][valeurs]
342 valeurs=valeurs_reelles
347 def get_liste_possible(self,listeActuelle=[]):
348 if hasattr(self.definition.validators,'into'):
349 valeurspossibles = self.definition.validators.into
351 valeurspossibles = self.get_definition().into
353 if listeActuelle==[] : return valeurspossibles
355 #On ne garde que les items valides
357 if type(valeurspossibles) in (list,tuple) :
360 valeurspossibles=(valeurspossibles,)
361 for item in valeurspossibles:
362 encorevalide=self.valide_item(item)
364 listevalideitem.append(item)
366 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
368 for item in listevalideitem:
369 encorevalide=self.valide_liste_partielle(item,listeActuelle)
371 listevalideliste.append(item)
372 #print listevalideliste
373 return listevalideliste
375 def get_liste_possible_avecSug(self,listeActuelle=[]):
376 if hasattr(self.definition,'intoSug'):
377 valeurspossibles = self.definition.intoSug
381 if listeActuelle==[] : return valeurspossibles
382 valeurspossibles = valeurspossibles+listeActuelle
384 #On ne garde que les items valides
386 if type(valeurspossibles) in (list,tuple) :
389 valeurspossibles=(valeurspossibles,)
390 for item in valeurspossibles:
391 encorevalide=self.valide_item(item)
393 listevalideitem.append(item)
395 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
397 for item in listevalideitem:
398 encorevalide=self.valide_liste_partielle(item,listeActuelle)
400 listevalideliste.append(item)
401 return listevalideliste
403 def get_liste_param_possible(self):
405 l1,l2=self.jdc.get_parametres_fonctions_avant_etape(self.get_etape())
406 for param in self.object.jdc.params:
407 if param.nom not in l1 : continue
408 encorevalide=self.valide_item(param.valeur)
410 type_param=param.valeur.__class__.__name__
411 for typ in self.definition.type:
413 liste_param.append(param)
414 if typ=='I' and type_param=='int':
415 liste_param.append(param)
416 if typ=='TXM' and type_param=='str':
417 liste_param.append(repr(param))
418 if ('grma' in repr(typ)) and type_param=='str':
419 liste_param.append(param.nom)
422 #--------------------------------------------------
424 # Methodes liees a la validite des valeurs saisies
426 #---------------------------------------------------
428 # valide_liste_partielle
429 # valide_liste_complete
435 def valide_item(self,item):
437 La validation est realisee directement par l'objet
439 return self.object.valide_item(item)
441 def valide_liste_partielle(self,item,listecourante):
442 #On protege la liste en entree en la copiant
443 valeur=listecourante[:]
445 return self.object.valid_valeur_partielle(valeur)
447 def valide_liste_complete (self,valeur):
448 return self.object.valid_valeur(valeur)
450 def valide_val (self,valeur):
451 return self.object.valid_val(valeur)
453 def info_erreur_item(self) :
455 if self.definition.validators :
456 commentaire=self.definition.validators.info_erreur_item()
461 if self.definition.validators :
462 commentaire=self.definition.validators.aide()
465 def info_erreur_liste(self) :
467 if self.definition.validators :
468 commentaire=self.definition.validators.info_erreur_liste()
471 def IsInIntervalle(self,valeur):
473 Retourne 1 si la valeur est dans l'intervalle permis par
474 l'objet represente par l'item.
476 return self.valide_item(valeur)
479 valide=self.object.isvalid()
482 #--------------------------------------------------
486 #---------------------------------------------------
490 # get_sd_avant_du_bon_type
494 def GetIconName(self):
496 return "ast-green-ball"
497 elif self.object.isoblig():
498 return "ast-red-ball"
500 return "ast-yel-ball"
505 Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
508 text= self.object.GetText()
509 if text == None : text=""
513 def set_valeur_co(self,nom_co):
515 Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
517 ret = self.object.set_valeur_co(nom_co)
518 #print "set_valeur_co",ret
521 def get_sd_avant_du_bon_type(self):
523 Retourne la liste des noms des SD présentes avant l'étape qui contient
524 le MCS pointé par self et du type requis par ce MCS
526 a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
529 def get_sd_avant_du_bon_type_pour_type_de_base(self):
530 a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
536 def delete_valeur_co(self,valeur=None):
538 Supprime la valeur du mot cle (de type CO)
539 il faut propager la destruction aux autres etapes
541 if not valeur : valeur=self.object.valeur
542 # XXX faut il vraiment appeler del_sdprod ???
543 #self.object.etape.parent.del_sdprod(valeur)
544 self.object.etape.parent.delete_concept(valeur)
546 #-----------------------------------------------
548 # Methodes liees au type de l objet attendu
550 #-----------------------------------------------
560 Méthode booléenne qui retourne 1 si l'objet pointé par self
561 attend un objet de type ASSD qui n'existe pas encore (type CO()),
564 return self.object.wait_co()
566 def wait_fichier(self):
567 maDefinition=self.object.definition
569 if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
576 Méthode booléenne qui retourne 1 si l'objet pointé par self
577 attend un objet GEOM, 0 sinon
579 return self.object.wait_geom()
582 return self.object.wait_TXM()
585 def wait_complex(self):
586 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
587 attend un complexe, 0 sinon """
588 if 'C' in self.object.definition.type:
594 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
595 attend un réel, 0 sinon """
596 if 'R' in self.object.definition.type:
602 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
603 attend un réel, 0 sinon """
604 if 'DateHHMMAAAA' in self.object.definition.type:
609 def wait_heure(self):
610 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
611 attend un réel, 0 sinon """
612 if 'HeureHHMMSS' in self.object.definition.type:
619 def wait_tuple(self):
620 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
621 attend un Tuple, 0 sinon """
622 for ss_type in self.object.definition.type:
623 if repr(ss_type).find('Tuple') != -1 :
627 def wait_matrice(self):
628 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
629 attend un Tuple, 0 sinon """
630 for ss_type in self.object.definition.type:
631 if repr(ss_type).find('Matrice') != -1 :
636 """Méthode booléenne qui retourne 1 si l'objet pointé par self
637 attend un objet de type ASSD ou dérivé, 0 sinon """
638 return self.object.wait_assd()
640 def wait_assd_or_type_base(self) :
642 if len(self.object.definition.type) > 1 :
643 if self.wait_reel() :
645 if 'I' in self.object.definition.type :
649 def wait_Salome(self):
650 monType = self.object.definition.type[0]
651 if 'grma' in repr(monType) : return True
652 if 'grno' in repr(monType) : return True
654 if issubclass(monType, SalomeEntry) : return True
661 Retourne le type de valeur attendu par l'objet représenté par l'item.
663 return self.object.get_type()
665 #-----------------------------------------------------
667 # Methodes liees a l evaluation de la valeur saisie
669 #-----------------------------------------------------
675 def eval_valeur(self,valeur):
676 """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
677 - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
678 - retourne 'valeur' (chaine de caracteres) sinon
680 newvaleur=self.eval_val(valeur)
683 def eval_valeur_BAK(self,valeur):
684 """ Lance l'interpretation de 'valeur' (chaine de caractéres) comme valeur
685 de l'objet pointé par self :
686 - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
687 - retourne 'valeur' (chaine de caractéres) sinon
688 - retourne None en cas d invalidite
689 - retourne invalide si 1 des objets du tuple l est
692 if type(valeur) in (list,tuple) :
695 newvaleur,validiteitem=self.eval_valeur_item(item)
696 valeurretour.append(newvaleur)
697 if validiteitem == 0:
700 valeurretour,validite= self.eval_valeur_item(valeur)
703 return valeurretour,validite
705 def eval_valeur_item(self,valeur):
706 """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple
707 - va retourner la valeur de retour et la validite
708 selon le type de l objet attendu
709 - traite les reels et les parametres
711 #print "eval_valeur_item",valeur
712 if valeur==None or valeur == "" :
716 valeurinter = self.traite_reel(valeur)
717 if valeurinter != None :
718 valeurretour,validite= self.object.eval_valeur(valeurinter)
720 valeurretour,validite= self.object.eval_valeur(valeur)
721 elif self.wait_geom():
722 valeurretour,validite = valeur,1
724 valeurretour,validite= self.object.eval_valeur(valeur)
725 #print "eval_valeur_item",valeurretour,validite
728 if type(valeur) == bytes and self.object.wait_TXM():
729 essai_valeur="'" + valeur + "'"
730 valeurretour,validite= self.object.eval_valeur(essai_valeur)
732 if hasattr(valeurretour,'__class__'):
733 #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
734 if valeurretour.__class__.__name__ in ('PARAMETRE',):
738 # CCAR : il ne faut pas essayer de creer un concept
739 # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
741 #valeurretour=Accas.CO(valeur)
745 # on est dans le cas ou on a évalué et ou on n'aurait pas du
746 if self.object.wait_TXM() :
747 if type(valeurretour) != bytes:
748 valeurretour=str(valeur)
750 return valeurretour,validite
752 def is_CO(self,valeur=None):
754 Indique si valeur est un concept produit de la macro
755 Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
756 Si valeur vaut None on teste la valeur du mot cle
758 # Pour savoir si un concept est un nouveau concept de macro
759 # on regarde s'il est présent dans l'attribut sdprods de l'étape
760 # ou si son nom de classe est CO.
761 # Il faut faire les 2 tests car une macro non valide peut etre
762 # dans un etat pas tres catholique avec des CO pas encore types
763 # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
764 if not valeur:valeur=self.object.valeur
765 if valeur in self.object.etape.sdprods:return 1
766 if type(valeur) is not types.InstanceType:return 0
767 if valeur.__class__.__name__ == 'CO':return 1
770 def is_param(self,valeur) :
771 for param in self.jdc.params:
772 if (repr(param) == valeur):
776 def traite_reel(self,valeur):
778 Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
779 ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
782 valeur = valeur.strip()
783 liste_reels = self.get_sd_avant_du_bon_type()
784 if valeur in liste_reels:
786 if len(valeur) >= 3 :
787 if valeur[0:4] == 'EVAL' :
788 # on a trouvé un EVAL --> on retourne directement la valeur
790 if valeur.find('.') == -1 :
791 # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
792 if (self.is_param(valeur)):
795 if valeur.find('e') != -1:
796 # Notation scientifique ?
809 treeitem = SIMPTreeItem