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