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.55)
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 self.entry_exp.place(relx=0.35,rely=0.55,relwidth=0.55)
91 # affichage d'une phrase d'aide
93 Un retour de chariot dans une zone de saisie vous permet de vérifier si
94 la valeur que vous avez entrée est valide.
95 Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
96 valeurs seront effectivement prises en compte
98 Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.7,anchor='n')
99 # affichage des nom, type retourné, arguments et corps de la FORMULE
100 self.display_valeur()
101 # affichage des boutons
103 # entry_nom prend le focus
104 self.entry_nom.focus()
106 def make_buttons(self):
108 Crée les boutons du panneau
110 self.bouton_sup.place_forget()
111 self.bouton_doc.place_forget()
112 self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
113 self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
115 self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
116 self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
117 self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
119 def change_valeur(self):
121 Stocke la nouvelle FORMULE décrite par l'utilisateur
123 if self.parent.modified == 'n' : self.parent.init_modif()
124 # on récupère les nouveaux nom, type retourné, arguments et corps de la FORMULE
125 new_nom = self.entry_nom.get()
126 new_typ = self.option_menu_typ.getcurselection()
127 new_arg = self.entry_arg.get()
128 new_exp = self.entry_exp.get()
129 # on essaie de les stocker
130 test,erreur = self.node.item.save_formule(new_nom,new_typ,new_arg,new_exp)
132 # on a pu stocker les nouveaux paramètres : il faut rafraîchir l'affichage
134 self.display_valeur()
135 self.parent.appli.affiche_infos("FORMULE %s modifiée" %self.node.item.get_nom())
137 # la formule est incorrecte : on affiche les erreurs
138 tkMessageBox.showerror("Formule incorrecte",erreur)
139 self.parent.appli.affiche_infos("FORMULE %s non modifiée" %self.node.item.get_nom())
141 def display_valeur(self):
143 Affiche dans self.widget_text de la valeur de l'objet FORMULE
144 (annule d'éventuelles modifications faite par l'utilisateur)
146 # on efface tout texte affiché dans les entries
147 self.entry_nom.delete(0,END)
148 self.entry_arg.delete(0,END)
149 self.entry_exp.delete(0,END)
150 # on rafraîchit le titre du panneau
151 self.titre.set('FORMULE '+self.node.item.get_nom())
152 # on insére les nouveaux nom, type retourné, arguments et corps de la FORMULE
153 nom = self.node.item.get_nom()
155 self.entry_nom.insert(END,nom)
156 type = self.node.item.get_type()
158 self.option_menu_typ.invoke(type)
159 args = self.node.item.get_args()
161 self.entry_arg.insert(END,args)
162 corps = self.node.item.get_corps()
164 self.entry_exp.insert(END,self.node.item.get_corps())
166 def verif_nom(self,event=None):
168 Lance la vérification du nom présent dans entry_nom
170 nom = self.entry_nom.get()
\r
172 test,erreur = 0,"Aucun nom fourni !"
\r
174 test,erreur = self.node.item.verif_nom(nom)
176 tkMessageBox.showerror("Nom invalide",erreur)
177 self.entry_nom.focus()
178 self.entry_nom.selection_range(0,END)
179 self.parent.appli.affiche_infos("%s n'est pas un nom valide pour une FORMULE" %nom)
181 self.parent.appli.affiche_infos("%s est un nom valide pour une FORMULE" %nom)
182 self.entry_arg.focus()
184 def verif_arguments(self,event=None):
186 Lance la vérification des arguments présents dans entry_arg
188 arguments = self.entry_arg.get()
\r
189 if arguments == '' :
\r
190 test,erreur = 0,"Aucun argument fourni"
\r
192 test,erreur = self.node.item.verif_arguments(arguments)
194 tkMessageBox.showerror("Argument(s) invalide(s)",erreur)
195 self.entry_arg.focus()
196 self.entry_arg.selection_range(0,END)
197 self.parent.appli.affiche_infos("Argument(s) invalide(s) pour une FORMULE")
199 self.parent.appli.affiche_infos("Argument(s) valide(s) pour une FORMULE")
200 self.entry_exp.focus()
202 def verif_corps(self,event=None):
204 Lance la vérification du corps de formule présent dans entry_exp
206 new_nom = self.entry_nom.get()
207 new_typ = self.option_menu_typ.getcurselection()
208 new_arg = self.entry_arg.get()
209 new_exp = self.entry_exp.get()
211 test,erreur = 0,"Aucune expression fournie !"
213 test,erreur = self.node.item.verif_formule((new_nom,new_typ,new_arg,new_exp))
216 tkMessageBox.showerror("Corps de FORMULE invalide",erreur)
217 self.entry_exp.focus()
218 self.entry_exp.selection_range(0,END)
219 self.parent.appli.affiche_infos("Corps de FORMULE invalide")
221 self.parent.appli.affiche_infos("Corps de FORMULE valide")
223 class FORMULETreeItem(compooper.EtapeTreeItem):
225 Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
226 qui représente la FORMULE
231 self.setfunction = self.set_valeur
233 # ---------------------------------------------------------------------------
234 # API de FORMULE pour l'arbre
235 # ---------------------------------------------------------------------------
236 def GetSubList(self):
238 Retourne la liste des fils de self
239 On considère que FORMULE n'a pas de fils
240 --> modification par rapport à MACRO classique
242 # dans EFICAS on ne souhaite pas afficher les mots-clés fils de FORMULE
243 # de façon traditionnelle
246 def GetIconName(self):
248 Retourne le nom de l'icône à afficher dans l'arbre
249 Ce nom dépend de la validité de l'objet
251 if self.object.isactif():
252 if self.object.isvalid():
253 return "ast-green-square"
255 return "ast-red-square"
257 return "ast-white-text"
259 def GetLabelText(self):
260 """ Retourne 3 valeurs :
261 - le texte à afficher dans le noeud représentant l'item
262 - la fonte dans laquelle afficher ce texte
263 - la couleur du texte
265 if self.object.isactif():
266 # None --> fonte et couleur par défaut
267 return self.labeltext,None,None
269 return self.labeltext,fontes.standard_italique,None
271 # ---------------------------------------------------------------------------
272 # Méthodes permettant la modification et la lecture des attributs
273 # du paramètre = API graphique de la FORMULE pour Panel et EFICAS
274 # ---------------------------------------------------------------------------
278 Retourne le nom de la FORMULE
280 return self.object.get_nom()
284 Retourne le type de la valeur retournée par la FORMULE
286 return self.object.type_retourne
290 Retourne les arguments de la FORMULE
292 args = self.object.arguments
294 return self.object.arguments[1:-1] #on enlève les parenthèses ouvrante et fermante
300 Retourne le corps de la FORMULE
302 return self.object.corps
304 def get_liste_types_autorises(self):
306 Retourne la liste des types autorises pour les valeurs de sortie
309 return self.object.l_types_autorises
311 def save_formule(self,new_nom,new_typ,new_arg,new_exp):
313 Vérifie si (new_nom,new_typ,new_arg,new_exp) définit bien une FORMULE
315 - si oui, stocke ces paramètres comme nouveaux paramètres de la
316 FORMULE courante et retourne 1
317 - si non, laisse les paramètres anciens de la FORMULE inchangés et
320 test,erreur = self.object.verif_formule(formule=(new_nom,new_typ,new_arg,
323 # la formule est bien correcte : on sauve les nouveaux paramètres
324 self.object.update(formule=(new_nom,new_typ,new_arg,new_exp))
327 # ---------------------------------------------------------------------------
328 # Accès aux méthodes de vérification de l'objet FORM_ETAPE
329 # ---------------------------------------------------------------------------
331 def verif_nom(self,nom):
333 Lance la vérification du nom passé en argument
335 return self.object.verif_nom(nom)
337 def verif_arguments(self,arguments):
339 Lance la vérification des arguments passés en argument
341 return self.object.verif_arguments('('+arguments+')')
343 def verif_formule(self,formule):
345 Lance la vérification de FORMULE passée en argument
347 return self.object.verif_formule(formule=formule)
350 treeitem =FORMULETreeItem
351 objet = Accas.FORM_ETAPE