1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 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 from .monWidgetIntoSug import MonWidgetIntoSug
156 widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
157 #if maDefinition.into != [] and maDefinition.into != None:
158 # Attention pas fini --> on attend une liste de ASSD avec ordre
159 elif self.item.wait_assd() and self.item.is_list_SansOrdreNiDoublon():
160 #if self.item.is_list_Chargement():
161 #from monWidgetPlusieursTuple2AvecChargement import MonWidgetPlusieursTuple2AvecChargement
162 #widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
165 listeAAfficher = self.item.get_sd_avant_du_bon_type()
166 if len(listeAAfficher) == 0:
167 from .monWidgetVide import MonWidgetVide
168 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
170 from .monWidgetPlusieursInto import MonWidgetPlusieursInto
171 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
172 elif self.item.wait_assd() :
173 listeAAfficher = self.item.get_sd_avant_du_bon_type()
174 if len(listeAAfficher) == 0:
175 from .monWidgetVide import MonWidgetVide
176 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
177 elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
178 from .monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
179 widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
181 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
182 widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
183 elif self.item.wait_tuple() :
184 if self.item.object.definition.type[0].ntuple == 2:
185 from .monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
186 widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
187 elif self.item.object.definition.type[0].ntuple == 3 :
188 from .monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
189 widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
191 print ("Pas de Tuple de longueur > 3")
192 print ("Prevenir la maintenance ")
193 elif self.item.has_into():
194 if self.item.is_list_SansOrdreNiDoublon():
196 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
197 from .monWidgetPlusieursInto import MonWidgetPlusieursInto
198 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
200 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
201 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
203 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
204 from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
205 widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
207 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
208 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
211 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
212 from .monWidgetPlusieursBase import MonWidgetPlusieursBase
213 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
215 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
216 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
222 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
229 #-----------------------------------------------
231 # Methodes liees aux informations sur le Panel
232 # ou au mot-clef simple
234 #-----------------------------------------------
236 # get_into a priori inutile --> commentee
238 # wait_into a priori inutile --> commentee
247 Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
248 ou s'il n'en attend pas (valeur de retour 0)
250 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
251 Dans le cas sans validateur, l'information est donnee par l'attribut max
252 de la definition du mot cle.
253 Dans le cas avec validateur, il faut combiner l'information precedente avec
254 celle issue de l'appel de la methode is_list sur le validateur.On utilisera
255 l'operateur ET pour effectuer cette combinaison (AndVal).
258 min,max = self.GetMinMax()
262 # Dans le cas avec validateurs, pour que le mot cle soit considere
263 # comme acceptant une liste, il faut que max soit superieur a 1
264 # ET que la methode is_list du validateur retourne 1. Dans les autres cas
265 # on retournera 0 (n'attend pas de liste)
266 if self.definition.validators :
267 is_a_list= self.definition.validators.is_list() * is_a_list
270 def is_list_SansOrdreNiDoublon(self):
271 if self.definition.homo=="SansOrdreNiDoublon" : return 1
274 def is_list_Chargement(self):
275 if self.definition.docu != "" : return 1
280 Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
281 ou s'il n'en propose pas (valeur de retour 0)
283 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
284 Dans le cas sans validateur, l'information est donnee par l'attribut into
285 de la definition du mot cle.
286 Dans le cas avec validateurs, pour que le mot cle soit considere
287 comme proposant un choix, il faut que into soit present OU
288 que la methode has_into du validateur retourne 1. Dans les autres cas
289 on retournera 0 (ne propose pas de choix)
292 if self.definition.into:
294 elif self.definition.validators :
295 has_an_into= self.definition.validators.has_into()
298 def has_intoSug(self):
299 if self.definition.intoSug: return 1
304 """ Retourne les valeurs min et max de la definition de object """
305 return self.object.get_min_max()
307 def GetMultiplicite(self):
309 Retourne la multiplicite des valeurs affectees a l'objet
310 represente par l'item. Pour le moment retourne invariablement 1.
314 def GetIntervalle(self):
316 Retourne le domaine de valeur attendu par l'objet represente
319 return self.object.getintervalle()
321 def GetListeValeurs(self) :
322 """ Retourne la liste des valeurs de object """
323 valeurs=self.object.get_liste_valeurs()
325 if "R" in self.object.definition.type:
326 clef=self.object.GetNomConcept()
327 if clef in self.appli.dict_reels:
328 if type(valeurs) == tuple:
331 if val in self.appli.dict_reels[clef]:
332 valeurs_reelles.append(self.appli.dict_reels[clef][val])
334 valeurs_reelles.append(val)
336 if valeurs in self.appli.dict_reels[clef]:
337 valeurs_reelles=self.appli.dict_reels[clef][valeurs]
338 valeurs=valeurs_reelles
343 def get_liste_possible(self,listeActuelle=[]):
344 if hasattr(self.definition.validators,'into'):
345 valeurspossibles = self.definition.validators.into
347 valeurspossibles = self.get_definition().into
349 if listeActuelle==[] : return valeurspossibles
351 #On ne garde que les items valides
353 if type(valeurspossibles) in (list,tuple) :
356 valeurspossibles=(valeurspossibles,)
357 for item in valeurspossibles:
358 encorevalide=self.valide_item(item)
360 listevalideitem.append(item)
362 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
364 for item in listevalideitem:
365 encorevalide=self.valide_liste_partielle(item,listeActuelle)
367 listevalideliste.append(item)
368 #print listevalideliste
369 return listevalideliste
371 def get_liste_possible_avecSug(self,listeActuelle=[]):
372 if hasattr(self.definition,'intoSug'):
373 valeurspossibles = self.definition.intoSug
377 if listeActuelle==[] : return valeurspossibles
378 valeurspossibles = valeurspossibles+listeActuelle
380 #On ne garde que les items valides
382 if type(valeurspossibles) in (list,tuple) :
385 valeurspossibles=(valeurspossibles,)
386 for item in valeurspossibles:
387 encorevalide=self.valide_item(item)
389 listevalideitem.append(item)
391 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
393 for item in listevalideitem:
394 encorevalide=self.valide_liste_partielle(item,listeActuelle)
396 listevalideliste.append(item)
397 return listevalideliste
399 def get_liste_param_possible(self):
401 l1,l2=self.jdc.get_parametres_fonctions_avant_etape(self.get_etape())
402 for param in self.object.jdc.params:
403 if param.nom not in l1 : continue
404 encorevalide=self.valide_item(param.valeur)
406 type_param=param.valeur.__class__.__name__
407 for typ in self.definition.type:
409 liste_param.append(param)
410 if typ=='I' and type_param=='int':
411 liste_param.append(param)
412 if typ=='TXM' and type_param=='str':
413 liste_param.append(repr(param))
414 if ('grma' in repr(typ)) and type_param=='str':
415 liste_param.append(param.nom)
418 #--------------------------------------------------
420 # Methodes liees a la validite des valeurs saisies
422 #---------------------------------------------------
424 # valide_liste_partielle
425 # valide_liste_complete
431 def valide_item(self,item):
433 La validation est realisee directement par l'objet
435 return self.object.valide_item(item)
437 def valide_liste_partielle(self,item,listecourante):
438 #On protege la liste en entree en la copiant
439 valeur=listecourante[:]
441 return self.object.valid_valeur_partielle(valeur)
443 def valide_liste_complete (self,valeur):
444 return self.object.valid_valeur(valeur)
446 def valide_val (self,valeur):
447 return self.object.valid_val(valeur)
449 def info_erreur_item(self) :
451 if self.definition.validators :
452 commentaire=self.definition.validators.info_erreur_item()
457 if self.definition.validators :
458 commentaire=self.definition.validators.aide()
461 def info_erreur_liste(self) :
463 if self.definition.validators :
464 commentaire=self.definition.validators.info_erreur_liste()
467 def IsInIntervalle(self,valeur):
469 Retourne 1 si la valeur est dans l'intervalle permis par
470 l'objet represente par l'item.
472 return self.valide_item(valeur)
475 valide=self.object.isvalid()
478 #--------------------------------------------------
482 #---------------------------------------------------
486 # get_sd_avant_du_bon_type
490 def GetIconName(self):
492 return "ast-green-ball"
493 elif self.object.isoblig():
494 return "ast-red-ball"
496 return "ast-yel-ball"
501 Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
504 text= self.object.GetText()
505 if text == None : text=""
509 def set_valeur_co(self,nom_co):
511 Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
513 ret = self.object.set_valeur_co(nom_co)
514 #print "set_valeur_co",ret
517 def get_sd_avant_du_bon_type(self):
519 Retourne la liste des noms des SD présentes avant l'étape qui contient
520 le MCS pointé par self et du type requis par ce MCS
522 a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
525 def get_sd_avant_du_bon_type_pour_type_de_base(self):
526 a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
532 def delete_valeur_co(self,valeur=None):
534 Supprime la valeur du mot cle (de type CO)
535 il faut propager la destruction aux autres etapes
537 if not valeur : valeur=self.object.valeur
538 # XXX faut il vraiment appeler del_sdprod ???
539 #self.object.etape.parent.del_sdprod(valeur)
540 self.object.etape.parent.delete_concept(valeur)
542 #-----------------------------------------------
544 # Methodes liees au type de l objet attendu
546 #-----------------------------------------------
556 Méthode booléenne qui retourne 1 si l'objet pointé par self
557 attend un objet de type ASSD qui n'existe pas encore (type CO()),
560 return self.object.wait_co()
562 def wait_fichier(self):
563 maDefinition=self.object.definition
565 if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
572 Méthode booléenne qui retourne 1 si l'objet pointé par self
573 attend un objet GEOM, 0 sinon
575 return self.object.wait_geom()
578 return self.object.wait_TXM()
581 def wait_complex(self):
582 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
583 attend un complexe, 0 sinon """
584 if 'C' in self.object.definition.type:
590 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
591 attend un réel, 0 sinon """
592 if 'R' in self.object.definition.type:
598 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
599 attend un réel, 0 sinon """
600 if 'DateHHMMAAAA' in self.object.definition.type:
605 def wait_heure(self):
606 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
607 attend un réel, 0 sinon """
608 if 'HeureHHMMSS' in self.object.definition.type:
615 def wait_tuple(self):
616 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
617 attend un Tuple, 0 sinon """
618 for ss_type in self.object.definition.type:
619 if repr(ss_type).find('Tuple') != -1 :
623 def wait_matrice(self):
624 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
625 attend un Tuple, 0 sinon """
626 for ss_type in self.object.definition.type:
627 if repr(ss_type).find('Matrice') != -1 :
632 """Méthode booléenne qui retourne 1 si l'objet pointé par self
633 attend un objet de type ASSD ou dérivé, 0 sinon """
634 return self.object.wait_assd()
636 def wait_assd_or_type_base(self) :
638 if len(self.object.definition.type) > 1 :
639 if self.wait_reel() :
641 if 'I' in self.object.definition.type :
645 def wait_Salome(self):
646 monType = self.object.definition.type[0]
647 if 'grma' in repr(monType) : return True
648 if 'grno' in repr(monType) : return True
650 if issubclass(monType, SalomeEntry) : return True
657 Retourne le type de valeur attendu par l'objet représenté par l'item.
659 return self.object.get_type()
661 #-----------------------------------------------------
663 # Methodes liees a l evaluation de la valeur saisie
665 #-----------------------------------------------------
671 def eval_valeur(self,valeur):
672 """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
673 - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
674 - retourne 'valeur' (chaine de caracteres) sinon
676 newvaleur=self.eval_val(valeur)
679 def eval_valeur_BAK(self,valeur):
680 """ Lance l'interpretation de 'valeur' (chaine de caractéres) comme valeur
681 de l'objet pointé par self :
682 - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
683 - retourne 'valeur' (chaine de caractéres) sinon
684 - retourne None en cas d invalidite
685 - retourne invalide si 1 des objets du tuple l est
688 if type(valeur) in (list,tuple) :
691 newvaleur,validiteitem=self.eval_valeur_item(item)
692 valeurretour.append(newvaleur)
693 if validiteitem == 0:
696 valeurretour,validite= self.eval_valeur_item(valeur)
699 return valeurretour,validite
701 def eval_valeur_item(self,valeur):
702 """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple
703 - va retourner la valeur de retour et la validite
704 selon le type de l objet attendu
705 - traite les reels et les parametres
707 #print "eval_valeur_item",valeur
708 if valeur==None or valeur == "" :
712 valeurinter = self.traite_reel(valeur)
713 if valeurinter != None :
714 valeurretour,validite= self.object.eval_valeur(valeurinter)
716 valeurretour,validite= self.object.eval_valeur(valeur)
717 elif self.wait_geom():
718 valeurretour,validite = valeur,1
720 valeurretour,validite= self.object.eval_valeur(valeur)
721 #print "eval_valeur_item",valeurretour,validite
724 if type(valeur) == bytes and self.object.wait_TXM():
725 essai_valeur="'" + valeur + "'"
726 valeurretour,validite= self.object.eval_valeur(essai_valeur)
728 if hasattr(valeurretour,'__class__'):
729 #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
730 if valeurretour.__class__.__name__ in ('PARAMETRE',):
734 # CCAR : il ne faut pas essayer de creer un concept
735 # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
737 #valeurretour=Accas.CO(valeur)
741 # on est dans le cas ou on a évalué et ou on n'aurait pas du
742 if self.object.wait_TXM() :
743 if type(valeurretour) != bytes:
744 valeurretour=str(valeur)
746 return valeurretour,validite
748 def is_CO(self,valeur=None):
750 Indique si valeur est un concept produit de la macro
751 Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
752 Si valeur vaut None on teste la valeur du mot cle
754 # Pour savoir si un concept est un nouveau concept de macro
755 # on regarde s'il est présent dans l'attribut sdprods de l'étape
756 # ou si son nom de classe est CO.
757 # Il faut faire les 2 tests car une macro non valide peut etre
758 # dans un etat pas tres catholique avec des CO pas encore types
759 # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
760 if not valeur:valeur=self.object.valeur
761 if valeur in self.object.etape.sdprods:return 1
762 if type(valeur) is not types.InstanceType:return 0
763 if valeur.__class__.__name__ == 'CO':return 1
766 def is_param(self,valeur) :
767 for param in self.jdc.params:
768 if (repr(param) == valeur):
772 def traite_reel(self,valeur):
774 Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
775 ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
778 valeur = valeur.strip()
779 liste_reels = self.get_sd_avant_du_bon_type()
780 if valeur in liste_reels:
782 if len(valeur) >= 3 :
783 if valeur[0:4] == 'EVAL' :
784 # on a trouvé un EVAL --> on retourne directement la valeur
786 if valeur.find('.') == -1 :
787 # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
788 if (self.is_param(valeur)):
791 if valeur.find('e') != -1:
792 # Notation scientifique ?
805 treeitem = SIMPTreeItem