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