1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 Ce module contient les classes permettant de définir les objets graphiques
22 représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
26 # import modules Python
31 # import modules EFICAS
38 Fonte_PARAMETRE = fontes.standard_italique
39 Fonte_TITRE = fontes.standard_gras_souligne
42 class PARAM_EVALPanel(panels.OngletPanel):
44 Classe servant à construire le panneau associé à un paramètre.
45 C'est au moyen de ce panneau que l'utilisateur peut accéder
46 aux nom et valeur du paramètre en vue éventuellement de les
52 Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
54 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
55 nb.pack(fill = 'both', expand = 1)
57 nb.add('Parametre', tab_text='Paramètre EVAL')
58 nb.add('Commande', tab_text='Nouvelle Commande')
59 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
60 self.makeParametrePage(nb.page("Parametre"))
61 self.makeCommandePage(nb.page("Commande"))
62 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
63 nb.tab('Parametre').focus_set()
67 def makeParametrePage(self,page):
69 Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
71 self.frame_valeur = Frame(page)
72 self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
73 # affichage du titre du panneau
74 self.titre = StringVar()
75 self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
76 Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
77 # création des labels et entries associés aux nom et valeur du paramètre
78 Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
79 self.entry_nom = Entry(self.frame_valeur)
80 Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
81 self.entry_val = Entry(self.frame_valeur)
82 # binding sur entry_nom
83 self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
84 self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
85 # affichage des entries
86 self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
87 self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
88 # affichage d'une phrase d'aide
90 Un retour de chariot dans une zone de saisie vous permet de vérifier si
91 la valeur que vous avez entrée est valide.
92 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
93 valeurs seront effectivement prises en compte
95 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
96 # affichage des nom et valeur du paramètre
98 self.entry_nom.focus()
100 def make_buttons(self):
102 Crée les boutons du panneau
104 self.bouton_sup.place_forget()
105 self.bouton_doc.place_forget()
106 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
107 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
108 self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
110 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
111 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
112 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
114 def change_valeur(self):
116 Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
118 if self.parent.modified == 'n' : self.parent.init_modif()
119 new_nom = self.entry_nom.get()
120 new_val = self.entry_val.get()
121 #self.node.item.set_nom(new_nom)
122 #self.node.item.set_valeur(new_val)
124 #self.display_valeur()
125 # on essaie de stocker les noms et valeurs
126 test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
128 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
130 self.display_valeur()
131 self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
133 # la formule est incorrecte : on affiche les erreurs
134 widgets.showerror("Expression EVAL incorrecte",erreur)
135 self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
137 def display_valeur(self):
139 Affiche dans self.widget_text la valeur de l'objet PARAMETRE
140 (annule d'éventuelles modifications faite par l'utilisateur)
142 self.entry_nom.delete(0,END)
143 self.entry_val.delete(0,END)
144 self.titre.set('PARAMETRE '+self.node.item.get_nom())
145 self.entry_nom.insert(END,self.node.item.get_nom())
146 self.entry_val.insert(END,self.node.item.get_valeur())
150 Lance la vérification du nom donné par l'utilisateur dans entry_nom
152 nom = self.entry_nom.get()
153 test,erreur = self.node.item.verif_nom(nom)
155 widgets.showerror("Nom invalide",erreur)
156 self.entry_nom.focus()
157 self.entry_nom.selection_range(0,END)
158 self.parent.appli.affiche_infos("Nom du paramètre refusé")
160 self.parent.appli.affiche_infos("Nom du paramètre accepté")
162 def verif_eval(self,event=None):
164 Lance la vérification de l'expression EVAL présente dans entry_val
166 exp_eval = self.entry_val.get()
167 test,erreur = self.node.item.verif_eval(exp_eval)
169 widgets.showerror("Expression EVAL invalide",erreur)
170 self.entry_val.focus()
171 self.entry_val.selection_range(0,END)
172 self.parent.appli.affiche_infos("Expression EVAL refusée")
174 self.parent.appli.affiche_infos("Expression EVAL acceptée")
176 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
178 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
179 qui représente le PARAMETRE
181 panel = PARAM_EVALPanel
184 self.setfunction = self.set_valeur
186 # ---------------------------------------------------------------------------
187 # API du PARAMETRE pour l'arbre
188 # ---------------------------------------------------------------------------
190 def GetIconName(self):
192 Retourne le nom de l'icône associée au noeud qui porte self,
193 dépendant de la validité de l'objet
194 NB : un PARAMETRE est toujours valide ...
198 return "ast-green-square"
200 return "ast-red-square"
202 return "ast-white-square"
204 def GetLabelText(self):
205 """ Retourne 3 valeurs :
206 - le texte à afficher dans le noeud représentant l'item
207 - la fonte dans laquelle afficher ce texte
208 - la couleur du texte
210 return 'EVAL',Fonte_PARAMETRE,None
214 Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
215 Ce texte est tronqué à 25 caractères
217 texte = repr(self.object)
218 texte = string.split(texte,'\n')[0]
222 return texte[0:24]+'...'
224 def GetSubList(self):
226 Retourne la liste des fils de self
230 # ---------------------------------------------------------------------------
231 # Méthodes permettant la modification et la lecture des attributs
232 # du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
233 # ---------------------------------------------------------------------------
237 Indique si l'objet pointé par self est valide
239 return self.object.isvalid()
241 def get_valeur(self):
243 Retourne une chaîne représentant la valeur de l'objet PARAMETRE
244 cad de l'objet class_eval.EVAL
246 return self.object.get_valeur() or ''
250 Retourne le nom du paramètre
252 return self.object.get_nom()
254 def set_valeur(self,new_valeur):
256 Affecte new_valeur à l'objet PARAMETRE_EVAL
258 # on construit le texte de la nouvelle valeur
259 new_valeur = 'EVAL("""'+new_valeur+'""")'
260 # on affecte la nouvelle valeur à self.object
261 self.object.set_valeur(new_valeur)
263 def set_nom(self,new_nom):
267 self.object.set_nom(new_nom)
271 Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
273 return "Définition d'un paramètre de type EVAL"
275 def verif_nom(self,nom):
277 Lance la vérification de validité du nom passé en argument
279 return self.object.verif_nom(nom = nom)
281 def verif_eval(self,valeur):
283 Lance la vérification de validité de l'expression EVAL passée en argument
285 return self.object.verif_eval(exp_eval = valeur)
287 def save_parametre_eval(self,new_nom,new_val):
289 Vérifie si (new_nom,new_val) définit bien un EVAL licite :
290 - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
291 - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
293 test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
295 # la formule est bien correcte : on sauve les nouveaux paramètres
296 self.object.update(param=(new_nom,new_val))
299 import Extensions.parametre_eval
300 treeitem =PARAM_EVALTreeItem
301 objet = Extensions.parametre_eval.PARAMETRE_EVAL