]> SALOME platform Git repositories - tools/eficas.git/blob - Extensions/mcnuplet.py
Salome HOME
update version
[tools/eficas.git] / Extensions / mcnuplet.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 """
21 """
22 # Modules Python
23 from __future__ import absolute_import
24 try :
25     from builtins import str
26 except : pass
27
28
29 # Modules Eficas
30 from Noyau import N_MCCOMPO
31 from Validation import V_MCCOMPO
32 from Extensions.i18n import tr
33
34 class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
35     """
36     """
37     nature = "MCNUPLET"
38     txt_nat="Nuplet : "
39
40     def __init__(self,val,definition,nom,parent):
41         # val contient la valeur initial du nuplet
42         self.val = val
43         if val == None: self.val=()
44         self.definition=definition
45         self.nom=nom
46         self.parent = parent
47         # getValeurEffective affecte la valeur par defaut si necessaire
48         self.valeur=self.getValeurEffective(self.val)
49         if parent :
50             self.jdc = self.parent.jdc
51             self.niveau = self.parent.niveau
52             self.etape = self.parent.etape
53         else:
54             # Le mot cle a ete cree sans parent
55             self.jdc = None
56             self.niveau = None
57             self.etape = None
58         self.state = 'undetermined'
59         self.actif=1
60         self.mcListe=self.buildMc()
61
62     def buildMc(self):
63         """
64             Construit la liste des sous-entites de MCNUPLET
65             a partir de la liste des arguments (valeur)
66         """
67         args = self.valeur
68         if args ==None : args =()
69         mcListe=[]
70
71         # on cree les sous entites du NUPLET a partir des valeurs initiales
72         k=0
73         for v in self.definition.entites:
74             if k < len(args):
75                 val=args[k]
76             else:
77                 val=None
78             objet=v(val=val,nom=repr(k),parent=self)
79             if hasattr(objet.definition,'position'):
80                 if objet.definition.position == 'global' :
81                     self.append_mc_global(objet)
82                 #XXX et global_jdc ??
83             mcListe.append(objet)
84             k=k+1
85         # Un nuplet n'a pas de mots inconnus
86         self.reste_val={}
87         return mcListe
88
89     def isValid(self,cr='non'):
90         """
91             Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
92         """
93         if self.state == 'unchanged' :
94             return self.valid
95         else:
96             valid = 1
97             if hasattr(self,'valid'):
98                 old_valid = self.valid
99             else:
100                 old_valid = None
101             for child in self.mcListe :
102                 if not child.isValid():
103                     valid = 0
104                     break
105             if len(self.mcListe) != len(self.definition.entites):
106                 valid=0
107                 if cr == 'oui' :
108                     self.cr.fatal(''.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
109             self.valid = valid
110             self.state = 'unchanged'
111             if old_valid:
112                 if old_valid != self.valid : self.initModifUp()
113             return self.valid
114
115     def __getitem__(self,key):
116         """
117             Retourne le key eme element du nuplet
118         """
119         # Un nuplet est toujours une liste de mots cles simples
120         # On retourne donc la valeur
121         return self.mcListe[key].valeur
122
123     def __str__(self):
124         """
125              Retourne une representation du nuplet sous forme de chaine
126              de caracteres
127         """
128         s='('
129         for e in self.mcListe:
130             s=s + str(e.valeur) + ','
131         return s + ')'
132
133     def __repr__(self):
134         """
135              Retourne une representation du nuplet sous forme de chaine
136              de caracteres
137         """
138         s='('
139         for e in self.mcListe:
140             s=s + str(e.valeur) + ','
141         return s + ')'
142
143     def getRegles(self):
144         """
145            Retourne la liste des regles attachees au nuplet
146         """
147         return []
148
149     def verifConditionBloc(self):
150         """
151             Verifie s'il y a des blocs sous le nuplet et retourne
152             les blocs en question
153         """
154         # Il n y a pas de BLOCs sous un NUPLET
155         return [],[]
156
157     def isRepetable(self):
158         """
159             Indique si le NUPLET peut etre repete.
160             Retourne 1 si c'est le cas.
161             Retourne 0 dans le cas contraire.
162             L'information est donnee par le catalogue, cad la definition de self
163         """
164         if self.definition.min != self.definition.max :
165             return 1
166         else :
167             return 0
168
169     def makeobjet(self):
170         return self.definition(val = None, nom = self.nom,parent = self.parent)
171
172     def getValeur(self):
173         """
174             Cette methode doit retourner la valeur de l'objet. Elle est utilisee par
175             creeDictValeurs pour construire un dictionnaire contenant les mots cles
176             d'une etape.
177             Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
178             des mots cle simples contenus.
179         """
180         l=[]
181         for v in self.mcListe:
182             l.append(v.valeur)
183         return l
184
185     def getVal(self):
186         """
187             Une autre methode qui retourne une "autre" valeur du mot cle facteur.
188             Elle est utilisee par la methode getMocle
189         """
190         l=[]
191         for v in self.mcListe:
192             l.append(v.valeur)
193         return l
194
195     def isOblig(self):
196         return self.definition.statut=='o'
197
198     def getFr(self):
199         """
200            Retourne le texte d'aide dans la langue choisie
201         """
202         try :
203             return getattr(self.definition,self.jdc.lang)
204         except:
205             return ''
206
207     def creeDictValeurs(self,liste=[],condition=0):
208         dico={}
209         return dico
210
211     def updateConditionBloc(self):
212         """
213           Realise l'update des blocs conditionnels fils de self
214           et propage au parent (rien a faire pour nuplet)
215         """