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