]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/compoparameval.py
Salome HOME
CCAR: Correction du probleme de consommation memoire excessive
[tools/eficas.git] / Editeur / compoparameval.py
1 #@ MODIF compoparameval Editeur  DATE 02/07/2001   AUTEUR D6BHHJP J.P.LEFEBVRE 
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2001  EDF R&D                  WWW.CODE-ASTER.ORG
5 #              SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
6 #              REDISTRIBUTION OF THIS FILE.
7 # ======================================================================
8 """
9 Ce module contient les classes permettant de définir les objets graphiques
10 représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
11 d'EFICAS
12 """
13
14 # import modules Python
15 from Tkinter import *
16 import Pmw
17 import string
18 import tkMessageBox
19
20 # import modules EFICAS
21 import Objecttreeitem
22 import panels
23 import fontes
24
25
26 Fonte_PARAMETRE = fontes.standard_italique
27 Fonte_TITRE = fontes.standard_gras_souligne
28
29
30 class PARAM_EVALPanel(panels.OngletPanel):
31   """
32   Classe servant à construire le panneau associé à un paramètre.
33   C'est au moyen de ce panneau que l'utilisateur peut accéder
34   aux nom et valeur du paramètre en vue éventuellement de les
35   modifier.
36   """
37
38   def init(self):
39     """
40     Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
41     """
42     nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
43     nb.pack(fill = 'both', expand = 1)
44     self.nb=nb
45     nb.add('Parametre', tab_text='Paramètre EVAL')
46     nb.add('Commande', tab_text='Nouvelle Commande')
47     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
48     self.makeParametrePage(nb.page("Parametre"))
49     self.makeCommandePage(nb.page("Commande"))
50     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
51     nb.tab('Parametre').focus_set()
52     nb.setnaturalsize()
53     self.make_buttons()
54     
55   def makeParametrePage(self,page):
56     """
57     Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
58     """
59     self.frame_valeur = Frame(page)
60     self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
61     # affichage du titre du panneau
62     self.titre = StringVar()
63     self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
64     Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
65     # création des labels et entries associés aux nom et valeur du paramètre
66     Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
67     self.entry_nom = Entry(self.frame_valeur)
68     Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
69     self.entry_val = Entry(self.frame_valeur)
70     # binding sur entry_nom
71     self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
72     self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
73     # affichage des entries
74     self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
75     self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
76     # affichage d'une phrase d'aide
77     aide = """
78     Un retour de chariot dans une zone de saisie vous permet de vérifier si
79     la valeur que vous avez entrée est valide.
80     Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
81     valeurs seront effectivement prises en compte
82     """
83     Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
84     # affichage des nom et valeur du paramètre
85     self.display_valeur()
86     self.entry_nom.focus()
87
88   def make_buttons(self):
89     """
90     Crée les boutons du panneau
91     """
92     self.bouton_sup.place_forget()
93     self.bouton_doc.place_forget()
94     self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
95     self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
96     self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
97
98     self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
99     self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
100     self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
101
102   def change_valeur(self):
103     """
104     Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
105     """
106     if self.parent.modified == 'n' : self.parent.init_modif()
107     new_nom = self.entry_nom.get()
108     new_val = self.entry_val.get()
109     #self.node.item.set_nom(new_nom)
110     #self.node.item.set_valeur(new_val)
111     #self.node.update()
112     #self.display_valeur()
113     # on essaie de stocker les noms et valeurs
114     test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
115     if test :
116         # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
117         self.node.update()
118         self.display_valeur()
119         self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
120     else:
121         # la formule est incorrecte : on affiche les erreurs
122         tkMessageBox.showerror("Expression EVAL incorrecte",erreur)
123         self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
124     
125   def display_valeur(self):
126     """
127     Affiche dans self.widget_text la valeur de l'objet PARAMETRE
128     (annule d'éventuelles modifications faite par l'utilisateur)
129     """
130     self.entry_nom.delete(0,END)
131     self.entry_val.delete(0,END)
132     self.titre.set('PARAMETRE '+self.node.item.get_nom())
133     self.entry_nom.insert(END,self.node.item.get_nom())
134     self.entry_val.insert(END,self.node.item.get_valeur())
135
136   def verif_nom(self):
137     """
138     Lance la vérification du nom donné par l'utilisateur dans entry_nom
139     """
140     nom = self.entry_nom.get()
141     test,erreur = self.node.item.verif_nom(nom)
142     if not test :
143         tkMessageBox.showerror("Nom invalide",erreur)
144         self.entry_nom.focus()
145         self.entry_nom.selection_range(0,END)
146         self.parent.appli.affiche_infos("Nom du paramètre refusé")
147     else:
148         self.parent.appli.affiche_infos("Nom du paramètre accepté")
149         
150   def verif_eval(self,event=None):
151     """
152     Lance la vérification de l'expression EVAL présente dans entry_val
153     """
154     exp_eval = self.entry_val.get()
155     test,erreur = self.node.item.verif_eval(exp_eval)
156     if not test:
157         tkMessageBox.showerror("Expression EVAL invalide",erreur)
158         self.entry_val.focus()
159         self.entry_val.selection_range(0,END)
160         self.parent.appli.affiche_infos("Expression EVAL refusée")
161     else:
162         self.parent.appli.affiche_infos("Expression EVAL acceptée")
163             
164 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
165     """
166     Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
167     qui représente le PARAMETRE
168     """
169     panel = PARAM_EVALPanel
170
171     def init(self):
172       self.setfunction = self.set_valeur
173
174 # ---------------------------------------------------------------------------
175 #                   API du PARAMETRE pour l'arbre 
176 # ---------------------------------------------------------------------------
177
178     def GetIconName(self):
179       """
180       Retourne le nom de l'icône associée au noeud qui porte self,
181       dépendant de la validité de l'objet
182       NB : un PARAMETRE est toujours valide ...
183       """
184       if self.isactif():
185           if self.isvalid():
186               return "ast-green-square"
187           else:
188               return "ast-red-square"
189       else:
190           return "ast-white-square"
191
192     def GetLabelText(self):
193         """ Retourne 3 valeurs :
194         - le texte à afficher dans le noeud représentant l'item
195         - la fonte dans laquelle afficher ce texte
196         - la couleur du texte
197         """
198         return 'EVAL',Fonte_PARAMETRE,None
199
200     def GetText(self):
201       """
202       Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
203       Ce texte est tronqué à 25 caractères
204       """
205       texte = repr(self.object)
206       texte = string.split(texte,'\n')[0]
207       if len(texte) < 25 :
208           return texte
209       else :
210           return texte[0:24]+'...'
211
212     def GetSubList(self):
213       """
214       Retourne la liste des fils de self
215       """
216       return []
217     
218 # ---------------------------------------------------------------------------
219 #       Méthodes permettant la modification et la lecture des attributs
220 #       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
221 # ---------------------------------------------------------------------------
222
223     def isvalid(self):
224       """
225       Indique si l'objet pointé par self est valide
226       """
227       return self.object.isvalid()
228     
229     def get_valeur(self):
230       """
231       Retourne une chaîne représentant la valeur de l'objet PARAMETRE
232       cad de l'objet class_eval.EVAL
233       """
234       return self.object.get_valeur() or ''
235
236     def get_nom(self):
237       """
238       Retourne le nom du paramètre
239       """
240       return self.object.get_nom()
241
242     def set_valeur(self,new_valeur):
243       """
244       Affecte new_valeur à l'objet PARAMETRE_EVAL
245       """
246       # on construit le texte de la nouvelle valeur
247       new_valeur = 'EVAL("""'+new_valeur+'""")'
248       # on affecte la nouvelle valeur à self.object
249       self.object.set_valeur(new_valeur)
250
251     def set_nom(self,new_nom):
252       """
253       Renomme le paramètre
254       """
255       self.object.set_nom(new_nom)
256
257     def get_fr(self):
258       """
259       Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
260       """
261       return "Définition d'un paramètre de type EVAL"
262
263     def verif_nom(self,nom):
264       """
265       Lance la vérification de validité du nom passé en argument
266       """
267       return self.object.verif_nom(nom = nom)
268
269     def verif_eval(self,valeur):
270       """
271       Lance la vérification de validité de l'expression EVAL passée en argument
272       """
273       return self.object.verif_eval(exp_eval = valeur)
274
275     def save_parametre_eval(self,new_nom,new_val):
276       """
277       Vérifie si (new_nom,new_val) définit bien un EVAL licite :
278           - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
279           - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
280       """
281       test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
282       if test :
283           # la formule est bien correcte : on sauve les nouveaux paramètres
284           self.object.update(param=(new_nom,new_val))
285       return test,erreur
286       
287 import Extensions.parametre_eval
288 treeitem =PARAM_EVALTreeItem
289 objet = Extensions.parametre_eval.PARAMETRE_EVAL