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.
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.
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.
19 # ======================================================================
21 import string,types,os
24 from copy import copy,deepcopy
32 from widgets import ListeChoix
33 from widgets import FenetreDeSelection
35 from Noyau.N_CR import justify_text
36 from utils import substract_list
39 from uniquepanel import UNIQUE_Panel
42 class UNIQUE_ASSD_Panel(UNIQUE_Panel):
44 Classe servant à définir le panneau associé aux objets qui attendent une valeur unique
45 d'un type dérivé d'ASSD
47 def valid_valeur_automatique(self):
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.
55 if self.parent.modified == 'n' : self.parent.init_modif()
56 valeur = self.get_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)
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()
71 #self.node.parent.verif()
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)
78 def makeValeurPage(self,page,reel="non"):
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
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()
87 aide= justify_text(texte=aide)
88 liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
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()
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,
107 label_text="Structures de données du type\n requis par l'objet courant :",
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)
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())
128 def get_bulle_aide(self):
130 Retourne l'aide associée au panneau
132 return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
136 Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
138 mc = self.node.item.get_definition()
140 type = mc.type[0].__name__
142 type = str(mc.type[0])
144 for typ in mc.type[1:] :
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
156 def select_valeur_from_list(self):
158 Affecte à valeur choisie la sélection courante dans la liste des choix proposée
160 if len(self.listbox.get()) == 0 : return
161 choix = self.listbox.getcurselection()[0]
162 self.valeur_choisie.set(choix)
164 def choose_valeur_from_list(self,command):
166 Affecte à valeur choisie la sélection courante dans la liste des choix proposée
169 if len(self.listbox.get()) == 0 : return
170 choix = self.listbox.getcurselection()[0]
171 self.valeur_choisie.set(choix)
175 #Appeler par le bouton Valider
176 self.choose_valeur_from_list(self.valid_valeur)
178 def get_valeur(self):
180 Retourne la valeur donnée par l'utilisateur au MCS
182 return self.valeur_choisie.get()
184 def display_valeur(self):
186 Affiche la valeur de l'objet pointé par self
188 valeur = self.node.item.get_valeur()
189 if valeur == None or valeur == '' : return # pas de valeur à afficher ...
190 self.valeur_choisie.set(valeur.nom)
192 def erase_valeur(self):
195 def appel_make(self,page):
196 self.makeValeurPage(page,reel="oui")
198 class UNIQUE_ASSD_Panel_Reel(UNIQUE_ASSD_Panel):
200 def valid_valeur_reel(self):
201 if self.parent.modified == 'n' : self.parent.init_modif()
202 anc_val = self.node.item.get_valeur()
203 valeurentree = self.entry.get()
204 self.valeur_choisie.set(valeurentree)
207 def display_valeur(self):
208 valeur = self.node.item.get_valeur()
209 if valeur == None or valeur == '' : return # pas de valeur à afficher ...
210 if type(valeur) == types.FloatType :
211 self.valeur_choisie.set(valeur)
213 self.valeur_choisie.set(valeur.nom)