1 #@ MODIF compoparameval Editeur DATE 02/07/2001 AUTEUR D6BHHJP J.P.LEFEBVRE
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2001 EDF R&D WWW.CODE-ASTER.ORG
5 # SEE THE FILE "LICENSE.TERMS" FOR INFORMATION ON USAGE AND
6 # REDISTRIBUTION OF THIS FILE.
7 # ======================================================================
9 Ce module contient les classes permettant de définir les objets graphiques
10 représentant un objet de type PARAMETRE_EVAL, cad le panneau et l'item de l'arbre
14 # import modules Python
20 # import modules EFICAS
26 Fonte_PARAMETRE = fontes.standard_italique
27 Fonte_TITRE = fontes.standard_gras_souligne
30 class PARAM_EVALPanel(panels.OngletPanel):
32 Classe servant à construire le panneau associé à un paramètre.
33 C'est au moyen de ce panneau que l'utilisateur peut accéder
34 aux nom et valeur du paramètre en vue éventuellement de les
40 Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
42 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
43 nb.pack(fill = 'both', expand = 1)
45 nb.add('Parametre', tab_text='Paramètre EVAL')
46 nb.add('Commande', tab_text='Nouvelle Commande')
47 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
48 self.makeParametrePage(nb.page("Parametre"))
49 self.makeCommandePage(nb.page("Commande"))
50 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
51 nb.tab('Parametre').focus_set()
55 def makeParametrePage(self,page):
57 Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
59 self.frame_valeur = Frame(page)
60 self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
61 # affichage du titre du panneau
62 self.titre = StringVar()
63 self.titre.set("PARAMETRE EVAL "+self.node.item.get_nom())
64 Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
65 # création des labels et entries associés aux nom et valeur du paramètre
66 Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
67 self.entry_nom = Entry(self.frame_valeur)
68 Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
69 self.entry_val = Entry(self.frame_valeur)
70 # binding sur entry_nom
71 self.entry_nom.bind("<Return>",lambda e,s=self : s.verif_nom())
72 self.entry_val.bind("<Return>",lambda e,s=self : s.verif_eval())
73 # affichage des entries
74 self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
75 self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
76 # affichage d'une phrase d'aide
78 Un retour de chariot dans une zone de saisie vous permet de vérifier si
79 la valeur que vous avez entrée est valide.
80 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
81 valeurs seront effectivement prises en compte
83 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
84 # affichage des nom et valeur du paramètre
86 self.entry_nom.focus()
88 def make_buttons(self):
90 Crée les boutons du panneau
92 self.bouton_sup.place_forget()
93 self.bouton_doc.place_forget()
94 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
95 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
96 self.bouton_val.bind("<Return>",lambda e,s=self : s.bouton_val.invoke())
98 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
99 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
100 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
102 def change_valeur(self):
104 Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
106 if self.parent.modified == 'n' : self.parent.init_modif()
107 new_nom = self.entry_nom.get()
108 new_val = self.entry_val.get()
109 #self.node.item.set_nom(new_nom)
110 #self.node.item.set_valeur(new_val)
112 #self.display_valeur()
113 # on essaie de stocker les noms et valeurs
114 test,erreur = self.node.item.save_parametre_eval(new_nom,new_val)
116 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
118 self.display_valeur()
119 self.parent.appli.affiche_infos("Expression EVAL %s modifiée" %self.node.item.get_nom())
121 # la formule est incorrecte : on affiche les erreurs
122 tkMessageBox.showerror("Expression EVAL incorrecte",erreur)
123 self.parent.appli.affiche_infos("Expression EVAL %s non modifiée" %self.node.item.get_nom())
125 def display_valeur(self):
127 Affiche dans self.widget_text la valeur de l'objet PARAMETRE
128 (annule d'éventuelles modifications faite par l'utilisateur)
130 self.entry_nom.delete(0,END)
131 self.entry_val.delete(0,END)
132 self.titre.set('PARAMETRE '+self.node.item.get_nom())
133 self.entry_nom.insert(END,self.node.item.get_nom())
134 self.entry_val.insert(END,self.node.item.get_valeur())
138 Lance la vérification du nom donné par l'utilisateur dans entry_nom
140 nom = self.entry_nom.get()
141 test,erreur = self.node.item.verif_nom(nom)
143 tkMessageBox.showerror("Nom invalide",erreur)
144 self.entry_nom.focus()
145 self.entry_nom.selection_range(0,END)
146 self.parent.appli.affiche_infos("Nom du paramètre refusé")
148 self.parent.appli.affiche_infos("Nom du paramètre accepté")
150 def verif_eval(self,event=None):
152 Lance la vérification de l'expression EVAL présente dans entry_val
154 exp_eval = self.entry_val.get()
155 test,erreur = self.node.item.verif_eval(exp_eval)
157 tkMessageBox.showerror("Expression EVAL invalide",erreur)
158 self.entry_val.focus()
159 self.entry_val.selection_range(0,END)
160 self.parent.appli.affiche_infos("Expression EVAL refusée")
162 self.parent.appli.affiche_infos("Expression EVAL acceptée")
164 class PARAM_EVALTreeItem(Objecttreeitem.ObjectTreeItem):
166 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
167 qui représente le PARAMETRE
169 panel = PARAM_EVALPanel
172 self.setfunction = self.set_valeur
174 # ---------------------------------------------------------------------------
175 # API du PARAMETRE pour l'arbre
176 # ---------------------------------------------------------------------------
178 def GetIconName(self):
180 Retourne le nom de l'icône associée au noeud qui porte self,
181 dépendant de la validité de l'objet
182 NB : un PARAMETRE est toujours valide ...
186 return "ast-green-square"
188 return "ast-red-square"
190 return "ast-white-square"
192 def GetLabelText(self):
193 """ Retourne 3 valeurs :
194 - le texte à afficher dans le noeud représentant l'item
195 - la fonte dans laquelle afficher ce texte
196 - la couleur du texte
198 return 'EVAL',Fonte_PARAMETRE,None
202 Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
203 Ce texte est tronqué à 25 caractères
205 texte = repr(self.object)
206 texte = string.split(texte,'\n')[0]
210 return texte[0:24]+'...'
212 def GetSubList(self):
214 Retourne la liste des fils de self
218 # ---------------------------------------------------------------------------
219 # Méthodes permettant la modification et la lecture des attributs
220 # du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
221 # ---------------------------------------------------------------------------
225 Indique si l'objet pointé par self est valide
227 return self.object.isvalid()
229 def get_valeur(self):
231 Retourne une chaîne représentant la valeur de l'objet PARAMETRE
232 cad de l'objet class_eval.EVAL
234 return self.object.get_valeur() or ''
238 Retourne le nom du paramètre
240 return self.object.get_nom()
242 def set_valeur(self,new_valeur):
244 Affecte new_valeur à l'objet PARAMETRE_EVAL
246 # on construit le texte de la nouvelle valeur
247 new_valeur = 'EVAL("""'+new_valeur+'""")'
248 # on affecte la nouvelle valeur à self.object
249 self.object.set_valeur(new_valeur)
251 def set_nom(self,new_nom):
255 self.object.set_nom(new_nom)
259 Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
261 return "Définition d'un paramètre de type EVAL"
263 def verif_nom(self,nom):
265 Lance la vérification de validité du nom passé en argument
267 return self.object.verif_nom(nom = nom)
269 def verif_eval(self,valeur):
271 Lance la vérification de validité de l'expression EVAL passée en argument
273 return self.object.verif_eval(exp_eval = valeur)
275 def save_parametre_eval(self,new_nom,new_val):
277 Vérifie si (new_nom,new_val) définit bien un EVAL licite :
278 - si oui, stocke ces paramètres comme nouveaux paramètres de l'EVAL courant et retourne 1
279 - si non, laisse les paramètres anciens de EVAL inchangés et retourne 0
281 test,erreur = self.object.verif_parametre_eval(param=(new_nom,new_val))
283 # la formule est bien correcte : on sauve les nouveaux paramètres
284 self.object.update(param=(new_nom,new_val))
287 import Extensions.parametre_eval
288 treeitem =PARAM_EVALTreeItem
289 objet = Extensions.parametre_eval.PARAMETRE_EVAL