Salome HOME
pour elts de structure
[tools/eficas.git] / Editeur / 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 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     
67   def makeParametrePage(self,page):
68     """
69     Crée la page qui permet d'afficher et d'éditer le texte du PARAMETRE
70     """
71     self.frame_valeur = Frame(page)
72     self.frame_valeur.place(relwidth=0.9,relheight=0.9,relx=0.05,rely=0.05,anchor='nw')
73     # affichage du titre du panneau
74     self.titre = StringVar()
75     self.titre.set("PARAMETRE "+self.node.item.get_nom())
76     Label(self.frame_valeur,textvariable=self.titre,font=Fonte_TITRE).place(relx=0.5,rely=0.1,anchor='n')
77     # création des labels et entries associés aux nom et valeur du paramètre
78     Label(self.frame_valeur,text= 'Nom du paramètre : ').place(relx=0.,rely=0.3)
79     self.entry_nom = Entry(self.frame_valeur)
80     Label(self.frame_valeur,text= 'Valeur du paramètre : ').place(relx=0.,rely=0.5)
81     self.entry_val = Entry(self.frame_valeur)
82     # binding sur entry_nom
83     self.entry_nom.bind("<Return>",lambda e,s=self : s.entry_val.focus())
84     self.entry_val.bind("<Return>",lambda e,s=self : s.change_valeur())
85     self.entry_nom.bind("<KP_Enter>",lambda e,s=self : s.entry_val.focus())
86     self.entry_val.bind("<KP_Enter>",lambda e,s=self : s.change_valeur())
87     # affichage des entries
88     self.entry_nom.place(relx=0.35,rely=0.3,relwidth=0.3)
89     self.entry_val.place(relx=0.35,rely=0.5,relwidth=0.5)
90     # affichage d'une phrase d'aide
91     aide = """
92     Un retour de chariot dans une zone de saisie vous permet de vérifier si
93     la valeur que vous avez entrée est valide.
94     Ce n'est qu'après avoir appuyé sur le bouton Valider que les nouvelles
95     valeurs seront effectivement prises en compte
96     """
97     Label(self.frame_valeur,text=aide).place(relx=0.5,rely=0.65,anchor='n')
98     # affichage des nom et valeur du paramètre
99     self.display_valeur()
100     self.entry_nom.focus()
101
102   def make_buttons(self):
103     """
104     Crée les boutons du panneau
105     """
106     self.bouton_sup.place_forget()
107     self.bouton_doc.place_forget()
108     self.bouton_val = Button(self.fr_but,text='Valider',command=self.change_valeur,width=14)
109     self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14)
110
111     self.bouton_val.place(relx=0.25,rely=0.5,relheight=0.8,anchor='center')
112     self.bouton_ann.place(relx=0.50,rely=0.5,relheight=0.8,anchor='center')
113     self.bouton_sup.place(relx=0.75,rely=0.5,relheight=0.8,anchor='center')
114
115   def change_valeur(self):
116     """
117     Stocke la nouvelle valeur donnée par l'utilisateur comme valeur du PARAMETRE
118     """
119     if self.parent.modified == 'n' : self.parent.init_modif()
120     new_nom = self.entry_nom.get()
121     new_val = self.entry_val.get()
122     self.node.item.set_nom(new_nom)
123     self.node.item.set_valeur(new_val)
124     self.node.update()
125     self.display_valeur()
126     
127   def display_valeur(self):
128     """
129     Affiche dans self.widget_text la valeur de l'objet PARAMETRE
130     (annule d'éventuelles modifications faite par l'utilisateur)
131     """
132     self.entry_nom.delete(0,END)
133     self.entry_val.delete(0,END)
134     self.titre.set('PARAMETRE '+self.node.item.get_nom())
135     self.entry_nom.insert(END,self.node.item.get_nom())
136     self.entry_val.insert(END,self.node.item.get_valeur())
137
138 class PARAMTreeItem(Objecttreeitem.ObjectTreeItem):
139     """
140     Classe servant à définir l'item porté par le noeud de l'arbre d'EFICAS
141     qui représente le PARAMETRE
142     """
143     panel = PARAMPanel
144
145     def init(self):
146       self.setfunction = self.set_valeur
147
148 # ---------------------------------------------------------------------------
149 #                   API du PARAMETRE pour l'arbre 
150 # ---------------------------------------------------------------------------
151
152     def GetIconName(self):
153       """
154       Retourne le nom de l'icône associée au noeud qui porte self,
155       dépendant de la validité de l'objet
156       NB : un PARAMETRE est toujours valide ...
157       """
158       if self.isactif():
159           if self.isvalid():
160               return "ast-green-square"
161           else:
162               return "ast-red-square"
163       else:
164           return "ast-white-square"
165
166     def GetLabelText(self):
167         """ Retourne 3 valeurs :
168         - le texte à afficher dans le noeud représentant l'item
169         - la fonte dans laquelle afficher ce texte
170         - la couleur du texte
171         """
172         return 'Paramètre',Fonte_PARAMETRE,None
173
174     def GetText(self):
175       """
176       Retourne le texte à afficher après le nom de la commande (ici après 'paramètre')
177       Ce texte est tronqué à 25 caractères
178       """
179       texte = repr(self.object)
180       texte = string.split(texte,'\n')[0]
181       if len(texte) < 25 :
182           return texte
183       else :
184           return texte[0:24]+'...'
185
186     def GetSubList(self):
187       """
188       Retourne la liste des fils de self
189       """
190       return []
191     
192 # ---------------------------------------------------------------------------
193 #       Méthodes permettant la modification et la lecture des attributs
194 #       du paramètre = API graphique du PARAMETRE pour Panel et EFICAS
195 # ---------------------------------------------------------------------------
196
197     def get_valeur(self):
198       """
199       Retourne la valeur de l'objet PARAMETRE cad son texte
200       """
201       return self.object.valeur or ''
202
203     def get_nom(self):
204       """
205       Retourne le nom du paramètre
206       """
207       return self.object.nom
208
209     def set_valeur(self,new_valeur):
210       """
211       Affecte valeur à l'objet PARAMETRE
212       """
213       self.object.set_valeur(new_valeur)
214
215     def set_nom(self,new_nom):
216       """
217       Renomme le paramètre
218       """
219       self.object.set_attribut('nom',new_nom)
220
221     def get_fr(self):
222       """
223       Retourne le fr associé au paramètre, cad la bulle d'aide pour EFICAS
224       """
225       return "Définition d'un paramètre"
226     
227 import Extensions.parametre
228 treeitem =PARAMTreeItem
229 objet = Extensions.parametre.PARAMETRE