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()
135 self.verif_arguments()
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()
168 if texte_args != "" :
169 texte_args = texte_args +","
170 texte_args=texte_args + i
171 self.entry_arg.insert(END,texte_args)
172 corps = self.node.item.get_corps()
174 self.entry_exp.insert(END,self.node.item.get_corps())
176 def verif_nom(self,event=None):
178 Lance la vérification du nom présent dans entry_nom
180 nom = self.entry_nom.get()
182 test,erreur = 0,"Aucun nom fourni !"
184 test,erreur = self.node.item.verif_nom(nom)
186 widgets.showerror("Nom invalide",erreur)
187 self.entry_nom.focus()
188 self.entry_nom.selection_range(0,END)
189 self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
191 self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
192 self.entry_arg.focus()
194 def verif_arguments(self,event=None):
196 Lance la vérification des arguments présents dans entry_arg
198 arguments = self.entry_arg.get()
200 test,erreur = 0,"Aucun argument fourni"
202 test,erreur = self.node.item.verif_arguments(arguments)
204 widgets.showerror("Argument(s) invalide(s)",erreur)
205 self.entry_arg.focus()
206 self.entry_arg.selection_range(0,END)
207 self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
209 self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
210 self.entry_exp.focus()
212 def verif_corps(self,event=None):
214 Lance la vérification du corps de formule présent dans entry_exp
216 new_nom = self.entry_nom.get()
218 new_arg = self.entry_arg.get()
219 new_exp = self.entry_exp.get()
221 test,erreur = 0,"Aucune expression fournie !"
223 test,erreur = self.node.item.verif_formule_python((new_nom,new_typ,new_arg,new_exp))
226 widgets.showerror("Corps de FORMULE invalide",erreur)
227 self.entry_exp.focus()
228 self.entry_exp.selection_range(0,END)
229 self.parent.appli.affiche_infos("Corps de FORMULE invalide")
231 self.parent.appli.affiche_infos("Corps de FORMULE valide")
233 class FORMULETreeItem(compooper.EtapeTreeItem):
235 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
236 qui représente la FORMULE
241 self.setfunction = self.set_valeur
243 # ---------------------------------------------------------------------------
244 # API de FORMULE pour l'arbre
245 # ---------------------------------------------------------------------------
246 def GetSubList(self):
248 Retourne la liste des fils de self
249 On considère que FORMULE n'a pas de fils
250 --> modification par rapport à MACRO classique
252 # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
253 # de façon traditionnelle
256 def GetIconName(self):
258 Retourne le nom de l'icône à afficher dans l'arbre
259 Ce nom dépend de la validité de l'objet
261 if self.object.isactif():
262 self.object.state="modified"
263 if self.object.isvalid():
264 return "ast-green-square"
266 return "ast-red-square"
268 return "ast-white-text"
270 def GetLabelText(self):
271 """ Retourne 3 valeurs :
272 - le texte à afficher dans le noeud représentant l'item
273 - la fonte dans laquelle afficher ce texte
274 - la couleur du texte
276 if self.object.isactif():
277 # None --> fonte et couleur par défaut
278 return self.labeltext,None,None
280 return self.labeltext,fontes.standard_italique,None
282 # ---------------------------------------------------------------------------
283 # Méthodes permettant la modification et la lecture des attributs
284 # du paramètre = API graphique de la FORMULE pour Panel et EFICAS
285 # ---------------------------------------------------------------------------
289 Retourne le nom de la FORMULE
291 return self.object.get_nom()
295 Retourne le type de la valeur retournée par la FORMULE
297 return self.object.type_retourne
301 Retourne les arguments de la FORMULE
304 for mot in self.object.mc_liste:
305 if mot.nom == 'NOM_PARA':
309 if args[0] == "(" and args[-1] ==")":
315 Retourne le corps de la FORMULE
318 for mot in self.object.mc_liste:
319 if mot.nom == 'VALE':
325 def get_liste_types_autorises(self):
327 Retourne la liste des types autorises pour les valeurs de sortie
330 return self.object.l_types_autorises
332 def save_formule(self,new_nom,new_typ,new_arg,new_exp):
334 Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
336 - si oui, stocke ces paramètres comme nouveaux paramètres de la
337 FORMULE courante et retourne 1
338 - si non, laisse les paramètres anciens de la FORMULE inchangés et
341 test,erreur = self.object.verif_formule_python(formule=(new_nom,new_typ,new_arg,
344 # la formule est bien correcte : on sauve les nouveaux paramètres
345 test=self.object.update_formule_python(formule=(new_nom,new_typ,new_exp,new_arg))
348 # ---------------------------------------------------------------------------
349 # Accès aux méthodes de vérification de l'objet FORM_ETAPE
350 # ---------------------------------------------------------------------------
352 def verif_nom(self,nom):
354 Lance la vérification du nom passé en argument
356 return self.object.verif_nom(nom)
358 def verif_arguments(self,arguments):
360 Lance la vérification des arguments passés en argument
362 return self.object.verif_arguments('('+arguments+')')
364 def verif_formule(self,formule):
366 Lance la vérification de FORMULE passée en argument
368 return self.object.verif_formule(formule=formule)
371 def verif_formule_python(self,formule):
373 Lance la vérification de FORMULE passée en argument
375 return self.object.verif_formule_python(formule=formule)
378 treeitem =FORMULETreeItem
379 objet = Accas.FORM_ETAPE