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)
178 from .monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
179 widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
180 elif self.item.wait_tuple() :
181 if self.item.object.definition.type[0].ntuple == 2:
182 from .monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
183 widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
184 elif self.item.object.definition.type[0].ntuple == 3 :
185 from .monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
186 widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
188 print ("Pas de Tuple de longueur > 3")
189 print ("Prevenir la maintenance ")
190 elif self.item.has_into():
191 if self.item.is_list_SansOrdreNiDoublon():
193 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
194 from .monWidgetPlusieursInto import MonWidgetPlusieursInto
195 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
197 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
198 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
200 # tres vite pour le tag mais devra etre gere dans configuration
201 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
202 from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
203 widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
205 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
206 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
209 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
210 from .monWidgetPlusieursBase import MonWidgetPlusieursBase
211 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
213 from .monWidgetPlusieursPlie import MonWidgetPlusieursPlie
214 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
220 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
227 #-----------------------------------------------
229 # Methodes liees aux informations sur le Panel
230 # ou au mot-clef simple
232 #-----------------------------------------------
234 # get_into a priori inutile --> commentee
236 # wait_into a priori inutile --> commentee
245 Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
246 ou s'il n'en attend pas (valeur de retour 0)
248 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
249 Dans le cas sans validateur, l'information est donnee par l'attribut max
250 de la definition du mot cle.
251 Dans le cas avec validateur, il faut combiner l'information precedente avec
252 celle issue de l'appel de la methode is_list sur le validateur.On utilisera
253 l'operateur ET pour effectuer cette combinaison (AndVal).
256 min,max = self.GetMinMax()
260 # Dans le cas avec validateurs, pour que le mot cle soit considere
261 # comme acceptant une liste, il faut que max soit superieur a 1
262 # ET que la methode is_list du validateur retourne 1. Dans les autres cas
263 # on retournera 0 (n'attend pas de liste)
264 if self.definition.validators :
265 is_a_list= self.definition.validators.is_list() * is_a_list
268 def is_list_SansOrdreNiDoublon(self):
269 if self.definition.homo=="SansOrdreNiDoublon" : return 1
272 def is_list_Chargement(self):
273 if self.definition.docu != "" : return 1
278 Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
279 ou s'il n'en propose pas (valeur de retour 0)
281 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
282 Dans le cas sans validateur, l'information est donnee par l'attribut into
283 de la definition du mot cle.
284 Dans le cas avec validateurs, pour que le mot cle soit considere
285 comme proposant un choix, il faut que into soit present OU
286 que la methode has_into du validateur retourne 1. Dans les autres cas
287 on retournera 0 (ne propose pas de choix)
290 if self.definition.into:
292 elif self.definition.validators :
293 has_an_into= self.definition.validators.has_into()
296 def has_intoSug(self):
297 if self.definition.intoSug: return 1
302 """ Retourne les valeurs min et max de la definition de object """
303 return self.object.get_min_max()
305 def GetMultiplicite(self):
307 Retourne la multiplicite des valeurs affectees a l'objet
308 represente par l'item. Pour le moment retourne invariablement 1.
312 def GetIntervalle(self):
314 Retourne le domaine de valeur attendu par l'objet represente
317 return self.object.getintervalle()
319 def GetListeValeurs(self) :
320 """ Retourne la liste des valeurs de object """
321 valeurs=self.object.get_liste_valeurs()
323 if "R" in self.object.definition.type:
324 clef=self.object.GetNomConcept()
325 if clef in self.appli.dict_reels:
326 if type(valeurs) == tuple:
329 if val in self.appli.dict_reels[clef]:
330 valeurs_reelles.append(self.appli.dict_reels[clef][val])
332 valeurs_reelles.append(val)
334 if valeurs in self.appli.dict_reels[clef]:
335 valeurs_reelles=self.appli.dict_reels[clef][valeurs]
336 valeurs=valeurs_reelles
341 def get_liste_possible(self,listeActuelle=[]):
342 if hasattr(self.definition.validators,'into'):
343 valeurspossibles = self.definition.validators.into
345 valeurspossibles = self.get_definition().into
347 if listeActuelle==[] : return valeurspossibles
349 #On ne garde que les items valides
351 if type(valeurspossibles) in (list,tuple) :
354 valeurspossibles=(valeurspossibles,)
355 for item in valeurspossibles:
356 encorevalide=self.valide_item(item)
358 listevalideitem.append(item)
360 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
362 for item in listevalideitem:
363 encorevalide=self.valide_liste_partielle(item,listeActuelle)
365 listevalideliste.append(item)
366 #print listevalideliste
367 return listevalideliste
369 def get_liste_possible_avecSug(self,listeActuelle=[]):
370 if hasattr(self.definition,'intoSug'):
371 valeurspossibles = self.definition.intoSug
375 if listeActuelle==[] : return valeurspossibles
376 valeurspossibles = valeurspossibles+listeActuelle
378 #On ne garde que les items valides
380 if type(valeurspossibles) in (list,tuple) :
383 valeurspossibles=(valeurspossibles,)
384 for item in valeurspossibles:
385 encorevalide=self.valide_item(item)
387 listevalideitem.append(item)
389 #on ne garde que les choix possibles qui passent le test de valide_liste_partielle
391 for item in listevalideitem:
392 encorevalide=self.valide_liste_partielle(item,listeActuelle)
394 listevalideliste.append(item)
395 return listevalideliste
397 def get_liste_param_possible(self):
399 l1,l2=self.jdc.get_parametres_fonctions_avant_etape(self.get_etape())
400 for param in self.object.jdc.params:
401 if param.nom not in l1 : continue
402 encorevalide=self.valide_item(param.valeur)
404 type_param=param.valeur.__class__.__name__
405 for typ in self.definition.type:
407 liste_param.append(param)
408 if typ=='I' and type_param=='int':
409 liste_param.append(param)
410 if typ=='TXM' and type_param=='str':
411 liste_param.append(repr(param))
412 if ('grma' in repr(typ)) and type_param=='str':
413 liste_param.append(param.nom)
416 #--------------------------------------------------
418 # Methodes liees a la validite des valeurs saisies
420 #---------------------------------------------------
422 # valide_liste_partielle
423 # valide_liste_complete
429 def valide_item(self,item):
431 La validation est realisee directement par l'objet
433 return self.object.valide_item(item)
435 def valide_liste_partielle(self,item,listecourante):
436 #On protege la liste en entree en la copiant
437 valeur=listecourante[:]
439 return self.object.valid_valeur_partielle(valeur)
441 def valide_liste_complete (self,valeur):
442 return self.object.valid_valeur(valeur)
444 def valide_val (self,valeur):
445 return self.object.valid_val(valeur)
447 def info_erreur_item(self) :
449 if self.definition.validators :
450 commentaire=self.definition.validators.info_erreur_item()
455 if self.definition.validators :
456 commentaire=self.definition.validators.aide()
459 def info_erreur_liste(self) :
461 if self.definition.validators :
462 commentaire=self.definition.validators.info_erreur_liste()
465 def IsInIntervalle(self,valeur):
467 Retourne 1 si la valeur est dans l'intervalle permis par
468 l'objet represente par l'item.
470 return self.valide_item(valeur)
473 valide=self.object.isvalid()
476 #--------------------------------------------------
480 #---------------------------------------------------
484 # get_sd_avant_du_bon_type
488 def GetIconName(self):
490 return "ast-green-ball"
491 elif self.object.isoblig():
492 return "ast-red-ball"
494 return "ast-yel-ball"
499 Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
502 text= self.object.GetText()
503 if text == None : text=""
507 def set_valeur_co(self,nom_co):
509 Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
511 ret = self.object.set_valeur_co(nom_co)
512 #print "set_valeur_co",ret
515 def get_sd_avant_du_bon_type(self):
517 Retourne la liste des noms des SD présentes avant l'étape qui contient
518 le MCS pointé par self et du type requis par ce MCS
520 a=self.object.etape.parent.get_sd_avant_du_bon_type(self.object.etape,self.object.definition.type)
523 def get_sd_avant_du_bon_type_pour_type_de_base(self):
524 a=self.object.jdc.get_sd_avant_du_bon_type_pour_type_de_base(self.object.etape,"LASSD")
530 def delete_valeur_co(self,valeur=None):
532 Supprime la valeur du mot cle (de type CO)
533 il faut propager la destruction aux autres etapes
535 if not valeur : valeur=self.object.valeur
536 # XXX faut il vraiment appeler del_sdprod ???
537 #self.object.etape.parent.del_sdprod(valeur)
538 self.object.etape.parent.delete_concept(valeur)
540 #-----------------------------------------------
542 # Methodes liees au type de l objet attendu
544 #-----------------------------------------------
554 Méthode booléenne qui retourne 1 si l'objet pointé par self
555 attend un objet de type ASSD qui n'existe pas encore (type CO()),
558 return self.object.wait_co()
560 def wait_fichier(self):
561 maDefinition=self.object.definition
563 if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
570 Méthode booléenne qui retourne 1 si l'objet pointé par self
571 attend un objet GEOM, 0 sinon
573 return self.object.wait_geom()
576 return self.object.wait_TXM()
579 def wait_complex(self):
580 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
581 attend un complexe, 0 sinon """
582 if 'C' in self.object.definition.type:
588 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
589 attend un réel, 0 sinon """
590 if 'R' in self.object.definition.type:
596 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
597 attend un réel, 0 sinon """
598 if 'DateHHMMAAAA' in self.object.definition.type:
603 def wait_heure(self):
604 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
605 attend un réel, 0 sinon """
606 if 'HeureHHMMSS' in self.object.definition.type:
613 def wait_tuple(self):
614 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
615 attend un Tuple, 0 sinon """
616 for ss_type in self.object.definition.type:
617 if repr(ss_type).find('Tuple') != -1 :
621 def wait_matrice(self):
622 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
623 attend un Tuple, 0 sinon """
624 for ss_type in self.object.definition.type:
625 if repr(ss_type).find('Matrice') != -1 :
630 """Méthode booléenne qui retourne 1 si l'objet pointé par self
631 attend un objet de type ASSD ou dérivé, 0 sinon """
632 return self.object.wait_assd()
634 def wait_assd_or_type_base(self) :
636 if len(self.object.definition.type) > 1 :
637 if self.wait_reel() :
639 if 'I' in self.object.definition.type :
643 def wait_Salome(self):
644 monType = self.object.definition.type[0]
645 if 'grma' in repr(monType) : return True
646 if 'grno' in repr(monType) : return True
648 if issubclass(monType, SalomeEntry) : return True
655 Retourne le type de valeur attendu par l'objet représenté par l'item.
657 return self.object.get_type()
659 #-----------------------------------------------------
661 # Methodes liees a l evaluation de la valeur saisie
663 #-----------------------------------------------------
669 def eval_valeur(self,valeur):
670 """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
671 - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
672 - retourne 'valeur' (chaine de caracteres) sinon
674 newvaleur=self.eval_val(valeur)
677 def eval_valeur_BAK(self,valeur):
678 """ Lance l'interpretation de 'valeur' (chaine de caractéres) comme valeur
679 de l'objet pointé par self :
680 - retourne l'objet associé si on a pu interpréter (entier, réel, ASSD,...)
681 - retourne 'valeur' (chaine de caractéres) sinon
682 - retourne None en cas d invalidite
683 - retourne invalide si 1 des objets du tuple l est
686 if type(valeur) in (list,tuple) :
689 newvaleur,validiteitem=self.eval_valeur_item(item)
690 valeurretour.append(newvaleur)
691 if validiteitem == 0:
694 valeurretour,validite= self.eval_valeur_item(valeur)
697 return valeurretour,validite
699 def eval_valeur_item(self,valeur):
700 """ Lance l'interprétation de 'valeur' qui doit ne pas etre un tuple
701 - va retourner la valeur de retour et la validite
702 selon le type de l objet attendu
703 - traite les reels et les parametres
705 #print "eval_valeur_item",valeur
706 if valeur==None or valeur == "" :
710 valeurinter = self.traite_reel(valeur)
711 if valeurinter != None :
712 valeurretour,validite= self.object.eval_valeur(valeurinter)
714 valeurretour,validite= self.object.eval_valeur(valeur)
715 elif self.wait_geom():
716 valeurretour,validite = valeur,1
718 valeurretour,validite= self.object.eval_valeur(valeur)
719 #print "eval_valeur_item",valeurretour,validite
722 if type(valeur) == bytes and self.object.wait_TXM():
723 essai_valeur="'" + valeur + "'"
724 valeurretour,validite= self.object.eval_valeur(essai_valeur)
726 if hasattr(valeurretour,'__class__'):
727 #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
728 if valeurretour.__class__.__name__ in ('PARAMETRE',):
732 # CCAR : il ne faut pas essayer de creer un concept
733 # il faut simplement en chercher un existant ce qui a du etre fait par self.object.eval_valeur(valeur)
735 #valeurretour=Accas.CO(valeur)
739 # on est dans le cas ou on a évalué et ou on n'aurait pas du
740 if self.object.wait_TXM() :
741 if type(valeurretour) != bytes:
742 valeurretour=str(valeur)
744 return valeurretour,validite
746 def is_CO(self,valeur=None):
748 Indique si valeur est un concept produit de la macro
749 Cette méthode n'a de sens que pour un MCSIMP d'une MACRO
750 Si valeur vaut None on teste la valeur du mot cle
752 # Pour savoir si un concept est un nouveau concept de macro
753 # on regarde s'il est présent dans l'attribut sdprods de l'étape
754 # ou si son nom de classe est CO.
755 # Il faut faire les 2 tests car une macro non valide peut etre
756 # dans un etat pas tres catholique avec des CO pas encore types
757 # et donc pas dans sdprods (resultat d'une exception dans type_sdprod)
758 if not valeur:valeur=self.object.valeur
759 if valeur in self.object.etape.sdprods:return 1
760 if type(valeur) is not types.InstanceType:return 0
761 if valeur.__class__.__name__ == 'CO':return 1
764 def is_param(self,valeur) :
765 for param in self.jdc.params:
766 if (repr(param) == valeur):
770 def traite_reel(self,valeur):
772 Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
773 ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
776 valeur = valeur.strip()
777 liste_reels = self.get_sd_avant_du_bon_type()
778 if valeur in liste_reels:
780 if len(valeur) >= 3 :
781 if valeur[0:4] == 'EVAL' :
782 # on a trouvé un EVAL --> on retourne directement la valeur
784 if valeur.find('.') == -1 :
785 # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
786 if (self.is_param(valeur)):
789 if valeur.find('e') != -1:
790 # Notation scientifique ?
803 treeitem = SIMPTreeItem