Salome HOME
premiere version
[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 import string
24
25 # Modules Eficas
26 from Noyau import N_MCCOMPO
27 from Validation import V_MCCOMPO
28 from Extensions.i18n import tr
29
30 class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO):
31    """
32    """
33    nature = "MCNUPLET"
34    txt_nat="Nuplet : "
35
36    def __init__(self,val,definition,nom,parent):
37       # val contient la valeur initial du nuplet
38       self.val = val
39       if val == None: self.val=()
40       self.definition=definition
41       self.nom=nom
42       self.parent = parent
43       # GETVAL affecte la valeur par defaut si necessaire
44       self.valeur=self.GETVAL(self.val)
45       if parent :
46          self.jdc = self.parent.jdc
47          self.niveau = self.parent.niveau
48          self.etape = self.parent.etape
49       else:
50          # Le mot cle a été créé sans parent
51          self.jdc = None
52          self.niveau = None
53          self.etape = None
54       self.state = 'undetermined'
55       self.actif=1
56       self.mc_liste=self.build_mc()
57
58    def build_mc(self):
59       """ 
60           Construit la liste des sous-entites de MCNUPLET
61           à partir de la liste des arguments (valeur)
62       """
63       args = self.valeur
64       if args ==None : args =()
65       mc_liste=[]
66
67       # on crée les sous entites du NUPLET a partir des valeurs initiales
68       k=0
69       for v in self.definition.entites:
70         if k < len(args):
71           val=args[k]
72         else:
73           val=None
74         objet=v(val=val,nom=`k`,parent=self)
75         if hasattr(objet.definition,'position'):
76           if objet.definition.position == 'global' :
77             self.append_mc_global(objet)
78           #XXX et global_jdc ??
79         mc_liste.append(objet)
80         k=k+1
81       # Un nuplet n'a pas de mots inconnus
82       self.reste_val={}
83       return mc_liste
84
85    def isvalid(self,cr='non'):
86       """
87           Indique si self (MCNUPLET) est un objet valide ou non : retourne 1 si oui, 0 sinon
88       """
89       if self.state == 'unchanged' :
90         return self.valid
91       else:
92         valid = 1
93         if hasattr(self,'valid'):
94           old_valid = self.valid
95         else:
96           old_valid = None
97         for child in self.mc_liste :
98           if not child.isvalid():
99             valid = 0
100             break
101         if len(self.mc_liste) != len(self.definition.entites):
102           valid=0
103           if cr == 'oui' :
104             self.cr.fatal(string.join(("Nuplet : ",self.nom,tr("Longueur incorrecte"))))
105         self.valid = valid
106         self.state = 'unchanged'
107         if old_valid:
108           if old_valid != self.valid : self.init_modif_up()
109         return self.valid
110
111    def __getitem__(self,key):
112       """
113           Retourne le key ème élément du nuplet
114       """
115       # Un nuplet est toujours une liste de mots cles simples
116       # On retourne donc la valeur
117       return self.mc_liste[key].valeur
118
119    def __str__(self):
120       """
121            Retourne une représentation du nuplet sous forme de chaine
122            de caractères
123       """
124       s='('
125       for e in self.mc_liste:
126         s=s + str(e.valeur) + ','
127       return s + ')'
128
129    def __repr__(self):
130       """
131            Retourne une représentation du nuplet sous forme de chaine
132            de caractères
133       """
134       s='('
135       for e in self.mc_liste:
136         s=s + str(e.valeur) + ','
137       return s + ')'
138
139    def get_regles(self):
140       """
141          Retourne la liste des règles attachées au nuplet
142       """
143       return []
144
145    def verif_condition_bloc(self):
146       """
147           Vérifie s'il y a des blocs sous le nuplet et retourne 
148           les blocs en question
149       """
150       # Il n y a pas de BLOCs sous un NUPLET
151       return [],[]
152
153    def isrepetable(self):
154       """ 
155           Indique si le NUPLET peut etre répété.
156           Retourne 1 si c'est le cas.
157           Retourne 0 dans le cas contraire.
158           L'information est donnée par le catalogue, cad la définition de self
159       """
160       if self.definition.min != self.definition.max :
161         return 1
162       else :
163         return 0
164
165    def makeobjet(self):
166       return self.definition(val = None, nom = self.nom,parent = self.parent)
167
168    def get_valeur(self):
169       """
170           Cette méthode doit retourner la valeur de l'objet. Elle est utilisée par 
171           cree_dict_valeurs pour construire un dictionnaire contenant les mots clés 
172           d'une étape.
173           Dans le cas d'un nuplet, on retournera comme valeur une liste des valeurs
174           des mots clé simples contenus.
175       """
176       l=[]
177       for v in self.mc_liste:
178          l.append(v.valeur)
179       return l
180
181    def get_val(self):
182       """
183           Une autre méthode qui retourne une "autre" valeur du mot clé facteur.
184           Elle est utilisée par la méthode get_mocle
185       """
186       l=[]
187       for v in self.mc_liste:
188          l.append(v.valeur)
189       return l
190
191    def isoblig(self):
192       return self.definition.statut=='o'
193
194    def get_fr(self):
195      """
196         Retourne le texte d'aide dans la langue choisie
197      """
198      try :
199         return getattr(self.definition,self.jdc.lang)
200      except:
201         return ''
202
203    def cree_dict_valeurs(self,liste=[],condition=0):
204      dico={}
205      return dico
206
207    def update_condition_bloc(self):
208      """
209        Realise l'update des blocs conditionnels fils de self
210        et propage au parent (rien a faire pour nuplet)
211      """
212
213
214
215
216