1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 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
38 from Accas import UserASSD
40 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
42 def createPopUpMenu(self):
43 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
46 def getPanelGroupe(self,parentQt,maCommande):
47 #print (self,self.item.nom, )
48 maDefinition=self.item.get_definition()
49 monObjet=self.item.object
53 if monObjet.isInformation():
54 from InterfaceQT4.monWidgetInfo import MonWidgetInfo
55 widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
60 # Attention l ordre des if est important
61 # Attention il faut gerer les blocs et les facteurs
62 # a gerer comme dans composimp
63 # Gestion des matrices
64 if self.item.waitMatrice ():
65 from InterfaceQT4.monWidgetMatrice import MonWidgetMatrice
66 widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
70 #print "____________________________", monNom, self.item.waitCo()
71 #print "____________________________", monNom, self.item.waitAssd()
72 # Gestion d'une seule valeur (eventuellement un tuple ou un complexe)
73 if maDefinition.into != [] and maDefinition.into != None:
74 if type(maDefinition.into) ==types.FunctionType : monInto=maDefinition.into()
75 else : monInto = maDefinition.into
78 if maDefinition.max == 1 :
81 if maDefinition.intoSug != [] and maDefinition.intoSug != None:
82 from InterfaceQT4.monWidgetCBIntoSug import MonWidgetCBIntoSug
83 widget=MonWidgetCBIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
84 elif maDefinition.into != [] and maDefinition.into != None:
85 if maDefinition.fenetreIhm=='menuDeroulant' :
86 from InterfaceQT4.monWidgetCB import MonWidgetCB
87 widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
88 elif len(monInto) < 4 :
89 from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButton
90 widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
91 elif len(monInto) < 7 :
92 from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButton
93 widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
95 from InterfaceQT4.monWidgetCB import MonWidgetCB
96 widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
98 elif self.item.waitBool() :
99 from InterfaceQT4.monWidgetSimpBool import MonWidgetSimpBool
100 widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
101 elif self.item.waitFichier():
102 from InterfaceQT4.monWidgetSimpFichier import MonWidgetSimpFichier
103 widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
106 elif self.item.waitDate():
107 from InterfaceQT4.monWidgetDate import MonWidgetDate
108 widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
109 elif self.item.waitHeure():
110 from InterfaceQT4.monWidgetHeure import MonWidgetHeure
111 widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
113 elif self.item.waitTuple() :
114 num=self.item.object.definition.type[0].ntuple
115 nomDeLaClasse = 'MonWidgetSimpTuple'+str(num)
116 nomDuFichier = 'InterfaceQT4.monWidgetSimpTupleN'
119 _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
121 MonWidgetSimpTuple = getattr(_temp,nomDeLaClasse)
123 print ("Pas de Tuple de longueur : ", num)
124 # print ("Prevenir la maintenance ")
125 widget=MonWidgetSimpTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
127 elif self.item.waitComplex():
128 from InterfaceQT4.monWidgetSimpComplexe import MonWidgetSimpComplexe
129 widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
131 elif self.item.waitCo():
132 if len(self.item.getSdAvantDuBonType()) == 0 :
133 from InterfaceQT4.monWidgetUniqueSDCO import MonWidgetUniqueSDCO
134 widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
136 from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto
137 widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
138 elif self.item.waitAssd():
140 # PN - pour ne pas appeller trop souvent self.item.getSdAvantDuBonType()
141 if not (self.item.waitUserAssdEnCreation()) : maListe=self.item.getSdAvantDuBonType()
142 if self.item.waitUserAssdEnCreation() :
143 from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeUserAssd
144 widget=MonWidgetCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
145 #elif len(self.item.getSdAvantDuBonType()) == 0 :
146 elif len(maListe) == 0 :
147 from InterfaceQT4.monWidgetVide import MonWidgetVide
148 widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
149 #elif len(self.item.getSdAvantDuBonType()) < 4 :
150 elif len(maListe) < 4 :
151 from InterfaceQT4.monWidgetRadioButton import MonWidgetRadioButtonSD
152 widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
153 #elif len(self.item.getSdAvantDuBonType()) < 7 :
154 elif len(maListe) < 7 :
155 from InterfaceQT4.monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
156 widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
158 from InterfaceQT4.monWidgetCB import MonWidgetCBSD
159 widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
161 elif self.item.waitSalome() and self.editor.salome:
162 from InterfaceQT4.monWidgetSimpSalome import MonWidgetSimpSalome
163 widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
165 elif self.item.waitTxm():
166 from InterfaceQT4.monWidgetSimpTxt import MonWidgetSimpTxt
167 widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
169 from InterfaceQT4.monWidgetSimpBase import MonWidgetSimpBase
170 widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
174 if maDefinition.intoSug != [] and maDefinition.intoSug != None:
175 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
176 from InterfaceQT4.monWidgetIntoSug import MonWidgetIntoSug
177 widget=MonWidgetIntoSug(self,maDefinition,monNom,monObjet,parentQt,maCommande)
179 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
180 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
181 #if maDefinition.into != [] and maDefinition.into != None:
182 # Attention pas fini --> on attend une liste de ASSD avec ordre
183 elif self.item.waitAssd() and self.item.isListSansOrdreNiDoublon():
184 listeAAfficher = self.item.getSdAvantDuBonType()
185 if len(listeAAfficher) == 0:
186 from InterfaceQT4.monWidgetVide import MonWidgetVide
187 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
189 from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
190 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
191 elif self.item.waitAssd() and not self.item.waitUserAssdEnCreation() :
192 listeAAfficher = self.item.getSdAvantDuBonType()
193 #if not (self.item.waitUserAssdEnCreation()) : maListe=self.item.getSdAvantDuBonType()
194 mctype=maDefinition.type[0]
195 enable_salome_selection = self.editor.salome and \
196 (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
197 (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
198 if enable_salome_selection:
199 from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
200 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
201 elif len(listeAAfficher) == 0:
202 from InterfaceQT4.monWidgetVide import MonWidgetVide
203 widget = MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
204 elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
205 from InterfaceQT4.monWidgetPlusieursASSDIntoOrdonne import MonWidgetPlusieursASSDIntoOrdonne
206 widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
208 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlieASSD
209 widget=MonWidgetPlusieursPlieASSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
210 elif self.item.waitTuple() :
211 if self.item.object.definition.fenetreIhm == 'Tableau' :
212 from InterfaceQT4.monWidgetTableau import MonWidgetTableau
213 widget=MonWidgetTableau(self,maDefinition,monNom,monObjet,parentQt,maCommande)
215 num=self.item.object.definition.type[0].ntuple
216 nomDeLaClasse = 'MonWidgetPlusieursTuple'+str(num)
217 nomDuFichier = 'InterfaceQT4.monWidgetPlusieursTupleN'
220 _temp = __import__(nomDuFichier, globals(), locals(), [nomDeLaClasse], 0)
221 MonWidgetPlusieursTuple = getattr(_temp,nomDeLaClasse)
223 # print ("Pas de Tuple de longueur : ", num)
224 # print ("Prevenir la maintenance ")
225 widget=MonWidgetPlusieursTuple(self,maDefinition,monNom,monObjet,parentQt,maCommande)
227 elif self.item.hasInto():
228 if self.item.isListSansOrdreNiDoublon():
230 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
231 from InterfaceQT4.monWidgetPlusieursInto import MonWidgetPlusieursInto
232 widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
234 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
235 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
237 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
238 from InterfaceQT4.monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
239 widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
241 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
242 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
244 if self.item.waitUserAssdEnCreation() :
245 from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeListeUserAssd
246 widget=MonWidgetCreeListeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande)
247 elif self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) :
248 from InterfaceQT4.monWidgetPlusieursBase import MonWidgetPlusieursBase
249 widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
251 from InterfaceQT4.monWidgetPlusieursPlie import MonWidgetPlusieursPlie
252 widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande)
258 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
265 #-----------------------------------------------
267 # Methodes liees aux informations sur le Panel
268 # ou au mot-clef simple
270 #-----------------------------------------------
281 Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
282 ou s'il n'en attend pas (valeur de retour 0)
284 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
285 Dans le cas sans validateur, l'information est donnee par l'attribut max
286 de la definition du mot cle.
287 Dans le cas avec validateur, il faut combiner l'information precedente avec
288 celle issue de l'appel de la methode isList sur le validateur.On utilisera
289 l'operateur ET pour effectuer cette combinaison (AndVal).
292 min,max = self.getMinMax()
296 # Dans le cas avec validateurs, pour que le mot cle soit considere
297 # comme acceptant une liste, il faut que max soit superieur a 1
298 # ET que la methode isList du validateur retourne 1. Dans les autres cas
299 # on retournera 0 (n'attend pas de liste)
300 if self.definition.validators :
301 is_a_list= self.definition.validators.isList() * is_a_list
304 def isListSansOrdreNiDoublon(self):
305 if self.definition.homo=="SansOrdreNiDoublon" : return 1
311 Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
312 ou s'il n'en propose pas (valeur de retour 0)
314 Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
315 Dans le cas sans validateur, l'information est donnee par l'attribut into
316 de la definition du mot cle.
317 Dans le cas avec validateurs, pour que le mot cle soit considere
318 comme proposant un choix, il faut que into soit present OU
319 que la methode hasInto du validateur retourne 1. Dans les autres cas
320 on retournera 0 (ne propose pas de choix)
323 if self.definition.into:
325 elif self.definition.validators :
326 has_an_into= self.definition.validators.hasInto()
329 def hasIntoSug(self):
330 if self.definition.intoSug: return 1
335 """ Retourne les valeurs min et max de la definition de object """
336 return self.object.getMinMax()
338 def getMultiplicite(self):
340 Retourne la multiplicite des valeurs affectees a l'objet
341 represente par l'item. Pour le moment retourne invariablement 1.
345 def getIntervalle(self):
347 Retourne le domaine de valeur attendu par l'objet represente
350 return self.object.getintervalle()
352 def getListeValeurs(self) :
353 """ Retourne la liste des valeurs de object """
354 valeurs=self.object.getListeValeurs()
356 if "R" in self.object.definition.type:
357 clef=self.object.getNomConcept()
358 if clef in self.appliEficas.dict_reels:
359 if type(valeurs) == tuple:
362 if val in self.appliEficas.dict_reels[clef]:
363 valeurs_reelles.append(self.appliEficas.dict_reels[clef][val])
365 valeurs_reelles.append(val)
367 if valeurs in self.appliEficas.dict_reels[clef]:
368 valeurs_reelles=self.appliEficas.dict_reels[clef][valeurs]
369 valeurs=valeurs_reelles
374 def getListePossible(self,listeActuelle=[]):
375 if hasattr(self.definition.validators,'into'):
376 valeurspossibles = self.definition.validators.into
378 valeurspossibles = self.get_definition().into
380 if listeActuelle==[] : return valeurspossibles
382 #On ne garde que les items valides
384 if type(valeurspossibles) in (list,tuple) :
387 valeurspossibles=(valeurspossibles,)
388 for item in valeurspossibles:
389 encorevalide=self.valideItem(item)
391 listevalideitem.append(item)
393 #on ne garde que les choix possibles qui passent le test de valideListePartielle
395 for item in listevalideitem:
396 encorevalide=self.valideListePartielle(item,listeActuelle)
398 listevalideliste.append(item)
399 #print listevalideliste
400 return listevalideliste
402 def getListePossibleAvecSug(self,listeActuelle=[]):
403 if hasattr(self.definition,'intoSug'):
404 valeurspossibles = self.definition.intoSug
408 if listeActuelle==[] : return valeurspossibles
409 valeurspossibles = valeurspossibles+listeActuelle
411 #On ne garde que les items valides
413 if type(valeurspossibles) in (list,tuple) :
416 valeurspossibles=(valeurspossibles,)
417 for item in valeurspossibles:
418 encorevalide=self.valideItem(item)
420 listevalideitem.append(item)
422 #on ne garde que les choix possibles qui passent le test de valideListePartielle
424 for item in listevalideitem:
425 encorevalide=self.valideListePartielle(item,listeActuelle)
427 listevalideliste.append(item)
428 return listevalideliste
430 def getListeParamPossible(self):
432 l1,l2=self.jdc.getParametresFonctionsAvantEtape(self.getEtape())
433 for param in self.object.jdc.params:
434 if param.nom not in l1 : continue
435 encorevalide=self.valideItem(param.valeur)
437 type_param=param.valeur.__class__.__name__
438 for typ in self.definition.type:
440 liste_param.append(param)
441 if typ=='I' and type_param=='int':
442 liste_param.append(param)
443 if typ=='TXM' and type_param=='str':
444 liste_param.append(repr(param))
445 if ('grma' in repr(typ)) and type_param=='str':
446 liste_param.append(param.nom)
449 #--------------------------------------------------
451 # Methodes liees a la validite des valeurs saisies
453 #---------------------------------------------------
455 # valideListePartielle
456 # valideListeComplete
462 def valideItem(self,item):
464 La validation est realisee directement par l'objet
466 return self.object.valideItem(item)
468 def valideListePartielle(self,item,listecourante):
469 #On protege la liste en entree en la copiant
470 valeur=list(listecourante)
471 if item : valeur.append(item)
472 return self.object.validValeurPartielle(valeur)
474 def valideListeComplete (self,valeur):
475 return self.object.validValeur(valeur)
477 def infoErreurItem(self) :
479 if self.definition.validators :
480 commentaire=self.definition.validators.infoErreurItem()
485 if self.definition.validators :
486 commentaire=self.definition.validators.aide()
489 def infoErreurListe(self) :
491 if self.definition.validators :
492 commentaire=self.definition.validators.infoErreurListe()
495 def isInIntervalle(self,valeur):
497 Retourne 1 si la valeur est dans l'intervalle permis par
498 l'objet represente par l'item.
500 return self.valideItem(valeur)
503 valide=self.object.isValid()
506 #--------------------------------------------------
510 #---------------------------------------------------
514 # getSdAvantDuBonType
517 def getIconName(self):
518 if self.appliEficas.maConfiguration.differencieSiDefaut and self.isValid():
519 if self.object.definition.defaut != None :
520 if self.object.valeur == self.object.definition.defaut : return "ast-green-dark-ball"
521 if self.object.definition.max > 1 and list(self.object.valeur) == list(self.object.definition.defaut) : return "ast-green-dark-ball"
522 return "ast-green-ball"
524 return "ast-green-ball"
525 elif self.object.isOblig():
526 return "ast-red-ball"
528 return "ast-yel-ball"
533 Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
536 text= self.object.getText()
537 if text == None : text=""
541 def setValeurCo(self,nomCo):
543 Affecte au MCS pointe par self l'objet de type CO et de nom nom_co
545 ret = self.object.setValeurCo(nomCo)
546 #print "setValeurCo",ret
549 def getSdAvantDuBonType(self):
551 Retourne la liste des noms des SD presentes avant l'etape qui contient
552 le MCS pointe par self et du type requis par ce MCS
554 a=self.object.etape.parent.getSdAvantDuBonType(self.object.etape,self.object.definition.type)
555 if self.waitUserAssd() : l=self.jdc.getSdCreeParObjet(self.object.definition.type)
559 def getSdAvantDuBonTypePourTypeDeBase(self):
560 a=self.object.jdc.getSdAvantDuBonTypePourTypeDe_Base(self.object.etape,"LASSD")
565 def deleteValeurCo(self,valeur=None):
567 Supprime la valeur du mot cle (de type CO)
568 il faut propager la destruction aux autres etapes
570 if not valeur : valeur=self.object.valeur
571 # XXX faut il vraiment appeler delSdprod ???
572 #self.object.etape.parent.delSdprod(valeur)
573 self.object.etape.parent.deleteConcept(valeur)
575 #-----------------------------------------------
577 # Methodes liees au type de l objet attendu
579 #-----------------------------------------------
589 Methode booleenne qui retourne 1 si l'objet pointe par self
590 attend un objet de type ASSD qui n'existe pas encore (type CO()),
593 return self.object.waitCo()
595 def waitFichier(self):
596 maDefinition=self.object.definition
598 if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
605 Methode booleenne qui retourne 1 si l'objet pointe par self
606 attend un objet GEOM, 0 sinon
608 return self.object.waitGeom()
611 return self.object.waitTxm()
614 def waitComplex(self):
615 """ Methode booleenne qui retourne 1 si l'objet pointe par self
616 attend un complexe, 0 sinon """
617 if 'C' in self.object.definition.type:
623 """ Methode booleenne qui retourne 1 si l'objet pointe par self
624 attend un reel, 0 sinon """
625 if 'R' in self.object.definition.type:
630 def waitTuple(self) :
631 return self.object.waitTuple()
634 """ Methode booleenne qui retourne 1 si l'objet pointe par self
635 attend un reel, 0 sinon """
636 if 'DateHHMMAAAA' in self.object.definition.type:
642 """ Methode booleenne qui retourne 1 si l'objet pointe par self
643 attend un reel, 0 sinon """
644 if 'HeureHHMMSS' in self.object.definition.type:
652 """ Methode booleenne qui retourne 1 si l'objet pointe par self
653 attend un Tuple, 0 sinon """
654 for ss_type in self.object.definition.type:
655 if repr(ss_type).find('Tuple') != -1 :
659 def waitMatrice(self):
660 """ Methode booleenne qui retourne 1 si l'objet pointe par self
661 attend un Tuple, 0 sinon """
662 for ss_type in self.object.definition.type:
663 if repr(ss_type).find('Matrice') != -1 :
668 """Methode booleenne qui retourne 1 si l'objet pointe par self
669 attend un objet de type ASSD ou derive, 0 sinon """
670 return self.object.waitAssd()
672 def waitAssdOrTypeBase(self) :
674 if len(self.object.definition.type) > 1 :
677 if 'I' in self.object.definition.type :
681 def waitSalome(self):
682 monType = self.object.definition.type[0]
683 if 'grma' in repr(monType) : return True
684 if 'grno' in repr(monType) : return True
686 if issubclass(monType, SalomeEntry) : return True
693 Retourne le type de valeur attendu par l'objet represente par l'item.
695 return self.object.getType()
697 #-----------------------------------------------------
699 # Methodes liees a l evaluation de la valeur saisie
701 #-----------------------------------------------------
707 def evalValeur(self,valeur):
708 """ Lance l'interpretation de 'valeur' (chaine de caracteres) comme valeur de self :
709 - retourne l'objet associe si on a pu interpreter (entier, reel, ASSD,...)
710 - retourne 'valeur' (chaine de caracteres) sinon
712 newvaleur=self.evalVal(valeur)
716 def evalValeurItem(self,valeur):
717 """ Lance l'interpretation de 'valeur' qui doit ne pas etre un tuple
718 - va retourner la valeur de retour et la validite
719 selon le type de l objet attendu
720 - traite les reels et les parametres
722 #print "evalValeurItem",valeur
723 if valeur==None or valeur == "" :
727 valeurinter = self.traiteReel(valeur)
728 if valeurinter != None :
729 valeurretour,validite= self.object.evalValeur(valeurinter)
731 valeurretour,validite= self.object.evalValeur(valeur)
732 elif self.waitGeom():
733 valeurretour,validite = valeur,1
735 valeurretour,validite= self.object.evalValeur(valeur)
738 if (type(valeur) == bytes or type(valeur) == str )and self.object.waitTxm():
739 essai_valeur="'" + valeur + "'"
740 valeurretour,validite= self.object.evalValeur(essai_valeur)
742 if hasattr(valeurretour,'__class__'):
743 #if valeurretour.__class__.__name__ in ('PARAMETRE','PARAMETRE_EVAL'):
744 if valeurretour.__class__.__name__ in ('PARAMETRE',):
748 # CCAR : il ne faut pas essayer de creer un concept
749 # il faut simplement en chercher un existant ce qui a du etre fait par self.object.evalValeur(valeur)
751 #valeurretour=Accas.CO(valeur)
755 # on est dans le cas ou on a evalue et ou on n'aurait pas du
756 if self.object.waitTxm() :
757 if type(valeurretour) != bytes:
758 valeurretour=str(valeur)
760 return valeurretour,validite
762 def isCO(self,valeur=None):
764 Indique si valeur est un concept produit de la macro
765 Cette methode n'a de sens que pour un MCSIMP d'une MACRO
766 Si valeur vaut None on teste la valeur du mot cle
768 # Pour savoir si un concept est un nouveau concept de macro
769 # on regarde s'il est present dans l'attribut sdprods de l'etape
770 # ou si son nom de classe est CO.
771 # Il faut faire les 2 tests car une macro non valide peut etre
772 # dans un etat pas tres catholique avec des CO pas encore types
773 # et donc pas dans sdprods (resultat d'une exception dans typeSDProd)
774 if not valeur:valeur=self.object.valeur
775 if valeur in self.object.etape.sdprods:return 1
776 #if type(valeur) is not types.InstanceType:return 0
777 if type(valeur) is not object:return 0
778 if valeur.__class__.__name__ == 'CO':return 1
781 def isParam(self,valeur) :
782 for param in self.jdc.params:
783 if (repr(param) == valeur):
787 def traiteReel(self,valeur):
789 Cette fonction a pour but de rajouter le '.' en fin de chaine pour un reel
790 ou de detecter si on fait reference a un concept produit par DEFI_VALEUR
793 valeur = valeur.strip()
794 liste_reels = self.getSdAvantDuBonType()
795 if valeur in liste_reels:
797 if len(valeur) >= 3 :
798 if valeur[0:4] == 'EVAL' :
799 # on a trouve un EVAL --> on retourne directement la valeur
801 if valeur.find('.') == -1 :
802 # aucun '.' n'a ete trouve dans valeur --> on en rajoute un a la fin
803 if (self.isParam(valeur)):
806 if valeur.find('e') != -1:
807 # Notation scientifique ?
820 treeitem = SIMPTreeItem