1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 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
20 from __future__ import absolute_import
21 import types,traceback
22 from Extensions.i18n import tr
23 from Extensions.eficas_exception import EficasException
25 from . import CONNECTOR
30 Retourne 1 si self est une MCList (liste de mots-cles), 0 sinon (defaut)
34 def get_index(self,objet):
36 Retourne la position d'objet dans la liste self
38 return self.data.index(objet)
40 def ajout_possible(self):
42 Methode booleenne qui retourne 1 si on peut encore ajouter une occurrence
43 de l'element que contient self, 0 sinon
45 max = self.data[0].definition.max
46 if max == '**' or max == float('inf'):
54 def isrepetable(self):
56 Indique si l'objet est repetable.
57 Retourne 1 si le mot-cle facteur self peut etre repete
58 Retourne 0 dans le cas contraire
60 if self.data[0].definition.max > 1:
68 Une MCList n'est jamais obligatoire (meme si le MCFACT qu'elle represente l'est
70 return self.data[0].definition.statut=='o'
72 def suppentite(self,obj):
74 Supprime le mot cle facteur obj de la MCLIST
81 CONNECTOR.Emit(self,"supp",obj)
82 self.update_condition_bloc()
88 def addentite(self,obj,pos=None):
90 Ajoute le mot cle facteur obj a la MCLIST a la position pos
91 Retourne None si l'ajout est impossible
94 # on est en mode creation d'un motcle
95 raise EficasException(tr("traitement non-prevu"))
97 if not self.ajout_possible():
98 self.jdc.appli.affiche_alerte(tr("Erreur"),
99 tr("L'objet %s ne peut pas etre ajoute", obj.nom))
102 if self.nom != obj.nom:
108 # Traitement du copier coller seulement
109 # Les autres cas d'ajout sont traites dans MCFACT
111 obj.verif_existence_sd()
112 obj.reparent(self.parent)
117 CONNECTOR.Emit(self,"add",obj)
119 self.update_condition_bloc()
122 def liste_mc_presents(self):
125 def update_concept(self,sd):
126 for child in self.data :
127 child.update_concept(sd)
129 def delete_concept(self,sd):
133 Fonction : Mettre a jour les fils de l objet suite a la disparition
135 Seuls les mots cles simples MCSIMP font un traitement autre
136 que de transmettre aux fils
138 for child in self.data :
139 child.delete_concept(sd)
141 def replace_concept(self,old_sd,sd):
144 - old_sd=concept remplace
146 Fonction : Mettre a jour les fils de l objet suite au remplacement
149 for child in self.data :
150 child.replace_concept(old_sd,sd)
153 return self.data[0].definition.get_docu()
155 def get_liste_mc_inconnus(self):
157 Retourne la liste des mots-cles inconnus dans self
160 for mcfact in self.data :
161 if mcfact.isvalid() : continue
162 l_child = mcfact.get_liste_mc_inconnus()
169 def verif_condition_regles(self,liste_presents):
171 Retourne la liste des mots-cles a rajouter pour satisfaire les regles
172 en fonction de la liste des mots-cles presents
174 # Sans objet pour une liste de mots cles facteurs
177 def deep_update_condition_bloc(self):
179 Parcourt l'arborescence des mcobject et realise l'update
180 des blocs conditionnels par appel de la methode update_condition_bloc
182 #print "deep_update_condition_bloc",self
183 for mcfact in self.data :
184 mcfact.deep_update_condition_bloc()
186 def update_condition_bloc(self):
188 Propage la mise a jour des conditions au parent.
189 Une liste ne fait pas de traitement sur les conditions
191 if self.parent: self.parent.update_condition_bloc()
193 def verif_condition_bloc(self):
195 Evalue les conditions de tous les blocs fils possibles
196 (en fonction du catalogue donc de la definition) de self et
197 retourne deux listes :
198 - la premiere contient les noms des blocs a rajouter
199 - la seconde contient les noms des blocs a supprimer
201 # Sans objet pour une liste de mots cles facteurs (a voir !!!)
204 def init_modif(self):
206 Met l'etat de l'objet a modified et propage au parent
207 qui vaut None s'il n'existe pas
209 self.state = 'modified'
211 self.parent.init_modif()
215 Methode appelee apres qu'une modification a ete faite afin de declencher
216 d'eventuels traitements post-modification
218 #print "fin_modif",self
219 CONNECTOR.Emit(self,"valid")
221 self.parent.fin_modif()
223 def get_genealogie_precise(self):
225 return self.parent.get_genealogie_precise()
229 def get_genealogie(self):
231 Retourne la liste des noms des ascendants.
232 Un objet MCList n'est pas enregistre dans la genealogie.
233 XXX Meme si le MCFACT fils ne l'est pas lui non plus ????
236 return self.parent.get_genealogie()
240 def get_liste_mc_ordonnee_brute(self,liste,dico):
242 Retourne la liste ordonnee (suivant le catalogue) BRUTE des mots-cles
243 d'une entite composee dont le chemin complet est donne sous forme
244 d'une liste du type :ETAPE + MCFACT ou MCBLOC + ...
247 objet_cata = dico[arg]
248 dico=objet_cata.entites
249 return objet_cata.ordre_mc
251 def verif_existence_sd(self):
253 Verifie que les structures de donnees utilisees dans self existent bien dans le contexte
254 avant etape, sinon enleve la reference a ces concepts
256 for motcle in self.data :
257 motcle.verif_existence_sd()
261 Retourne la chaine d'aide contenue dans le catalogue
262 en tenant compte de la langue
265 return self.data[0].get_fr()
271 Retourne l'objet normalise. Une liste est deja normalisee
275 def update_mc_global(self):
277 Met a jour les mots cles globaux enregistres dans l'etape parente
278 et dans le jdc parent.
279 Une liste ne peut pas etre globale. Elle se contente de passer
280 la requete a ses fils.
282 for motcle in self.data :
283 motcle.update_mc_global()
285 def delete_mc_global(self):
286 for motcle in self.data :
287 motcle.delete_mc_global()
290 # print "__del__",self