Salome HOME
bug
[tools/eficas.git] / Extensions / etape_niveau.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017   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 from __future__ import absolute_import
25 import traceback
26
27 from Noyau import N_OBJECT
28
29 class ETAPE_NIVEAU(N_OBJECT.OBJECT):
30
31   def __init__(self,niveau,parent):
32     self.parent = parent
33     self.jdc = self.parent.getJdcRoot()
34     self.niveau = self
35     self.definition = niveau
36     self.etapes=[]
37     self.etapes_niveaux = []
38     self.dict_niveaux={}
39     self.editmode = 0
40     self.state="undetermined"
41     self.buildNiveaux()
42
43   def buildNiveaux(self):
44     for niveau in self.definition.l_niveaux:
45       etape_niveau = ETAPE_NIVEAU(niveau,self)
46       self.etapes_niveaux.append(etape_niveau)
47       self.dict_niveaux[niveau.nom]=etape_niveau
48
49   def register(self,etape):
50     """ 
51           Enregistre la commande etape :
52           - si editmode = 0 : on est en mode relecture d'un fichier de commandes
53           auquel cas on ajoute etape a la fin de la liste self.etapes
54           - si editmode = 1 : on est en mode ajout d'etape depuis eficas auquel cas
55           cette methode ne fait rien, c'est addEntite qui enregistre etape
56           a la bonne place dans self.etapes 
57     """
58     if self.editmode : return
59     self.etapes.append(etape)
60
61   def unregister(self,etape):
62     """
63         Desenregistre l'etape du niveau
64     """
65     self.etapes.remove(etape)
66
67   def ident(self):
68     return self.definition.label
69
70   def isActif(self):
71     #print 'Niveau : ',self.definition.nom
72     #print '\tactif =',self.definition.actif
73     if self.definition.actif == 1 :
74       return 1
75     else :
76       # self.actif est une condition a evaluer dans un certain contexte ...
77       d = self.creeDictValeurs()
78       try:
79         t=eval(self.definition.actif,d)
80         return t
81       except:
82         traceback.print_exc()
83         return 0
84
85   def creeDictValeurs(self):
86     """
87     Retourne le dictionnaire des freres aines de self compose des couples :
88     {nom_frere isValid()}
89     """
90     d={}
91     for niveau in self.parent.etapes_niveaux:
92       if niveau is self : break
93       d[niveau.definition.nom]=niveau.isValid()
94     return d
95
96   def isValid(self):
97     """ Methode booleenne qui retourne 0 si le niveau est invalide, 1 sinon """
98     if self.etapes_niveaux == []:
99       if len(self.etapes) == 0:
100         return self.definition.valide_vide
101       else:
102         for etape in self.etapes :
103           if not etape.isValid() : return 0
104         return 1
105     else:
106       for etape_niveau in self.etapes_niveaux :
107         if not etape_niveau.isValid() : return 0
108       return 1
109
110   def accept(self,visitor):
111     visitor.visitETAPE_NIVEAU(self)
112
113   def addEntite(self,name,pos_rel):
114     self.editmode = 1
115     try :
116       pos_abs=self.jdc.getNbEtapesAvant(self)+pos_rel
117       cmd = self.jdc.addEntite(name,pos_abs)
118       self.etapes.insert(pos_rel,cmd)
119       self.editmode = 0
120       return cmd
121     except:
122       traceback.print_exc()
123       self.editmode = 0
124       return None
125
126   def suppEntite(self,etape) :
127     """ Classe ETAPE_NIVEAU
128         Supprime une etape 
129     """
130     self.jdc.suppEntite(etape)
131
132
133   def getFr(self):
134      """
135         Retourne le texte d'aide dans la langue choisie
136      """
137      try :
138         return getattr(self.definition,self.jdc.lang)
139      except:
140         return ''
141