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 FORMULE, cad le panneau et l'item de l'arbre
27 # import modules Python
32 # import modules EFICAS
38 Fonte_TITRE = fontes.standard_gras_souligne
41 class FORMULEPanel(panels.OngletPanel):
43 Classe servant à construire le panneau associé à un paramètre.
44 C'est au moyen de ce panneau que l'utilisateur peut accéder
45 aux nom et valeur du paramètre en vue éventuellement de les
50 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
51 nb.pack(fill = 'both', expand = 1)
53 nb.add('Formule', tab_text='Définition Formule')
54 nb.add('Commande', tab_text='Nouvelle Commande')
55 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
56 self.makeFormulePage(nb.page("Formule"))
57 self.makeCommandePage(nb.page("Commande"))
58 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
59 nb.tab('Formule').focus_set()
62 def makeFormulePage(self,page):
64 Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
66 self.frame_valeur = Frame(page)
67 self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
68 # affichage du titre du panneau
69 self.titre = StringVar()
70 self.titre.set("FORMULE "+self.node.item.get_nom())
72 self.entry_nom = Entry(self.frame_valeur)
73 Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
74 # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
76 Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
77 Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
78 self.entry_arg = Entry(self.frame_valeur)
79 Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.65)
80 self.entry_exp = Entry(self.frame_valeur)
82 # binding sur les entries
83 self.entry_nom.bind("<Return>",self.verif_nom)
84 self.entry_arg.bind("<Return>",self.verif_arguments)
85 self.entry_exp.bind("<Return>",self.verif_corps)
86 # affichage des entries
87 self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
88 self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
90 # affichage d'une phrase d'aide pour les arguments
91 aide = """Entrer les arguments sous la forme
92 de VARIABLES séparées par des virgules (,)
94 Label(self.frame_valeur,text=aide, justify="l").place(relx=0.5,rely=0.47,anchor='n')
96 self.entry_exp.place(relx=0.35,rely=0.65,relwidth=0.60)
97 # affichage d'une phrase d'aide pour l'expression
98 aide = """Un retour de chariot dans une zone de saisie vous permet de vérifier si
99 la valeur que vous avez entrée est valide.
100 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
101 valeurs seront effectivement prises en compte."""
102 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.75,anchor='n')
104 # affichage des nom, type retourné, arguments et corps de la FORMULE
105 self.display_valeur()
106 # affichage des boutons
108 # entry_nom prend le focus
109 self.entry_nom.focus()
111 def make_buttons(self):
113 Crée les boutons du panneau
115 self.bouton_sup.place_forget()
116 self.bouton_doc.place_forget()
117 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
118 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
120 self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center')
121 self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
122 self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center')
123 self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center')
125 def change_valeur(self):
127 Stocke la nouvelle FORMULE décrite par l'utilisateur
129 if self.parent.modified == 'n' : self.parent.init_modif()
130 # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
131 new_nom = self.entry_nom.get()
133 new_arg = self.entry_arg.get()
134 new_exp = self.entry_exp.get()
137 # on essaie de les stocker
138 test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
140 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
142 self.display_valeur()
143 self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
145 # la formule est incorrecte : on affiche les erreurs
146 widgets.showerror("Formule incorrecte",erreur)
147 self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
149 def display_valeur(self):
151 Affiche dans self.widget_text de la valeur de l'objet FORMULE
152 (annule d'éventuelles modifications faite par l'utilisateur)
154 # on efface tout texte affiché dans les entries
155 self.entry_nom.delete(0,END)
156 self.entry_arg.delete(0,END)
157 self.entry_exp.delete(0,END)
158 # on rafraîchit le titre du panneau
159 self.titre.set('FORMULE '+self.node.item.get_nom())
160 # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
161 nom = self.node.item.get_nom()
163 self.entry_nom.insert(END,nom)
164 args = self.node.item.get_args()
166 self.entry_arg.insert(END,args)
167 corps = self.node.item.get_corps()
169 self.entry_exp.insert(END,self.node.item.get_corps())
171 def verif_nom(self,event=None):
173 Lance la vérification du nom présent dans entry_nom
175 nom = self.entry_nom.get()
177 test,erreur = 0,"Aucun nom fourni !"
179 test,erreur = self.node.item.verif_nom(nom)
181 widgets.showerror("Nom invalide",erreur)
182 self.entry_nom.focus()
183 self.entry_nom.selection_range(0,END)
184 self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
186 self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
187 self.entry_arg.focus()
189 def verif_arguments(self,event=None):
191 Lance la vérification des arguments présents dans entry_arg
193 arguments = self.entry_arg.get()
195 test,erreur = 0,"Aucun argument fourni"
197 test,erreur = self.node.item.verif_arguments(arguments)
199 widgets.showerror("Argument(s) invalide(s)",erreur)
200 self.entry_arg.focus()
201 self.entry_arg.selection_range(0,END)
202 self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
204 self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
205 self.entry_exp.focus()
207 def verif_corps(self,event=None):
209 Lance la vérification du corps de formule présent dans entry_exp
211 new_nom = self.entry_nom.get()
213 new_arg = self.entry_arg.get()
214 new_exp = self.entry_exp.get()
216 test,erreur = 0,"Aucune expression fournie !"
218 test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp))
221 widgets.showerror("Corps de FORMULE invalide",erreur)
222 self.entry_exp.focus()
223 self.entry_exp.selection_range(0,END)
224 self.parent.appli.affiche_infos("Corps de FORMULE invalide")
226 self.parent.appli.affiche_infos("Corps de FORMULE valide")
228 class FORMULETreeItem(compooper.EtapeTreeItem):
230 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
231 qui représente la FORMULE
236 self.setfunction = self.set_valeur
238 # ---------------------------------------------------------------------------
239 # API de FORMULE pour l'arbre
240 # ---------------------------------------------------------------------------
241 def GetSubList(self):
243 Retourne la liste des fils de self
244 On considère que FORMULE n'a pas de fils
245 --> modification par rapport à MACRO classique
247 # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
248 # de façon traditionnelle
251 def GetIconName(self):
253 Retourne le nom de l'icône à afficher dans l'arbre
254 Ce nom dépend de la validité de l'objet
256 if self.object.isactif():
257 self.object.state="modified"
258 if self.object.isvalid():
259 return "ast-green-square"
261 return "ast-red-square"
263 return "ast-white-text"
265 def GetLabelText(self):
266 """ Retourne 3 valeurs :
267 - le texte à afficher dans le noeud représentant l'item
268 - la fonte dans laquelle afficher ce texte
269 - la couleur du texte
271 if self.object.isactif():
272 # None --> fonte et couleur par défaut
273 return self.labeltext,None,None
275 return self.labeltext,fontes.standard_italique,None
277 # ---------------------------------------------------------------------------
278 # Méthodes permettant la modification et la lecture des attributs
279 # du paramètre = API graphique de la FORMULE pour Panel et EFICAS
280 # ---------------------------------------------------------------------------
284 Retourne le nom de la FORMULE
286 return self.object.get_nom()
290 Retourne le type de la valeur retournée par la FORMULE
292 return self.object.type_retourne
296 Retourne les arguments de la FORMULE
299 for mot in self.object.mc_liste:
300 if mot.nom == 'NOM_PARA':
304 if args[0] == "(" and args[-1] ==")":
310 Retourne le corps de la FORMULE
313 for mot in self.object.mc_liste:
314 if mot.nom == 'VALE':
320 def get_liste_types_autorises(self):
322 Retourne la liste des types autorises pour les valeurs de sortie
325 return self.object.l_types_autorises
327 def save_formule(self,new_nom,new_typ,new_arg,new_exp):
329 Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
331 - si oui, stocke ces paramètres comme nouveaux paramètres de la
332 FORMULE courante et retourne 1
333 - si non, laisse les paramètres anciens de la FORMULE inchangés et
336 test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
339 # la formule est bien correcte : on sauve les nouveaux paramètres
340 test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
343 # ---------------------------------------------------------------------------
344 # Accès aux méthodes de vérification de l'objet FORM_ETAPE
345 # ---------------------------------------------------------------------------
347 def verif_nom(self,nom):
349 Lance la vérification du nom passé en argument
351 return self.object.verif_nom(nom)
353 def verif_arguments(self,arguments):
355 Lance la vérification des arguments passés en argument
357 return self.object.verif_arguments('('+arguments+')')
359 def verif_formule(self,formule):
361 Lance la vérification de FORMULE passée en argument
363 return self.object.verif_formule(formule=formule)
366 def verif_formule_python(self,formule):
368 Lance la vérification de FORMULE passée en argument
370 return self.object.verif_formule_python(formule=formule)
373 treeitem =FORMULETreeItem
374 objet = Accas.FORM_ETAPE