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 FORMULE, cad le panneau et l'item de l'arbre
26 # import modules Python
32 # import modules EFICAS
37 Fonte_TITRE = fontes.standard_gras_souligne
40 class FORMULEPanel(panels.OngletPanel):
42 Classe servant à construire le panneau associé à un paramètre.
43 C'est au moyen de ce panneau que l'utilisateur peut accéder
44 aux nom et valeur du paramètre en vue éventuellement de les
49 nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
50 nb.pack(fill = 'both', expand = 1)
52 nb.add('Formule', tab_text='Définition Formule')
53 nb.add('Commande', tab_text='Nouvelle Commande')
54 nb.add('Commentaire',tab_text='Paramètre/Commentaire')
55 self.makeFormulePage(nb.page("Formule"))
56 self.makeCommandePage(nb.page("Commande"))
57 self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
58 nb.tab('Formule').focus_set()
61 def makeFormulePage(self,page):
63 Crée la page qui permet d'afficher et d'éditer le texte de la FORMULE
65 self.frame_valeur = Frame(page)
66 self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
67 # affichage du titre du panneau
68 self.titre = StringVar()
69 self.titre.set("FORMULE "+self.node.item.get_nom())
70 Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.,anchor='n')
71 # création des labels et entries associés aux nom, type retourné, arguments et corps de la FORMULE
72 Label(self.frame_valeur,text= 'Nom de la formule : ').place(relx=0.,rely=0.1)
73 self.entry_nom = Entry(self.frame_valeur)
74 Label(self.frame_valeur,text= 'Type retourné : ').place(relx=0.,rely=0.25)
75 self.option_menu_typ = Pmw.OptionMenu(self.frame_valeur,labelpos='w',
77 items = self.node.item.get_liste_types_autorises())
78 self.option_menu_typ.place(relx=0.33,rely=0.23)
79 Label(self.frame_valeur,text= 'Arguments : ').place(relx=0.,rely=0.40)
80 self.entry_arg = Entry(self.frame_valeur)
81 Label(self.frame_valeur,text= 'Expression : ').place(relx=0.,rely=0.60)
82 self.entry_exp = Entry(self.frame_valeur)
83 # binding sur les entries
84 self.entry_nom.bind("<Return>",self.verif_nom)
85 self.entry_arg.bind("<Return>",self.verif_arguments)
86 self.entry_exp.bind("<Return>",self.verif_corps)
87 # affichage des entries
88 self.entry_nom.place(relx=0.35,rely=0.10,relwidth=0.2)
89 self.entry_arg.place(relx=0.35,rely=0.40,relwidth=0.4)
90 Label(self.frame_valeur,text= 'Entrer les arguments sous la forme TYPE : VARIABLE séparés par des ,').place(relx=0.35,rely=0.45)
91 Label(self.frame_valeur,text= 'Exemple REEL:INST,ENTIER:COEF').place(relx=0.35,rely=0.49)
92 self.entry_exp.place(relx=0.35,rely=0.60,relwidth=0.60)
93 # affichage d'une phrase d'aide
95 Un retour de chariot dans une zone de saisie vous permet de vérifier si
96 la valeur que vous avez entrée est valide.
97 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
98 valeurs seront effectivement prises en compte
100 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.7,anchor='n')
101 # affichage des nom, type retourné, arguments et corps de la FORMULE
102 self.display_valeur()
103 # affichage des boutons
105 # entry_nom prend le focus
106 self.entry_nom.focus()
108 def make_buttons(self):
110 Crée les boutons du panneau
112 self.bouton_sup.place_forget()
113 self.bouton_doc.place_forget()
114 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
115 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
117 self.bouton_val.place(relx=0.15,rely=0.5,relheight=0.8,anchor='center')
118 self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center')
119 self.bouton_sup.place(relx=0.65,rely=0.5,relheight=0.8,anchor='center')
120 self.bouton_doc.place(relx=0.90,rely=0.5,relheight=0.8,anchor='center')
122 def change_valeur(self):
124 Stocke la nouvelle FORMULE décrite par l'utilisateur
126 if self.parent.modified == 'n' : self.parent.init_modif()
127 # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
128 new_nom = self.entry_nom.get()
129 new_typ = self.option_menu_typ.getcurselection()
130 new_arg = self.entry_arg.get()
131 new_exp = self.entry_exp.get()
132 # on essaie de les stocker
133 test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
135 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
137 self.display_valeur()
138 self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
140 # la formule est incorrecte : on affiche les erreurs
141 tkMessageBox.showerror("Formule incorrecte",erreur)
142 self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
144 def display_valeur(self):
146 Affiche dans self.widget_text de la valeur de l'objet FORMULE
147 (annule d'éventuelles modifications faite par l'utilisateur)
149 # on efface tout texte affiché dans les entries
150 self.entry_nom.delete(0,END)
151 self.entry_arg.delete(0,END)
152 self.entry_exp.delete(0,END)
153 # on rafraîchit le titre du panneau
154 self.titre.set('FORMULE '+self.node.item.get_nom())
155 # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
156 nom = self.node.item.get_nom()
158 self.entry_nom.insert(END,nom)
159 type = self.node.item.get_type()
161 self.option_menu_typ.invoke(type)
162 args = self.node.item.get_args()
164 self.entry_arg.insert(END,args)
165 corps = self.node.item.get_corps()
167 self.entry_exp.insert(END,self.node.item.get_corps())
169 def verif_nom(self,event=None):
171 Lance la vérification du nom présent dans entry_nom
173 nom = self.entry_nom.get()
\r
175 test,erreur = 0,"Aucun nom fourni !"
\r
177 test,erreur = self.node.item.verif_nom(nom)
179 tkMessageBox.showerror("Nom invalide",erreur)
180 self.entry_nom.focus()
181 self.entry_nom.selection_range(0,END)
182 self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
184 self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
185 self.entry_arg.focus()
187 def verif_arguments(self,event=None):
189 Lance la vérification des arguments présents dans entry_arg
191 arguments = self.entry_arg.get()
\r
192 if arguments == '' :
\r
193 test,erreur = 0,"Aucun argument fourni"
\r
195 test,erreur = self.node.item.verif_arguments(arguments)
197 tkMessageBox.showerror("Argument(s) invalide(s)",erreur)
198 self.entry_arg.focus()
199 self.entry_arg.selection_range(0,END)
200 self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
202 self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
203 self.entry_exp.focus()
205 def verif_corps(self,event=None):
207 Lance la vérification du corps de formule présent dans entry_exp
209 new_nom = self.entry_nom.get()
210 new_typ = self.option_menu_typ.getcurselection()
211 new_arg = self.entry_arg.get()
212 new_exp = self.entry_exp.get()
214 test,erreur = 0,"Aucune expression fournie !"
216 test,erreur = self.node.item.verif_formule((new_nom,new_typ,new_arg,new_exp))
219 tkMessageBox.showerror("Corps de FORMULE invalide",erreur)
220 self.entry_exp.focus()
221 self.entry_exp.selection_range(0,END)
222 self.parent.appli.affiche_infos("Corps de FORMULE invalide")
224 self.parent.appli.affiche_infos("Corps de FORMULE valide")
226 class FORMULETreeItem(compooper.EtapeTreeItem):
228 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
229 qui représente la FORMULE
234 self.setfunction = self.set_valeur
236 # ---------------------------------------------------------------------------
237 # API de FORMULE pour l'arbre
238 # ---------------------------------------------------------------------------
239 def GetSubList(self):
241 Retourne la liste des fils de self
242 On considère que FORMULE n'a pas de fils
243 --> modification par rapport à MACRO classique
245 # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
246 # de façon traditionnelle
249 def GetIconName(self):
251 Retourne le nom de l'icône à afficher dans l'arbre
252 Ce nom dépend de la validité de l'objet
254 if self.object.isactif():
255 if self.object.isvalid():
256 return "ast-green-square"
258 return "ast-red-square"
260 return "ast-white-text"
262 def GetLabelText(self):
263 """ Retourne 3 valeurs :
264 - le texte à afficher dans le noeud représentant l'item
265 - la fonte dans laquelle afficher ce texte
266 - la couleur du texte
268 if self.object.isactif():
269 # None --> fonte et couleur par défaut
270 return self.labeltext,None,None
272 return self.labeltext,fontes.standard_italique,None
274 # ---------------------------------------------------------------------------
275 # Méthodes permettant la modification et la lecture des attributs
276 # du paramètre = API graphique de la FORMULE pour Panel et EFICAS
277 # ---------------------------------------------------------------------------
281 Retourne le nom de la FORMULE
283 return self.object.get_nom()
287 Retourne le type de la valeur retournée par la FORMULE
289 return self.object.type_retourne
293 Retourne les arguments de la FORMULE
295 args = self.object.arguments
297 return self.object.arguments[1:-1] #on enlève les parenthèses ouvrante et fermante
303 Retourne le corps de la FORMULE
305 return self.object.corps
307 def get_liste_types_autorises(self):
309 Retourne la liste des types autorises pour les valeurs de sortie
312 return self.object.l_types_autorises
314 def save_formule(self,new_nom,new_typ,new_arg,new_exp):
316 Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
318 - si oui, stocke ces paramètres comme nouveaux paramètres de la
319 FORMULE courante et retourne 1
320 - si non, laisse les paramètres anciens de la FORMULE inchangés et
323 test,erreur = self.object.verif_formule(formule=(new_nom,new_typ,new_arg,
326 # la formule est bien correcte : on sauve les nouveaux paramètres
327 self.object.update(formule=(new_nom,new_typ,new_arg,new_exp))
330 # ---------------------------------------------------------------------------
331 # Accès aux méthodes de vérification de l'objet FORM_ETAPE
332 # ---------------------------------------------------------------------------
334 def verif_nom(self,nom):
336 Lance la vérification du nom passé en argument
338 return self.object.verif_nom(nom)
340 def verif_arguments(self,arguments):
342 Lance la vérification des arguments passés en argument
344 return self.object.verif_arguments('('+arguments+')')
346 def verif_formule(self,formule):
348 Lance la vérification de FORMULE passée en argument
350 return self.object.verif_formule(formule=formule)
353 treeitem =FORMULETreeItem
354 objet = Accas.FORM_ETAPE