Salome HOME
PN pour notation scientifique
[tools/eficas.git] / Editeur / componuplet.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 # Modules Python
22 import types
23 import Tkinter
24 import Pmw
25 from repr import Repr
26 from copy import copy,deepcopy
27
28 # Modules Eficas
29 import Objecttreeitem
30 import panels
31
32 #
33 __version__="$Name:  $"
34 __Id__="$Id: componuplet.py,v 1.4 2003/10/16 14:31:22 eficas Exp $"
35 #
36
37 myrepr = Repr()
38 myrepr.maxstring = 100
39 myrepr.maxother = 100
40
41 # Si Expandable vaut 1 les éléments du nuplet apparaissent dans l'arbre
42 # Si Expandable vaut 0 les éléments n'apparaissent pas
43 Expandable=1
44
45 class NUPLETPanel(panels.OngletPanel):
46   def init(self):
47       """ Initialise les frame des panneaux contextuels relatifs \340 un NUPLET """
48       self.nb=Pmw.NoteBook(self,raisecommand=self.raisecmd)
49       self.nb.pack(fill = 'both', expand = 1)
50       self.nb.add("Valeurs",tab_text="Saisir valeurs")
51       self.makeValeurPage(self.nb.page('Valeurs'))
52       self.nb.setnaturalsize()
53     
54   def makeValeurPage(self,page):
55     label = Tkinter.Label(page,text='Valeurs :').pack(side=Tkinter.LEFT)
56     i=0
57     for obj in self.node.item.object.mc_liste:
58       frame_valeur=Tkinter.Frame(page)
59       frame_valeur.pack(side=Tkinter.LEFT)
60       if hasattr(obj,'definition'):
61          objet_mc=obj.definition
62       else:  
63          objet_mc=None
64       valeur=obj.valeur
65       if type(valeur) == types.InstanceType :
66         valeur=obj.getval()
67       aide=self.gen_aide(obj)
68       if objet_mc.into != None :
69         l_choix=list(objet_mc.into)
70         #obj.set_valeur(l_choix[0],evaluation='non')
71         obj.set_valeur(l_choix[0])
72         option=Pmw.OptionMenu (frame_valeur,
73                 items = l_choix,
74                 menubutton_width = 10,
75                 command = lambda e,obj=obj,s=self:s.record_valeur(val=e,obj=obj),
76         )
77         option.pack(side=Tkinter.LEFT,padx=1)
78       else :
79         entry = Tkinter.Entry(frame_valeur,relief='sunken',width=10)
80         entry.pack(side=Tkinter.LEFT,padx=1)
81         entry.bind("<Return>",
82                 lambda e,obj=obj,s=self:s.valid_valeur(e,obj=obj))
83         if i==0:entry.focus_set()
84         #aide = Tkinter.Label(frame_valeur, text = aide)
85         #aide.place(relx=0.5,rely=0.55,anchor='n')
86         if valeur != None :
87           entry.delete(0,Tkinter.END)
88           entry.insert(0,obj.getval())
89       i=i+1
90
91   def record_valeur(self,val=None,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
92     """ 
93       Enregistre  val comme valeur de self.node.item.object SANS faire de 
94       test de validité
95     """
96     #obj.set_valeur(val,evaluation='non')
97     obj.set_valeur(val)
98     self.parent.appli.affiche_infos(mess)
99     self.node.parent.verif()
100     self.node.update()
101
102   def valid_valeur(self,e,obj=None,mess='Valeur du mot-cl\351 enregistr\351e'):
103     """ 
104       Enregistre  val comme valeur de self.node.item.object avec
105       test de validité
106     """
107     valeur=e.widget.get()
108     e.widget.delete(0,Tkinter.END)
109     anc_val=obj.getval()
110     if anc_val == None:anc_val=''
111     test=obj.set_valeur(valeur)
112     if test:
113       if obj.isvalid():
114           self.parent.appli.affiche_infos('Valeur du mot-cl\351 enregistr\351e')
115           e.widget.insert(0,obj.getval())
116       else:
117           #obj.set_valeur(anc_val,evaluation='non')
118           obj.set_valeur(anc_val)
119           self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
120           e.widget.insert(0,anc_val)
121     else:
122       print "impossible d'\351valuer : %s " %valeur
123       print "test =",test
124       self.parent.appli.affiche_infos("valeur du mot-cl\351 non autoris\351e")
125       e.widget.delete(0,Tkinter.END)
126       e.widget.insert(0,anc_val)
127           
128     self.node.parent.verif()
129     self.node.update()
130
131   def gen_aide(self,obj):
132     return ""
133     
134
135 class NUPLETTreeItem(Objecttreeitem.ObjectTreeItem):
136   panel=NUPLETPanel
137
138   def IsExpandable(self):
139     return Expandable
140
141   def GetText(self):
142       return  ''
143
144   def isvalid(self):
145     return self.object.isvalid()
146
147   def GetIconName(self):
148     if self.object.isvalid():
149       return "ast-green-los"
150     elif self.object.isoblig():
151       return "ast-red-los"
152     else:
153       return "ast-yel-los"
154
155   def GetSubList(self):
156     if not Expandable:return []
157     sublist=[]
158     for obj in self.object.mc_liste:
159       item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, None)    
160       sublist.append(item)
161     return sublist
162
163   def additem(self,name,pos):
164     raise "NUPLET"
165
166   def suppitem(self,item) :
167     raise "NUPLET"
168
169   def verif_condition_bloc(self):
170     return self.object.verif_condition_bloc()
171
172 import Accas
173 treeitem=NUPLETTreeItem
174 objet=Accas.MCNUPLET