Salome HOME
modif du choix des commandes
[tools/eficas.git] / Extensions / etape_niveau.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     Ce module contient la classe ETAPE_NIVEAU qui sert a 
22     concretiser les niveaux au sein d'un JDC
23 """
24 import traceback
25
26 from Noyau import N_OBJECT
27
28 class ETAPE_NIVEAU(N_OBJECT.OBJECT):
29
30   def __init__(self,niveau,parent):
31     self.parent = parent
32     self.jdc = self.parent.get_jdc_root()
33     self.niveau = self
34     self.definition = niveau
35     self.etapes=[]
36     self.etapes_niveaux = []
37     self.dict_niveaux={}
38     self.editmode = 0
39     self.state="undetermined"
40     self.build_niveaux()
41
42   def build_niveaux(self):
43     for niveau in self.definition.l_niveaux:
44       etape_niveau = ETAPE_NIVEAU(niveau,self)
45       self.etapes_niveaux.append(etape_niveau)
46       self.dict_niveaux[niveau.nom]=etape_niveau
47
48   def register(self,etape):
49     """ 
50           Enregistre la commande étape :
51           - si editmode = 0 : on est en mode relecture d'un fichier de commandes
52           auquel cas on ajoute etape à la fin de la liste self.etapes
53           - si editmode = 1 : on est en mode ajout d'étape depuis eficas auquel cas
54           cette méthode ne fait rien, c'est addentité qui enregistre etape
55           à la bonne place dans self.etapes 
56     """
57     if self.editmode : return
58     self.etapes.append(etape)
59
60   def unregister(self,etape):
61     """
62         Desenregistre l'etape du niveau
63     """
64     self.etapes.remove(etape)
65
66   def ident(self):
67     return self.definition.label
68
69   def isactif(self):
70     #print 'Niveau : ',self.definition.nom
71     #print '\tactif =',self.definition.actif
72     if self.definition.actif == 1 :
73       return 1
74     else :
75       # self.actif est une condition à évaluer dans un certain contexte ...
76       d = self.cree_dict_valeurs()
77       try:
78         t=eval(self.definition.actif,d)
79         return t
80       except:
81         traceback.print_exc()
82         return 0
83
84   def cree_dict_valeurs(self):
85     """
86     Retourne le dictionnaire des frères aînés de self composé des couples :
87     {nom_frère isvalid()}
88     """
89     d={}
90     for niveau in self.parent.etapes_niveaux:
91       if niveau is self : break
92       d[niveau.definition.nom]=niveau.isvalid()
93     return d
94
95   def isvalid(self):
96     """ Méthode booléenne qui retourne 0 si le niveau est invalide, 1 sinon """
97     if self.etapes_niveaux == []:
98       if len(self.etapes) == 0:
99         return self.definition.valide_vide
100       else:
101         for etape in self.etapes :
102           if not etape.isvalid() : return 0
103         return 1
104     else:
105       for etape_niveau in self.etapes_niveaux :
106         if not etape_niveau.isvalid() : return 0
107       return 1
108
109   def accept(self,visitor):
110     visitor.visitETAPE_NIVEAU(self)
111
112   def addentite(self,name,pos_rel):
113     self.editmode = 1
114     try :
115       pos_abs=self.jdc.get_nb_etapes_avant(self)+pos_rel
116       cmd = self.jdc.addentite(name,pos_abs)
117       self.etapes.insert(pos_rel,cmd)
118       self.editmode = 0
119       return cmd
120     except:
121       traceback.print_exc()
122       self.editmode = 0
123       return None
124
125   def suppentite(self,etape) :
126     """ Classe ETAPE_NIVEAU
127         Supprime une étape 
128     """
129     self.jdc.suppentite(etape)
130
131
132   def get_fr(self):
133      """
134         Retourne le texte d'aide dans la langue choisie
135      """
136      try :
137         return getattr(self.definition,self.jdc.lang)
138      except:
139         return ''
140