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.
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.
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.
20 # ======================================================================
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
27 # import modules Python
32 # import modules EFICAS
34 from Editeur import Objecttreeitem
39 Fonte_PARAMETRE = fontes.standard_italique
40 Fonte_TITRE = fontes.standard_gras_souligne
43 class PARAM_EVALPanel(panels.OngletPanel):
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
53 Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
55 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
56 nb.pack(fill = 'both', expand = 1)
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()
68 def makeParametrePage(self,page):
70 Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
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
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
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()
103 def make_buttons(self):
105 Crée les boutons du panneau
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)
124 def change_valeur(self):
126 Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
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)
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)
138 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
140 self.display_valeur()
141 self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
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())
147 def display_valeur(self):
149 Affiche dans self.widget_text la valeur de l'objet PARAMETRE
150 (annule d'éventuelles modifications faite par l'utilisateur)
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())
160 Lance la vérification du nom donné par l'utilisateur dans entry_nom
162 nom = self.entry_nom.get()
163 test,erreur = self.node.item.verif_nom(nom)
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é")
170 self.parent.appli.affiche_infos("Nom du paramètre accepté")
172 def verif_eval(self,event=None):
174 Lance la vérification de l'expression EVAL présente dans entry_val
176 exp_eval = self.entry_val.get()
177 test,erreur = self.node.item.verif_eval(exp_eval)
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")
184 self.parent.appli.affiche_infos("Expression EVAL acceptée")
186 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
188 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
189 qui représente le PARAMETRE
191 panel = PARAM_EVALPanel
194 self.setfunction = self.set_valeur
196 # ---------------------------------------------------------------------------
197 # API du PARAMETRE pour l'arbre
198 # ---------------------------------------------------------------------------
200 def GetIconName(self):
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 ...
208 return "ast-green-square"
210 return "ast-red-square"
212 return "ast-white-square"
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
220 return 'EVAL',Fonte_PARAMETRE,None
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
227 texte = repr(self.object)
228 texte = string.split(texte,'\n')[0]
232 return texte[0:24]+'...'
234 def GetSubList(self):
236 Retourne la liste des fils de self
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 # ---------------------------------------------------------------------------
247 Indique si l'objet pointé par self est valide
249 return self.object.isvalid()
251 def get_valeur(self):
253 Retourne une chaîne représentant la valeur de l'objet PARAMETRE
254 cad de l'objet class_eval.EVAL
256 return self.object.get_valeur() or ''
260 Retourne le nom du paramètre
262 return self.object.get_nom()
264 def set_valeur(self,new_valeur):
266 Affecte new_valeur à l'objet PARAMETRE_EVAL
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)
273 def set_nom(self,new_nom):
277 self.object.set_nom(new_nom)
281 Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
283 return "Définition d'un paramètre de type EVAL"
285 def verif_nom(self,nom):
287 Lance la vérification de validité du nom passé en argument
289 return self.object.verif_nom(nom = nom)
291 def verif_eval(self,valeur):
293 Lance la vérification de validité de l'expression EVAL passée en argument
295 return self.object.verif_eval(exp_eval = valeur)
297 def save_parametre_eval(self,new_nom,new_val):
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
303 test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
305 # la formule est bien correcte : on sauve les nouveaux paramètres
306 self.object.update(param=(new_nom,new_val))
309 import Extensions.parametre_eval
310 treeitem =PARAM_EVALTreeItem
311 objet = Extensions.parametre_eval.PARAMETRE_EVAL