]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/uniqueassdpanel.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceTK / uniqueassdpanel.py
1 # -*- coding: utf-8 -*-
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 # Modules Python
21 import string,types,os
22 from Tkinter import *
23 import Pmw
24 from copy import copy,deepcopy
25 import traceback
26
27 # Modules Eficas
28 from Editeur import Objecttreeitem
29 import panels
30 import images
31 from widgets import ListeChoix
32 from widgets import FenetreDeSelection
33
34 from Noyau.N_CR import justify_text
35 from Editeur.utils import substract_list
36
37 # Import des panels
38 from uniquepanel import UNIQUE_Panel
39
40
41 class UNIQUE_ASSD_Panel(UNIQUE_Panel):
42   """
43   Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
44   d'un type dérivé d'ASSD
45   """
46   def valid_valeur_automatique(self):
47       """
48          Réalise la validation d'un concept sans remonter dans le
49          node parent dans le cas ou il n'y a qu'un concept possible (liste de longueur 1)
50          Identique à valid_valeur moins appel de self.node.parent.select()
51          On pourrait supposer que le seul concept présent est valide et donc ne pas
52          réaliser tous les tests de vérification.
53       """
54       if self.parent.modified == 'n' : self.parent.init_modif()
55       valeur = self.get_valeur()
56       self.erase_valeur()
57       anc_val = self.node.item.get_valeur()
58       valeur,validite=self.node.item.eval_valeur_item(valeur)
59       test = self.node.item.set_valeur(valeur)
60       if not test :
61           mess = "impossible d'évaluer : %s " %`valeur`
62           self.parent.appli.affiche_infos("Valeur du mot-clé non autorisée :"+mess)
63       elif self.node.item.isvalid() :
64           self.parent.appli.affiche_infos('Valeur du mot-clé enregistrée')
65           #if self.node.item.get_position()=='global':
66               #self.node.etape.verif_all()
67           #elif self.node.item.get_position()=='global_jdc':
68               #self.node.racine.verif_all()
69           #else :
70               #self.node.parent.verif()
71           #self.node.update()
72       else :
73           cr = self.node.item.get_cr()
74           mess = "Valeur du mot-clé non autorisée :"+cr.get_mess_fatal()
75           self.reset_old_valeur(anc_val,mess=mess)
76
77   def makeValeurPage(self,page,reel="non"):
78       """
79           Génère la page de saisie de la valeur du mot-clé simple courant qui doit être une 
80           SD de type dérivé d'ASSD
81       """
82       # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
83       # et de la liste des SD du bon type (constituant la liste des choix)
84       bulle_aide=self.get_bulle_aide()
85       aide=self.get_aide()
86       aide= justify_text(texte=aide)
87       liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
88
89       # Remplissage du panneau
90       self.valeur_choisie = StringVar()
91       self.valeur_choisie.set('')
92       min,max =  self.node.item.GetMinMax()
93       if (min == 1 and min == max and len(liste_noms_sd)==1 ):
94           if self.valeur_choisie.get() != liste_noms_sd[0]:
95             if ('R' not in self.node.item.get_type()) :
96                 self.valeur_choisie.set(liste_noms_sd[0])
97                 self.valid_valeur_automatique()
98          
99       self.frame_valeur = Frame(page)
100       self.frame_valeur.pack(fill='both',expand=1)
101       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
102       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
103       self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
104                                          items=liste_noms_sd,
105                                          labelpos='n',
106                                          label_text="Structures de données du type\n requis par l'objet courant :",
107                                          listbox_height = 6,
108                                          selectioncommand=self.select_valeur_from_list,
109                                          dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
110       self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
111       Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
112       Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
113       self.but_val = Button(self.frame_valeur,text = "Valider",command= self.Choisir)
114       self.but_val.place(relx=0.3,rely=0.8,relwidth=0.35)
115
116       # affichage de la valeur courante
117       self.display_valeur()
118       if self.__class__.__name__ == 'UNIQUE_ASSD_Panel_Reel' :
119         Label(self.frame_valeur,text='Valeur Réelle').place(relx=0.1,rely=0.9)
120         self.entry = Entry(self.frame_valeur,relief='sunken')
121         self.entry.place(relx=0.28,rely=0.9,relwidth=0.6)
122         self.entry.bind("<Return>",lambda e,c=self.valid_valeur_reel:c())
123         self.entry.bind("<KP_Enter>",lambda e,c=self.valid_valeur_reel:c())
124
125
126
127   def get_bulle_aide(self):
128       """
129       Retourne l'aide associée au panneau
130       """
131       return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
132
133   def get_aide(self):
134       """
135       Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
136       """
137       mc = self.node.item.get_definition()
138       try :
139               type = mc.type[0].__name__  
140       except :
141         type = str(mc.type[0])
142       if len(mc.type)>1 :
143           for typ in mc.type[1:] :
144               try :
145                 l=typ.__name__
146               except:
147                 l=str(typ)
148               type = type + ' ou '+l
149       commentaire="Un objet de type "+type+" est attendu"
150       aideval=self.node.item.aide()
151       commentaire=commentaire +"\n"+ aideval
152       return commentaire
153
154     
155   def select_valeur_from_list(self):
156       """
157       Affecte à valeur choisie la sélection courante dans la liste des choix proposée
158       """
159       if len(self.listbox.get()) == 0 : return
160       if len(self.listbox.getcurselection()) == 0 : return
161       choix = self.listbox.getcurselection()[0]
162       self.valeur_choisie.set(choix)
163       self.listbox.component("listbox").focus_set()
164
165   def choose_valeur_from_list(self,command):
166       """
167       Affecte à valeur choisie la sélection courante dans la liste des choix proposée
168       Exécute command
169       """
170       if len(self.listbox.get()) == 0 : return
171       if len(self.listbox.getcurselection()) == 0 : return
172       choix = self.listbox.getcurselection()[0]
173       self.valeur_choisie.set(choix)
174       apply(command,(),{})
175
176   def Choisir(self) :
177       #Appeler par le bouton Valider
178       self.choose_valeur_from_list(self.valid_valeur)
179       
180   def get_valeur(self):
181       """
182       Retourne la valeur donnée par l'utilisateur au MCS
183       """
184       return self.valeur_choisie.get()
185     
186   def display_valeur(self):
187       """
188       Affiche la valeur de l'objet pointé par self
189       """
190       valeur = self.node.item.get_valeur()
191       if valeur == None or valeur == '' : return # pas de valeur à afficher ...
192       self.valeur_choisie.set(getattr(valeur,"nom","unknown"))
193
194   def erase_valeur(self):
195       pass
196
197   def appel_make(self,page):
198       self.makeValeurPage(page,reel="oui")
199       
200 class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel):
201  
202   def valid_valeur_reel(self):
203       if self.parent.modified == 'n' : self.parent.init_modif()
204       anc_val = self.node.item.get_valeur()
205       valeurentree = self.entry.get()
206       self.valeur_choisie.set(valeurentree)
207       self.valid_valeur()
208
209   def display_valeur(self):
210       valeur = self.node.item.get_valeur()
211       if valeur == None or valeur == '' : return # pas de valeur à afficher ...
212       if type(valeur) == types.FloatType :
213          self.valeur_choisie.set(valeur)
214       else :
215          self.valeur_choisie.set(valeur.nom)
216
217        
218