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