1 #@ MODIF compoformule 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 FORMULE, cad le panneau et l'item de l'arbre
14 # import modules Python
20 # import modules EFICAS
25 Fonte_TITRE = fontes.standard_gras_souligne
28 class FORMULEPanel(panels.OngletPanel):
30 Classe servant à construire le panneau associé à un paramètre.
31 C'est au moyen de ce panneau que l'utilisateur peut accéder
32 aux nom et valeur du paramètre en vue éventuellement de les
37 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
38 nb.pack(fill = 'both', expand = 1)
40 nb.add('Formule', tab_text='Définition Formule')
41 nb.add('Commande', tab_text='Nouvelle Commande')
42 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
43 self.makeFormulePage(nb.page("Formule"))
44 self.makeCommandePage(nb.page("Commande"))
45 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
46 nb.tab('Formule').focus_set()
49 def makeFormulePage(self,page):
51 Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
53 self.frame_valeur = Frame(page)
54 self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
55 # affichage du titre du panneau
56 self.titre = StringVar()
57 self.titre.set("FORMULE "+self.node.item.get_nom())
58 Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
59 # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
60 Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
61 self.entry_nom = Entry(self.frame_valeur)
62 Label(self.frame_valeur,text= 'Type retourné : ').place(relx=0.,rely=0.25)
63 self.option_menu_typ = Pmw.OptionMenu(self.frame_valeur,labelpos='w',
65 items = self.node.item.get_liste_types_autorises())
66 self.option_menu_typ.place(relx=0.33,rely=0.23)
67 Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
68 self.entry_arg = Entry(self.frame_valeur)
69 Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.55)
70 self.entry_exp = Entry(self.frame_valeur)
71 # binding sur les entries
72 self.entry_nom.bind("<Return>",self.verif_nom)
73 self.entry_arg.bind("<Return>",self.verif_arguments)
74 self.entry_exp.bind("<Return>",self.verif_corps)
75 # affichage des entries
76 self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
77 self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
78 self.entry_exp.place(relx=0.35,rely=0.55,relwidth=0.55)
79 # affichage d'une phrase d'aide
81 Un retour de chariot dans une zone de saisie vous permet de vérifier si
82 la valeur que vous avez entrée est valide.
83 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
84 valeurs seront effectivement prises en compte
86 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.7,anchor='n')
87 # affichage des nom, type retourné, arguments et corps de la FORMULE
89 # affichage des boutons
91 # entry_nom prend le focus
92 self.entry_nom.focus()
94 def make_buttons(self):
96 Crée les boutons du panneau
98 self.bouton_sup.place_forget()
99 self.bouton_doc.place_forget()
100 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
101 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
103 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
104 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
105 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
107 def change_valeur(self):
109 Stocke la nouvelle FORMULE décrite par l'utilisateur
111 if self.parent.modified == 'n' : self.parent.init_modif()
112 # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
113 new_nom = self.entry_nom.get()
114 new_typ = self.option_menu_typ.getcurselection()
115 new_arg = self.entry_arg.get()
116 new_exp = self.entry_exp.get()
117 # on essaie de les stocker
118 test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
120 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
122 self.display_valeur()
123 self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
125 # la formule est incorrecte : on affiche les erreurs
126 tkMessageBox.showerror("Formule incorrecte",erreur)
127 self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
129 def display_valeur(self):
131 Affiche dans self.widget_text de la valeur de l'objet FORMULE
132 (annule d'éventuelles modifications faite par l'utilisateur)
134 # on efface tout texte affiché dans les entries
135 self.entry_nom.delete(0,END)
136 self.entry_arg.delete(0,END)
137 self.entry_exp.delete(0,END)
138 # on rafraîchit le titre du panneau
139 self.titre.set('FORMULE '+self.node.item.get_nom())
140 # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
141 nom = self.node.item.get_nom()
143 self.entry_nom.insert(END,nom)
144 type = self.node.item.get_type()
146 self.option_menu_typ.invoke(type)
147 args = self.node.item.get_args()
149 self.entry_arg.insert(END,args)
150 corps = self.node.item.get_corps()
152 self.entry_exp.insert(END,self.node.item.get_corps())
154 def verif_nom(self,event=None):
156 Lance la vérification du nom présent dans entry_nom
158 nom = self.entry_nom.get()
\r
160 test,erreur = 0,"Aucun nom fourni !"
\r
162 test,erreur = self.node.item.verif_nom(nom)
164 tkMessageBox.showerror("Nom invalide",erreur)
165 self.entry_nom.focus()
166 self.entry_nom.selection_range(0,END)
167 self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
169 self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
170 self.entry_arg.focus()
172 def verif_arguments(self,event=None):
174 Lance la vérification des arguments présents dans entry_arg
176 arguments = self.entry_arg.get()
\r
177 if arguments == '' :
\r
178 test,erreur = 0,"Aucun argument fourni"
\r
180 test,erreur = self.node.item.verif_arguments(arguments)
182 tkMessageBox.showerror("Argument(s) invalide(s)",erreur)
183 self.entry_arg.focus()
184 self.entry_arg.selection_range(0,END)
185 self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
187 self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
188 self.entry_exp.focus()
190 def verif_corps(self,event=None):
192 Lance la vérification du corps de formule présent dans entry_exp
194 new_nom = self.entry_nom.get()
195 new_typ = self.option_menu_typ.getcurselection()
196 new_arg = self.entry_arg.get()
197 new_exp = self.entry_exp.get()
199 test,erreur = 0,"Aucune expression fournie !"
201 test,erreur = self.node.item.verif_formule((new_nom,new_typ,new_arg,new_exp))
204 tkMessageBox.showerror("Corps de FORMULE invalide",erreur)
205 self.entry_exp.focus()
206 self.entry_exp.selection_range(0,END)
207 self.parent.appli.affiche_infos("Corps de FORMULE invalide")
209 self.parent.appli.affiche_infos("Corps de FORMULE valide")
211 class FORMULETreeItem(compooper.EtapeTreeItem):
213 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
214 qui représente la FORMULE
219 self.setfunction = self.set_valeur
221 # ---------------------------------------------------------------------------
222 # API de FORMULE pour l'arbre
223 # ---------------------------------------------------------------------------
224 def GetSubList(self):
226 Retourne la liste des fils de self
227 On considère que FORMULE n'a pas de fils
228 --> modification par rapport à MACRO classique
230 # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
231 # de façon traditionnelle
234 def GetIconName(self):
236 Retourne le nom de l'icône à afficher dans l'arbre
237 Ce nom dépend de la validité de l'objet
239 if self.object.isactif():
240 if self.object.isvalid():
241 return "ast-green-square"
243 return "ast-red-square"
245 return "ast-white-text"
247 def GetLabelText(self):
248 """ Retourne 3 valeurs :
249 - le texte à afficher dans le noeud représentant l'item
250 - la fonte dans laquelle afficher ce texte
251 - la couleur du texte
253 if self.object.isactif():
254 # None --> fonte et couleur par défaut
255 return self.labeltext,None,None
257 return self.labeltext,fontes.standard_italique,None
259 # ---------------------------------------------------------------------------
260 # Méthodes permettant la modification et la lecture des attributs
261 # du paramètre = API graphique de la FORMULE pour Panel et EFICAS
262 # ---------------------------------------------------------------------------
266 Retourne le nom de la FORMULE
268 return self.object.get_nom()
272 Retourne le type de la valeur retournée par la FORMULE
274 return self.object.type_retourne
278 Retourne les arguments de la FORMULE
280 args = self.object.arguments
282 return self.object.arguments[1:-1] #on enlève les parenthèses ouvrante et fermante
288 Retourne le corps de la FORMULE
290 return self.object.corps
292 def get_liste_types_autorises(self):
294 Retourne la liste des types autorises pour les valeurs de sortie
297 return self.object.l_types_autorises
299 def save_formule(self,new_nom,new_typ,new_arg,new_exp):
301 Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
303 - si oui, stocke ces paramètres comme nouveaux paramètres de la
304 FORMULE courante et retourne 1
305 - si non, laisse les paramètres anciens de la FORMULE inchangés et
308 test,erreur = self.object.verif_formule(formule=(new_nom,new_typ,new_arg,
311 # la formule est bien correcte : on sauve les nouveaux paramètres
312 self.object.update(formule=(new_nom,new_typ,new_arg,new_exp))
315 # ---------------------------------------------------------------------------
316 # Accès aux méthodes de vérification de l'objet FORM_ETAPE
317 # ---------------------------------------------------------------------------
319 def verif_nom(self,nom):
321 Lance la vérification du nom passé en argument
323 return self.object.verif_nom(nom)
325 def verif_arguments(self,arguments):
327 Lance la vérification des arguments passés en argument
329 return self.object.verif_arguments('('+arguments+')')
331 def verif_formule(self,formule):
333 Lance la vérification de FORMULE passée en argument
335 return self.object.verif_formule(formule=formule)
338 treeitem =FORMULETreeItem
339 objet = Accas.FORM_ETAPE