Salome HOME
d7eb0e12257c06bdb8ec82b87ffc0388c6329d42
[tools/eficas.git] / Extensions / mcnuplet.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   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       # GETVAL affecte la valeur par defaut si necessaire
48       self.valeur=self.GETVAL(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.mc_liste=self.build_mc()
61
62    def build_mc(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       mc_liste=[]
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         mc_liste.append(objet)
84         k=k+1
85       # Un nuplet n'a pas de mots inconnus
86       self.reste_val={}
87       return mc_liste
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.mc_liste :
102           if not child.isvalid():
103             valid = 0
104             break
105         if len(self.mc_liste) != 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.init_modif_up()
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.mc_liste[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.mc_liste:
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.mc_liste:
140         s=s + str(e.valeur) + ','
141       return s + ')'
142
143    def get_regles(self):
144       """
145          Retourne la liste des regles attachees au nuplet
146       """
147       return []
148
149    def verif_condition_bloc(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 get_valeur(self):
173       """
174           Cette methode doit retourner la valeur de l'objet. Elle est utilisee par 
175           cree_dict_valeurs 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.mc_liste:
182          l.append(v.valeur)
183       return l
184
185    def get_val(self):
186       """
187           Une autre methode qui retourne une "autre" valeur du mot cle facteur.
188           Elle est utilisee par la methode get_mocle
189       """
190       l=[]
191       for v in self.mc_liste:
192          l.append(v.valeur)
193       return l
194
195    def isoblig(self):
196       return self.definition.statut=='o'
197
198    def get_fr(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 cree_dict_valeurs(self,liste=[],condition=0):
208      dico={}
209      return dico
210
211    def update_condition_bloc(self):
212      """
213        Realise l'update des blocs conditionnels fils de self
214        et propage au parent (rien a faire pour nuplet)
215      """
216
217
218
219
220