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 InterfaceQT4 import typeNode
34 from Editeur import Objecttreeitem
35 from InterfaceQT4 import browser
36 from Noyau.N_CR import justifyText
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 InterfaceQT4.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.waitMatrice ():
63 from InterfaceQT4.monWidgetMatrice import MonWidgetMatrice
64 widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
68 #print "____________________________", monNom, self.item.waitCo()
69 #print "____________________________", monNom, self.item.waitAssd()
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.intoSug != [] and maDefinition.intoSug != None:
80 from InterfaceQT4.monWidgetCBIntoSug import MonWidgetCBIntoSug
81 widget=MonWidgetCBIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
82 elif maDefinition.into != [] and maDefinition.into != None:
83 if maDefinition.fenetreIhm=='menuDeroulant' :
84 from InterfaceQT4.monWidgetCB import MonWidgetCB
85 widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
86 elif len(monInto) < 4 :
87 from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButton
88 widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
89 elif len(monInto) < 7 :
90 from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButton
91 widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
93 from InterfaceQT4.monWidgetCB import MonWidgetCB
94 widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
96 elif self.item.waitBool() :
97 from InterfaceQT4.monWidgetSimpBool import MonWidgetSimpBool
98 widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
99 elif self.item.waitFichier():
100 from InterfaceQT4.monWidgetSimpFichier import MonWidgetSimpFichier
101 widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
104 elif self.item.waitDate():
105 from InterfaceQT4.monWidgetDate import MonWidgetDate
106 widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
107 elif self.item.waitHeure():
108 from InterfaceQT4.monWidgetHeure import MonWidgetHeure
109 widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
111 elif self.item.waitTuple() :
112 num=self.item.object.definition.type[0].ntuple
113 nomDeLaClasse = 'MonWidgetSimpTuple'+str(num)
114 nomDuFichier = 'InterfaceQT4.monWidgetSimpTupleN'
117 _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
119 MonWidgetSimpTuple = getattr(_temp,nomDeLaClasse)
121 print ("Pas de Tuple de longueur : ", num)
122 # print ("Prevenir la maintenance ")
123 widget=MonWidgetSimpTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
125 elif self.item.waitComplex():
126 from InterfaceQT4.monWidgetSimpComplexe import MonWidgetSimpComplexe
127 widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
129 elif self.item.waitCo():
130 if len(self.item.getSdAvantDuBonType()) == 0 :
131 from InterfaceQT4.monWidgetUniqueSDCO import MonWidgetUniqueSDCO
132 widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
134 from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto
135 widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
136 elif self.item.waitAssd():
137 if len(self.item.getSdAvantDuBonType()) == 0 :
138 from InterfaceQT4.monWidgetVide import MonWidgetVide
139 widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
140 elif len(self.item.getSdAvantDuBonType()) < 4 :
141 from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButtonSD
142 widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
143 elif len(self.item.getSdAvantDuBonType()) < 7 :
144 from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
145 widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
147 from InterfaceQT4.monWidgetCB import MonWidgetCBSD
148 widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
150 elif self.item.waitSalome() and self.editor.salome:
151 from InterfaceQT4.monWidgetSimpSalome import MonWidgetSimpSalome
152 widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
154 elif self.item.waitTxm():
155 from InterfaceQT4.monWidgetSimpTxt import MonWidgetSimpTxt
156 widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
158 from InterfaceQT4.monWidgetSimpBase import MonWidgetSimpBase
159 widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
163 if maDefinition.intoSug != [] and maDefinition.intoSug != None:
164 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
165 from InterfaceQT4.monWidgetIntoSug import MonWidgetIntoSug
166 widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
168 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
169 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
170 #if maDefinition.into != [] and maDefinition.into != None:
171 # Attention pas fini --> on attend une liste de ASSD avec ordre
172 elif self.item.waitAssd() and self.item.isListSansOrdreNiDoublon():
173 listeAAfficher = self.item.getSdAvantDuBonType()
174 if len(listeAAfficher) == 0:
175 from InterfaceQT4.monWidgetVide import MonWidgetVide
176 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
178 from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
179 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
180 elif self.item.waitAssd() :
181 listeAAfficher = self.item.getSdAvantDuBonType()
182 mctype=maDefinition.type[0]
183 enable_salome_selection = self.editor.salome and \
184 (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
185 (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
186 if enable_salome_selection:
187 from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
188 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
189 elif len(listeAAfficher) == 0:
190 from InterfaceQT4.monWidgetVide import MonWidgetVide
191 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
192 elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
193 from InterfaceQT4.monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
194 widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
196 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
197 widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
198 elif self.item.waitTuple() :
199 if self.item.object.definition.fenetreIhm == 'Tableau' :
200 from InterfaceQT4.monWidgetTableau import MonWidgetTableau
201 widget=MonWidgetTableau(self,maDefinition,monNom,monObjet,parentQt,maCommande)
203 num=self.item.object.definition.type[0].ntuple
204 nomDeLaClasse = 'MonWidgetPlusieursTuple'+str(num)
205 nomDuFichier = 'InterfaceQT4.monWidgetPlusieursTupleN'
208 _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
209 MonWidgetPlusieursTuple = getattr(_temp,nomDeLaClasse)
211 # print ("Pas de Tuple de longueur : ", num)
212 # print ("Prevenir la maintenance ")
213 widget=MonWidgetPlusieursTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
215 elif self.item.hasInto():
216 if self.item.isListSansOrdreNiDoublon():
218 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
219 from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
220 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
222 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
223 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
225 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
226 from InterfaceQT4.monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
227 widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
229 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
230 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
232 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
233 from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
234 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
236 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
237 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
243 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
250 #-----------------------------------------------
252 # Methodes liees aux informations sur le Panel
253 # ou au mot-clef simple
255 #-----------------------------------------------
266 Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
267 ou s'il n'en attend pas (valeur de retour 0)
269 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
270 Dans le cas sans validateur, l'information est donnee par l'attribut max
271 de la definition du mot cle.
272 Dans le cas avec validateur, il faut combiner l'information precedente avec
273 celle issue de l'appel de la methode isList sur le validateur.On utilisera
274 l'operateur ET pour effectuer cette combinaison (AndVal).
277 min,max = self.getMinMax()
281 # Dans le cas avec validateurs, pour que le mot cle soit considere
282 # comme acceptant une liste, il faut que max soit superieur a 1
283 # ET que la methode isList du validateur retourne 1. Dans les autres cas
284 # on retournera 0 (n'attend pas de liste)
285 if self.definition.validators :
286 is_a_list= self.definition.validators.isList() * is_a_list
289 def isListSansOrdreNiDoublon(self):
290 if self.definition.homo=="SansOrdreNiDoublon" : return 1
296 Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
297 ou s'il n'en propose pas (valeur de retour 0)
299 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
300 Dans le cas sans validateur, l'information est donnee par l'attribut into
301 de la definition du mot cle.
302 Dans le cas avec validateurs, pour que le mot cle soit considere
303 comme proposant un choix, il faut que into soit present OU
304 que la methode hasInto du validateur retourne 1. Dans les autres cas
305 on retournera 0 (ne propose pas de choix)
308 if self.definition.into:
310 elif self.definition.validators :
311 has_an_into= self.definition.validators.hasInto()
314 def hasIntoSug(self):
315 if self.definition.intoSug: return 1
320 """ Retourne les valeurs min et max de la definition de object """
321 return self.object.getMinMax()
323 def getMultiplicite(self):
325 Retourne la multiplicite des valeurs affectees a l'objet
326 represente par l'item. Pour le moment retourne invariablement 1.
330 def getIntervalle(self):
332 Retourne le domaine de valeur attendu par l'objet represente
335 return self.object.getintervalle()
337 def getListeValeurs(self) :
338 """ Retourne la liste des valeurs de object """
339 valeurs=self.object.getListeValeurs()
341 if "R" in self.object.definition.type:
342 clef=self.object.getNomConcept()
343 if clef in self.appli.dict_reels:
344 if type(valeurs) == tuple:
347 if val in self.appli.dict_reels[clef]:
348 valeurs_reelles.append(self.appli.dict_reels[clef][val])
350 valeurs_reelles.append(val)
352 if valeurs in self.appli.dict_reels[clef]:
353 valeurs_reelles=self.appli.dict_reels[clef][valeurs]
354 valeurs=valeurs_reelles
359 def getListePossible(self,listeActuelle=[]):
360 if hasattr(self.definition.validators,'into'):
361 valeurspossibles = self.definition.validators.into
363 valeurspossibles = self.get_definition().into
365 if listeActuelle==[] : return valeurspossibles
367 #On ne garde que les items valides
369 if type(valeurspossibles) in (list,tuple) :
372 valeurspossibles=(valeurspossibles,)
373 for item in valeurspossibles:
374 encorevalide=self.valideItem(item)
376 listevalideitem.append(item)
378 #on ne garde que les choix possibles qui passent le test de valideListePartielle
380 for item in listevalideitem:
381 encorevalide=self.valideListePartielle(item,listeActuelle)
383 listevalideliste.append(item)
384 #print listevalideliste
385 return listevalideliste
387 def getListePossibleAvecSug(self,listeActuelle=[]):
388 if hasattr(self.definition,'intoSug'):
389 valeurspossibles = self.definition.intoSug
393 if listeActuelle==[] : return valeurspossibles
394 valeurspossibles = valeurspossibles+listeActuelle
396 #On ne garde que les items valides
398 if type(valeurspossibles) in (list,tuple) :
401 valeurspossibles=(valeurspossibles,)
402 for item in valeurspossibles:
403 encorevalide=self.valideItem(item)
405 listevalideitem.append(item)
407 #on ne garde que les choix possibles qui passent le test de valideListePartielle
409 for item in listevalideitem:
410 encorevalide=self.valideListePartielle(item,listeActuelle)
412 listevalideliste.append(item)
413 return listevalideliste
415 def getListeParamPossible(self):
417 l1,l2=self.jdc.getParametresFonctionsAvantEtape(self.getEtape())
418 for param in self.object.jdc.params:
419 if param.nom not in l1 : continue
420 encorevalide=self.valideItem(param.valeur)
422 type_param=param.valeur.__class__.__name__
423 for typ in self.definition.type:
425 liste_param.append(param)
426 if typ=='I' and type_param=='int':
427 liste_param.append(param)
428 if typ=='TXM' and type_param=='str':
429 liste_param.append(repr(param))
430 if ('grma' in repr(typ)) and type_param=='str':
431 liste_param.append(param.nom)
434 #--------------------------------------------------
436 # Methodes liees a la validite des valeurs saisies
438 #---------------------------------------------------
440 # valideListePartielle
441 # valideListeComplete
447 def valideItem(self,item):
449 La validation est realisee directement par l'objet
451 return self.object.valideItem(item)
453 def valideListePartielle(self,item,listecourante):
454 #On protege la liste en entree en la copiant
455 valeur=list(listecourante)
456 if item : valeur.append(item)
457 return self.object.validValeurPartielle(valeur)
459 def valideListeComplete (self,valeur):
460 return self.object.validValeur(valeur)
462 def infoErreurItem(self) :
464 if self.definition.validators :
465 commentaire=self.definition.validators.infoErreurItem()
470 if self.definition.validators :
471 commentaire=self.definition.validators.aide()
474 def infoErreurListe(self) :
476 if self.definition.validators :
477 commentaire=self.definition.validators.infoErreurListe()
480 def isInIntervalle(self,valeur):
482 Retourne 1 si la valeur est dans l'intervalle permis par
483 l'objet represente par l'item.
485 return self.valideItem(valeur)
488 valide=self.object.isValid()
491 #--------------------------------------------------
495 #---------------------------------------------------
499 # getSdAvantDuBonType
502 def getIconName(self):
503 if self.appli.maConfiguration.differencieSiDefaut and self.isValid():
504 if self.object.definition.defaut != None :
505 if self.object.valeur == self.object.definition.defaut : return "ast-green-dark-ball"
506 if self.object.definition.max > 1 and list(self.object.valeur) == list(self.object.definition.defaut) : return "ast-green-dark-ball"
507 return "ast-green-ball"
509 return "ast-green-ball"
510 elif self.object.isOblig():
511 return "ast-red-ball"
513 return "ast-yel-ball"
518 Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
521 text= self.object.getText()
522 if text == None : text=""
526 def setValeurCo(self,nom_co):
528 Affecte au MCS pointé par self l'objet de type CO et de nom nom_co
530 ret = self.object.setValeurCo(nom_co)
531 #print "setValeurCo",ret
534 def getSdAvantDuBonType(self):
536 Retourne la liste des noms des SD présentes avant l'étape qui contient
537 le MCS pointé par self et du type requis par ce MCS
539 a=self.object.etape.parent.getSdAvantDuBonType(self.object.etape,self.object.definition.type)
542 def getSdAvantDuBonTypePourTypeDeBase(self):
543 a=self.object.jdc.getSdAvantDuBonTypePourTypeDe_Base(self.object.etape,"LASSD")
548 def deleteValeurCo(self,valeur=None):
550 Supprime la valeur du mot cle (de type CO)
551 il faut propager la destruction aux autres etapes
553 if not valeur : valeur=self.object.valeur
554 # XXX faut il vraiment appeler delSdprod ???
555 #self.object.etape.parent.delSdprod(valeur)
556 self.object.etape.parent.deleteConcept(valeur)
558 #-----------------------------------------------
560 # Methodes liees au type de l objet attendu
562 #-----------------------------------------------
572 Méthode booléenne qui retourne 1 si l'objet pointé par self
573 attend un objet de type ASSD qui n'existe pas encore (type CO()),
576 return self.object.waitCo()
578 def waitFichier(self):
579 maDefinition=self.object.definition
581 if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
588 Méthode booléenne qui retourne 1 si l'objet pointé par self
589 attend un objet GEOM, 0 sinon
591 return self.object.waitGeom()
594 return self.object.waitTxm()
597 def waitComplex(self):
598 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
599 attend un complexe, 0 sinon """
600 if 'C' in self.object.definition.type:
606 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
607 attend un réel, 0 sinon """
608 if 'R' in self.object.definition.type:
613 def waitTuple(self) :
614 return self.object.waitTuple()
617 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
618 attend un réel, 0 sinon """
619 if 'DateHHMMAAAA' in self.object.definition.type:
625 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
626 attend un réel, 0 sinon """
627 if 'HeureHHMMSS' in self.object.definition.type:
635 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
636 attend un Tuple, 0 sinon """
637 for ss_type in self.object.definition.type:
638 if repr(ss_type).find('Tuple') != -1 :
642 def waitMatrice(self):
643 """ Méthode booléenne qui retourne 1 si l'objet pointé par self
644 attend un Tuple, 0 sinon """
645 for ss_type in self.object.definition.type:
646 if repr(ss_type).find('Matrice') != -1 :
651 """Méthode booléenne qui retourne 1 si l'objet pointé par self
652 attend un objet de type ASSD ou dérivé, 0 sinon """
653 return self.object.waitAssd()
655 def waitAssdOrTypeBase(self) :
657 if len(self.object.definition.type) > 1 :
660 if 'I' in self.object.definition.type :
664 def waitSalome(self):
665 monType = self.object.definition.type[0]
666 if 'grma' in repr(monType) : return True
667 if 'grno' in repr(monType) : return True
669 if issubclass(monType, SalomeEntry) : return True
676 Retourne le type de valeur attendu par l'objet représenté par l'item.
678 return self.object.getType()
680 #-----------------------------------------------------
682 # Methodes liees a l evaluation de la valeur saisie
684 #-----------------------------------------------------
690 def evalValeur(self,valeur):
691 """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
692 - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
693 - retourne 'valeur' (chaine de caracteres) sinon
695 newvaleur=self.evalVal(valeur)
699 def evalValeurItem(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 "evalValeurItem",valeur
706 if valeur==None or valeur == "" :
710 valeurinter = self.traiteReel(valeur)
711 if valeurinter != None :
712 valeurretour,validite= self.object.evalValeur(valeurinter)
714 valeurretour,validite= self.object.evalValeur(valeur)
715 elif self.waitGeom():
716 valeurretour,validite = valeur,1
718 valeurretour,validite= self.object.evalValeur(valeur)
719 #print "evalValeurItem",valeurretour,validite
722 if (type(valeur) == bytes or type(valeur) == str )and self.object.waitTxm():
723 essai_valeur="'" + valeur + "'"
724 valeurretour,validite= self.object.evalValeur(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.evalValeur(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.waitTxm() :
741 if type(valeurretour) != bytes:
742 valeurretour=str(valeur)
744 return valeurretour,validite
746 def isCO(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 typeSDProd)
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 type(valeur) is not object:return 0
762 if valeur.__class__.__name__ == 'CO':return 1
765 def isParam(self,valeur) :
766 for param in self.jdc.params:
767 if (repr(param) == valeur):
771 def traiteReel(self,valeur):
773 Cette fonction a pour but de rajouter le '.' en fin de chaine pour un réel
774 ou de détecter si on fait référence a un concept produit par DEFI_VALEUR
777 valeur = valeur.strip()
778 liste_reels = self.getSdAvantDuBonType()
779 if valeur in liste_reels:
781 if len(valeur) >= 3 :
782 if valeur[0:4] == 'EVAL' :
783 # on a trouvé un EVAL --> on retourne directement la valeur
785 if valeur.find('.') == -1 :
786 # aucun '.' n'a été trouvé dans valeur --> on en rajoute un a la fin
787 if (self.isParam(valeur)):
790 if valeur.find('e') != -1:
791 # Notation scientifique ?
804 treeitem = SIMPTreeItem