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 # affichage des entries
87 self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
88 self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
89 # affichage d'une phrase d'aide
91 Un retour de chariot dans une zone de saisie vous permet de vérifier si
92 la valeur que vous avez entrée est valide.
93 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
94 valeurs seront effectivement prises en compte
96 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
97 # affichage des nom et valeur du paramètre
99 self.entry_nom.focus()
101 def make_buttons(self):
103 Crée les boutons du panneau
105 self.bouton_sup.place_forget()
106 self.bouton_doc.place_forget()
107 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
108 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
109 self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
111 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
112 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
113 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
115 def change_valeur(self):
117 Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
119 if self.parent.modified == 'n' : self.parent.init_modif()
120 new_nom = self.entry_nom.get()
121 new_val = self.entry_val.get()
122 #self.node.item.set_nom(new_nom)
123 #self.node.item.set_valeur(new_val)
125 #self.display_valeur()
126 # on essaie de stocker les noms et valeurs
127 test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
129 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
131 self.display_valeur()
132 self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
134 # la formule est incorrecte : on affiche les erreurs
135 widgets.showerror("Expression EVAL incorrecte",erreur)
136 self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
138 def display_valeur(self):
140 Affiche dans self.widget_text la valeur de l'objet PARAMETRE
141 (annule d'éventuelles modifications faite par l'utilisateur)
143 self.entry_nom.delete(0,END)
144 self.entry_val.delete(0,END)
145 self.titre.set('PARAMETRE '+self.node.item.get_nom())
146 self.entry_nom.insert(END,self.node.item.get_nom())
147 self.entry_val.insert(END,self.node.item.get_valeur())
151 Lance la vérification du nom donné par l'utilisateur dans entry_nom
153 nom = self.entry_nom.get()
154 test,erreur = self.node.item.verif_nom(nom)
156 widgets.showerror("Nom invalide",erreur)
157 self.entry_nom.focus()
158 self.entry_nom.selection_range(0,END)
159 self.parent.appli.affiche_infos("Nom du paramètre refusé")
161 self.parent.appli.affiche_infos("Nom du paramètre accepté")
163 def verif_eval(self,event=None):
165 Lance la vérification de l'expression EVAL présente dans entry_val
167 exp_eval = self.entry_val.get()
168 test,erreur = self.node.item.verif_eval(exp_eval)
170 widgets.showerror("Expression EVAL invalide",erreur)
171 self.entry_val.focus()
172 self.entry_val.selection_range(0,END)
173 self.parent.appli.affiche_infos("Expression EVAL refusée")
175 self.parent.appli.affiche_infos("Expression EVAL acceptée")
177 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
179 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
180 qui représente le PARAMETRE
182 panel = PARAM_EVALPanel
185 self.setfunction = self.set_valeur
187 # ---------------------------------------------------------------------------
188 # API du PARAMETRE pour l'arbre
189 # ---------------------------------------------------------------------------
191 def GetIconName(self):
193 Retourne le nom de l'icône associée au noeud qui porte self,
194 dépendant de la validité de l'objet
195 NB : un PARAMETRE est toujours valide ...
199 return "ast-green-square"
201 return "ast-red-square"
203 return "ast-white-square"
205 def GetLabelText(self):
206 """ Retourne 3 valeurs :
207 - le texte à afficher dans le noeud représentant l'item
208 - la fonte dans laquelle afficher ce texte
209 - la couleur du texte
211 return 'EVAL',Fonte_PARAMETRE,None
215 Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
216 Ce texte est tronqué à 25 caractères
218 texte = repr(self.object)
219 texte = string.split(texte,'\n')[0]
223 return texte[0:24]+'...'
225 def GetSubList(self):
227 Retourne la liste des fils de self
231 # ---------------------------------------------------------------------------
232 # Méthodes permettant la modification et la lecture des attributs
233 # du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
234 # ---------------------------------------------------------------------------
238 Indique si l'objet pointé par self est valide
240 return self.object.isvalid()
242 def get_valeur(self):
244 Retourne une chaîne représentant la valeur de l'objet PARAMETRE
245 cad de l'objet class_eval.EVAL
247 return self.object.get_valeur() or ''
251 Retourne le nom du paramètre
253 return self.object.get_nom()
255 def set_valeur(self,new_valeur):
257 Affecte new_valeur à l'objet PARAMETRE_EVAL
259 # on construit le texte de la nouvelle valeur
260 new_valeur = 'EVAL("""'+new_valeur+'""")'
261 # on affecte la nouvelle valeur à self.object
262 self.object.set_valeur(new_valeur)
264 def set_nom(self,new_nom):
268 self.object.set_nom(new_nom)
272 Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
274 return "Définition d'un paramètre de type EVAL"
276 def verif_nom(self,nom):
278 Lance la vérification de validité du nom passé en argument
280 return self.object.verif_nom(nom = nom)
282 def verif_eval(self,valeur):
284 Lance la vérification de validité de l'expression EVAL passée en argument
286 return self.object.verif_eval(exp_eval = valeur)
288 def save_parametre_eval(self,new_nom,new_val):
290 Vérifie si (new_nom,new_val) définit bien un EVAL licite :
291 - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
292 - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
294 test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
296 # la formule est bien correcte : on sauve les nouveaux paramètres
297 self.object.update(param=(new_nom,new_val))
300 import Extensions.parametre_eval
301 treeitem =PARAM_EVALTreeItem
302 objet = Extensions.parametre_eval.PARAMETRE_EVAL