Salome HOME
PN : print enleve
[tools/eficas.git] / Editeur / newsimppanel.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 # Modules Python
21 import string,types,os
22 from Tkinter import *
23 import Pmw
24 from copy import copy,deepcopy
25 import traceback
26
27 # Modules Eficas
28 import Objecttreeitem
29 import prefs
30 import panels
31 import images
32 import composimp
33 from widgets import ListeChoix
34 from widgets import FenetreDeSelection
35
36 from Noyau.N_CR import justify_text
37 from utils import substract_list
38
39
40 class newSIMPPanel(panels.OngletPanel):
41   """
42   Classe virtuelle servant de classe mère à toutes les classes Panel
43   servant à afficher et récupérer la valeur d'un mot-clé simple.
44   Le panel est différent suivant le type de la valeur attendu
45   """
46   def init(self):
47       """
48       Méthode appelée par le constructeur de OngletPanel :
49       construit le notebook à 2 onglets utilisé par tous les panels de
50       tous les mots-clés simples
51       """
52       nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
53       nb.pack(fill = 'both', expand = 1)
54       self.nb=nb
55       nb.add('Valeur', tab_text='Saisir valeur')
56       self.makeValeurPage(nb.page('Valeur'))
57       nb.setnaturalsize()
58       
59 # ----------------------------------------------------------------------------------------
60 #   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
61 #    au mot-clé courant
62 # ----------------------------------------------------------------------------------------
63
64   def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
65       """
66           Enregistre  val comme valeur de self.node.item.object SANS 
67           faire de test de validité ni ré-évaluer l'ancienne valeur
68           permet de rester avec des valeurs non entrees et de ne pas 
69           ré-évaluer des entiers par exemple
70       """
71       if self.parent.modified == 'n' : self.parent.init_modif()
72       self.node.item.set_valeur(name)
73       self.parent.appli.affiche_infos(mess)
74       if self.node.item.get_position()=='global':
75            self.node.etape.verif_all()
76       elif self.node.item.get_position()=='global_jdc':
77            self.node.racine.verif_all()
78       else :
79            self.node.parent.verif()
80       self.node.update()
81
82   def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
83       """
84           Enregistre  val comme valeur de self.node.item.object  
85           en evaluant l item et en le validant 
86           Si name n'est pas renseigné, la valeur 
87       """
88       if self.parent.modified == 'n' : self.parent.init_modif()
89       if name != None:
90           valeur = name
91           validite = 1
92       else :
93           valeurentree= self.entry.get()
94           self.entry.delete(0,END)
95           if valeurentree == '': valeurentree=None
96           valeur,validite=self.node.item.eval_valeur(valeurentree)
97           if not validite :
98                 valeur= self.entry.get()
99                 commentaire = "impossible d'évaluer : %s " %`valeurentree`
100                 self.parent.appli.affiche_infos(commentaire)
101                 
102       if validite : 
103          if self.node.item.is_list() :
104             validite=self.node.item.valide_liste_complete(valeur)
105             commentaire=self.node.item.info_erreur_liste()
106          else :
107             validite=self.node.item.valide_item(valeur)
108             commentaire=self.node.item.info_erreur_item()
109  
110       if validite :
111           self.node.item.set_valeur(valeur)
112           self.parent.appli.affiche_infos(mess)
113           if self.node.item.get_position()=='global':
114               self.node.etape.verif_all()
115           elif self.node.item.get_position()=='global_jdc':
116               self.node.racine.verif_all()
117           else :
118               self.node.parent.verif()
119           self.node.update()
120           if self.node.item.isvalid():
121               self.node.parent.select()
122       else :
123           self.parent.appli.affiche_infos(commentaire)
124
125 # ----------------------------------------------------------------------------------------
126 #   Méthodes utilisées pour la manipulation des items dans les listes de choix
127 # ----------------------------------------------------------------------------------------
128   def selectValeur(self,name):
129       self.selected_valeur = name
130
131   def deselectValeur(self,name):
132       self.selectValeur = None
133
134   def sup_valeur(self,name=None):
135       """
136       Supprime la valeur selectionnée de la liste des valeurs et la rajoute
137       à la liste des choix possibles
138       """
139       if hasattr(self,'selected_valeur') :
140          if ( self.selected_valeur != None and self.selected_valeur != ''):
141             liste_valeurs = self.Liste_valeurs.get_liste()
142             liste_valeurs.remove(self.selected_valeur)
143             self.Liste_valeurs.put_liste(liste_valeurs)
144             listeActuelle=self.Liste_valeurs.get_liste()
145             liste_choix=self.node.item.get_liste_possible(listeActuelle)
146             self.Liste_choix.put_liste(liste_choix)
147             self.selected_valeur = None
148
149   def add_choix(self,name=None):
150       """
151       Ajoute le choix selectionné à la liste des valeurs et le retire
152       de la liste des choix possibles
153       """
154       
155       if hasattr(self,'selected_choix') :
156          if (self.selected_choix != None and self.selected_choix != ''):
157             min,max = self.node.item.GetMinMax()
158             liste_valeurs = self.Liste_valeurs.get_liste()
159             if len(liste_valeurs) >= max :
160                 self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
161                 return
162             liste_valeurs.append(self.selected_choix)
163             self.Liste_valeurs.put_liste(liste_valeurs)
164             listeActuelle=self.Liste_valeurs.get_liste()
165             liste_choix=self.node.item.get_liste_possible(listeActuelle)
166             self.Liste_choix.put_liste(liste_choix)
167             self.selected_choix = None
168
169   def selectChoix(self,name):
170       self.selected_choix = name
171
172   def deselectChoix(self,name):
173       self.selectChoix = None
174       
175   def raisecmd(self,page):
176       try:
177          self.entry.focus()
178       except:
179          pass
180