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
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_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
110 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
111 self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
112 self.bouton_val.bind("<KP_Enter>",lambda e,s=self : s.bouton_val.invoke())
113 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
114 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
115 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
117 def change_valeur(self):
119 Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
121 if self.parent.modified == 'n' : self.parent.init_modif()
122 new_nom = self.entry_nom.get()
123 new_val = self.entry_val.get()
124 #self.node.item.set_nom(new_nom)
125 #self.node.item.set_valeur(new_val)
127 #self.display_valeur()
128 # on essaie de stocker les noms et valeurs
129 test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
131 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
133 self.display_valeur()
134 self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
136 # la formule est incorrecte : on affiche les erreurs
137 widgets.showerror("Expression EVAL incorrecte",erreur)
138 self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
140 def display_valeur(self):
142 Affiche dans self.widget_text la valeur de l'objet PARAMETRE
143 (annule d'éventuelles modifications faite par l'utilisateur)
145 self.entry_nom.delete(0,END)
146 self.entry_val.delete(0,END)
147 self.titre.set('PARAMETRE '+self.node.item.get_nom())
148 self.entry_nom.insert(END,self.node.item.get_nom())
149 self.entry_val.insert(END,self.node.item.get_valeur())
153 Lance la vérification du nom donné par l'utilisateur dans entry_nom
155 nom = self.entry_nom.get()
156 test,erreur = self.node.item.verif_nom(nom)
158 widgets.showerror("Nom invalide",erreur)
159 self.entry_nom.focus()
160 self.entry_nom.selection_range(0,END)
161 self.parent.appli.affiche_infos("Nom du paramètre refusé")
163 self.parent.appli.affiche_infos("Nom du paramètre accepté")
165 def verif_eval(self,event=None):
167 Lance la vérification de l'expression EVAL présente dans entry_val
169 exp_eval = self.entry_val.get()
170 test,erreur = self.node.item.verif_eval(exp_eval)
172 widgets.showerror("Expression EVAL invalide",erreur)
173 self.entry_val.focus()
174 self.entry_val.selection_range(0,END)
175 self.parent.appli.affiche_infos("Expression EVAL refusée")
177 self.parent.appli.affiche_infos("Expression EVAL acceptée")
179 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
181 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
182 qui représente le PARAMETRE
184 panel = PARAM_EVALPanel
187 self.setfunction = self.set_valeur
189 # ---------------------------------------------------------------------------
190 # API du PARAMETRE pour l'arbre
191 # ---------------------------------------------------------------------------
193 def GetIconName(self):
195 Retourne le nom de l'icône associée au noeud qui porte self,
196 dépendant de la validité de l'objet
197 NB : un PARAMETRE est toujours valide ...
201 return "ast-green-square"
203 return "ast-red-square"
205 return "ast-white-square"
207 def GetLabelText(self):
208 """ Retourne 3 valeurs :
209 - le texte à afficher dans le noeud représentant l'item
210 - la fonte dans laquelle afficher ce texte
211 - la couleur du texte
213 return 'EVAL',Fonte_PARAMETRE,None
217 Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
218 Ce texte est tronqué à 25 caractères
220 texte = repr(self.object)
221 texte = string.split(texte,'\n')[0]
225 return texte[0:24]+'...'
227 def GetSubList(self):
229 Retourne la liste des fils de self
233 # ---------------------------------------------------------------------------
234 # Méthodes permettant la modification et la lecture des attributs
235 # du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
236 # ---------------------------------------------------------------------------
240 Indique si l'objet pointé par self est valide
242 return self.object.isvalid()
244 def get_valeur(self):
246 Retourne une chaîne représentant la valeur de l'objet PARAMETRE
247 cad de l'objet class_eval.EVAL
249 return self.object.get_valeur() or ''
253 Retourne le nom du paramètre
255 return self.object.get_nom()
257 def set_valeur(self,new_valeur):
259 Affecte new_valeur à l'objet PARAMETRE_EVAL
261 # on construit le texte de la nouvelle valeur
262 new_valeur = 'EVAL("""'+new_valeur+'""")'
263 # on affecte la nouvelle valeur à self.object
264 self.object.set_valeur(new_valeur)
266 def set_nom(self,new_nom):
270 self.object.set_nom(new_nom)
274 Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
276 return "Définition d'un paramètre de type EVAL"
278 def verif_nom(self,nom):
280 Lance la vérification de validité du nom passé en argument
282 return self.object.verif_nom(nom = nom)
284 def verif_eval(self,valeur):
286 Lance la vérification de validité de l'expression EVAL passée en argument
288 return self.object.verif_eval(exp_eval = valeur)
290 def save_parametre_eval(self,new_nom,new_val):
292 Vérifie si (new_nom,new_val) définit bien un EVAL licite :
293 - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
294 - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
296 test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
298 # la formule est bien correcte : on sauve les nouveaux paramètres
299 self.object.update(param=(new_nom,new_val))
302 import Extensions.parametre_eval
303 treeitem =PARAM_EVALTreeItem
304 objet = Extensions.parametre_eval.PARAMETRE_EVAL