]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/compoparam.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceTK / compoparam.py
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.
9 #
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.
14 #
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.
18 #
19 #
20 # ======================================================================
21 """
22    Ce module contient les classes permettant de définir les objets graphiques
23    représentant un objet de type PARAMETRE, cad le panneau et l'item de l'arbre
24    d'EFICAS
25 """
26
27 # import modules Python
28 from Tkinter import *
29 import Pmw
30 import string
31
32 # import modules EFICAS
33 from Editeur import Objecttreeitem
34 import panels
35 import fontes
36
37
38 Fonte_PARAMETRE = fontes.standard_italique
39 Fonte_TITRE = fontes.standard_gras_souligne
40
41
42 class PARAMPanel(panels.OngletPanel):
43   """
44   Classe servant à construire le panneau associé à un paramètre.
45   C'est au moyen de ce panneau que l'utilisateur peut accéder
46   aux nom et valeur du paramètre en vue éventuellement de les
47   modifier.
48   """
49
50   def init(self):
51     """
52     Initialise les frame des panneaux contextuels relatifs à un PARAMETRE
53     """
54     nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
55     nb.pack(fill = 'both', expand = 1)
56     self.nb=nb
57     nb.add('Parametre', tab_text='Valeur Paramètre')
58     nb.add('Commande', tab_text='Nouvelle Commande')
59     nb.add('Commentaire',tab_text='Paramètre/Commentaire')
60     self.makeParametrePage(nb.page("Parametre"))
61     self.makeCommandePage(nb.page("Commande"))
62     self.makeParamCommentPage_for_etape(nb.page("Commentaire"))
63     nb.tab('Parametre').focus_set()
64     nb.setnaturalsize()
65     self.make_buttons()
66     self.enlevebind()
67     self.creebind()
68     
69   def makeParametrePage(self,page):
70     """
71     Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
72     """
73     self.frame_valeur = Frame(page)
74     #self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
75     self.frame_valeur.pack(expand=1)
76     # affichage du titre du panneau
77     self.titre = StringVar()
78     self.titre.set("PARAMETRE "+self.node.item.get_nom())
79     #Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
80     Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).grid(row=0,columnspan=2,padx=5,pady=5)
81     # création des labels et entries associés aux nom et valeur du paramètre
82     #Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
83     Label(self.frame_valeur,text= 'Nom du paramètre : ').grid(row=1,sticky=W,padx=5,pady=5)
84     self.entry_nom = Entry(self.frame_valeur)
85     #Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
86     Label(self.frame_valeur,text= 'Valeur du paramètre : ').grid(row=2,sticky=W,padx=5,pady=5)
87     self.entry_val = Entry(self.frame_valeur)
88     # binding sur entry_nom
89     self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
90     self.entry_val.bind("<Return>",lambda e,s=self : s.change_valeur())
91     self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
92     self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
93     # affichage des entries
94     #self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
95     self.entry_nom.grid(row=1,column=1,sticky=W,padx=5,pady=5)
96     #self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
97     self.entry_val.grid(row=2,column=1,sticky=W,padx=5,pady=5)
98     # affichage d'une phrase d'aide
99     aide = """
100     Un retour de chariot dans une zone de saisie vous permet de vérifier si
101     la valeur que vous avez entrée est valide.
102     Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
103     valeurs seront effectivement prises en compte
104     """
105     #Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
106     Label(self.frame_valeur,text=aide).grid(row=3,columnspan=2,padx=5,pady=5)
107     self.frame_valeur.columnconfigure(1,weight=1)
108     # affichage des nom et valeur du paramètre
109     self.display_valeur()
110     self.entry_nom.focus()
111
112   def make_buttons(self):
113     """
114     Crée les boutons du panneau
115     """
116     #self.bouton_sup.place_forget()
117     #self.bouton_doc.place_forget()
118     #self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
119     #self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
120     #self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
121     #self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
122     #self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
123
124     self.bouton_sup.pack_forget()
125     self.bouton_doc.pack_forget()
126     self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur)
127     self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur)
128     self.bouton_val.pack(side='left',padx=5, pady=5)
129     self.bouton_ann.pack(side='left',padx=5, pady=5)
130     self.bouton_sup.pack(side='right',padx=5, pady=5)
131
132   def change_valeur(self):
133     """
134     Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
135     """
136     if self.parent.modified == 'n' : self.parent.init_modif()
137     new_nom = self.entry_nom.get()
138     new_val = self.entry_val.get()
139     self.node.item.set_nom(new_nom)
140     self.node.item.set_valeur(new_val)
141     self.node.update()
142     self.display_valeur()
143     
144   def display_valeur(self):
145     """
146     Affiche dans self.widget_text la valeur de l'objet PARAMETRE
147     (annule d'éventuelles modifications faite par l'utilisateur)
148     """
149     self.entry_nom.delete(0,END)
150     self.entry_val.delete(0,END)
151     self.titre.set('PARAMETRE '+self.node.item.get_nom())
152     self.entry_nom.insert(END,self.node.item.get_nom())
153     self.entry_val.insert(END,self.node.item.get_valeur())
154
155 class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
156     """
157     Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
158     qui représente le PARAMETRE
159     """
160     panel = PARAMPanel
161
162     def init(self):
163       self.setfunction = self.set_valeur
164
165 # ---------------------------------------------------------------------------
166 #                   API du PARAMETRE pour l'arbre 
167 # ---------------------------------------------------------------------------
168
169     def GetIconName(self):
170       """
171       Retourne le nom de l'icône associée au noeud qui porte self,
172       dépendant de la validité de l'objet
173       NB : un PARAMETRE est toujours valide ...
174       """
175       if self.isactif():
176           if self.isvalid():
177               return "ast-green-square"
178           else:
179               return "ast-red-square"
180       else:
181           return "ast-white-square"
182
183     def GetLabelText(self):
184         """ Retourne 3 valeurs :
185         - le texte à afficher dans le noeud représentant l'item
186         - la fonte dans laquelle afficher ce texte
187         - la couleur du texte
188         """
189         return 'Paramètre',Fonte_PARAMETRE,None
190
191     def GetText(self):
192       """
193       Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
194       Ce texte est tronqué à 25 caractères
195       """
196       texte = repr(self.object)
197       texte = string.split(texte,'\n')[0]
198       if len(texte) < 25 :
199           return texte
200       else :
201           return texte[0:24]+'...'
202
203     def GetSubList(self):
204       """
205       Retourne la liste des fils de self
206       """
207       return []
208     
209 # ---------------------------------------------------------------------------
210 #       Méthodes permettant la modification et la lecture des attributs
211 #       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
212 # ---------------------------------------------------------------------------
213
214     def get_valeur(self):
215       """
216       Retourne la valeur de l'objet PARAMETRE cad son texte
217       """
218       if self.object.valeur is None: return ''
219       else: return self.object.valeur 
220
221     def get_nom(self):
222       """
223       Retourne le nom du paramètre
224       """
225       return self.object.nom
226
227     def set_valeur(self,new_valeur):
228       """
229       Affecte valeur à l'objet PARAMETRE
230       """
231       self.object.set_valeur(new_valeur)
232
233     def set_nom(self,new_nom):
234       """
235       Renomme le paramètre
236       """
237       self.object.set_nom(new_nom)
238       #self.object.set_attribut('nom',new_nom)
239
240     def get_fr(self):
241       """
242       Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
243       """
244       return "Définition d'un paramètre"
245     
246 import Extensions.parametre
247 treeitem =PARAMTreeItem
248 objet = Extensions.parametre.PARAMETRE