]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/uniqueassdpanel.py
Salome HOME
PN : print enleve
[tools/eficas.git] / Editeur / uniqueassdpanel.py
1 # ======================================================================
2 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
3 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
4 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
5 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
6 # (AT YOUR OPTION) ANY LATER VERSION.
7 #
8 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
9 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
10 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
11 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
12 #
13 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
14 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
15 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
16 #
17 #
18 # ======================================================================
19 # Modules Python
20 import string,types,os
21 from Tkinter import *
22 import Pmw
23 from copy import copy,deepcopy
24 import traceback
25
26 # Modules Eficas
27 import Objecttreeitem
28 import prefs
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 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):
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       # Remplissage du panneau
89       self.valeur_choisie = StringVar()
90       self.valeur_choisie.set('')
91       min,max =  self.node.item.GetMinMax()
92       if (min == 1 and min == max and len(liste_noms_sd)==1):
93           if self.valeur_choisie.get() != liste_noms_sd[0]:
94              self.valeur_choisie.set(liste_noms_sd[0])
95              self.valid_valeur_automatique()
96          
97       self.frame_valeur = Frame(page)
98       self.frame_valeur.pack(fill='both',expand=1)
99       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
100       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
101       self.listbox = Pmw.ScrolledListBox(self.frame_valeur,
102                                          items=liste_noms_sd,
103                                          labelpos='n',
104                                          label_text="Structures de données du type\n requis par l'objet courant :",
105                                          listbox_height = 6,
106                                          selectioncommand=self.select_valeur_from_list,
107                                          dblclickcommand=lambda s=self,c=self.valid_valeur : s.choose_valeur_from_list(c))
108       self.listbox.place(relx=0.5,rely=0.3,relheight=0.4,anchor='center')
109       Label(self.frame_valeur,text='Structure de donnée choisie :').place(relx=0.05,rely=0.6)
110       #self.label_valeur = Label(self.frame_valeur,textvariable=self.valeur_choisie)
111       Label(self.frame_valeur,textvariable=self.valeur_choisie).place(relx=0.5,rely=0.6)
112       # affichage de la valeur courante
113       self.display_valeur()
114
115   def get_bulle_aide(self):
116       """
117       Retourne l'aide associée au panneau
118       """
119       return "Double-cliquez sur la structure de donnée désirée pour valoriser le mot-clé simple courant"
120
121   def get_aide(self):
122       """
123       Retourne la phrase d'aide indiquant de quel type doit être la valeur à donner par l'utilisateur
124       """
125       mc = self.node.item.get_definition()
126       type = mc.type[0].__name__  
127       if len(mc.type)>1 :
128           for typ in mc.type[1:] :
129               type = type + ' ou '+typ.__name__
130       commentaire="Un objet de type "+type+" est attendu"
131       aideval=self.node.item.aide()
132       commentaire=commentaire +"\n"+ aideval
133       return commentaire
134
135     
136   def select_valeur_from_list(self):
137       """
138       Affecte à valeur choisie la sélection courante dans la liste des choix proposée
139       """
140       if len(self.listbox.get()) == 0 : return
141       choix = self.listbox.getcurselection()[0]
142       self.valeur_choisie.set(choix)
143
144   def choose_valeur_from_list(self,command):
145       """
146       Affecte à valeur choisie la sélection courante dans la liste des choix proposée
147       Exécute command
148       """
149       if len(self.listbox.get()) == 0 : return
150       choix = self.listbox.getcurselection()[0]
151       self.valeur_choisie.set(choix)
152       apply(command,(),{})
153
154   def get_valeur(self):
155       """
156       Retourne la valeur donnée par l'utilisateur au MCS
157       """
158       return self.valeur_choisie.get()
159     
160   def display_valeur(self):
161       """
162       Affiche la valeur de l'objet pointé par self
163       """
164       valeur = self.node.item.get_valeur()
165       if valeur == None or valeur == '' : return # pas de valeur à afficher ...
166       self.valeur_choisie.set(valeur.nom)
167
168   def erase_valeur(self):
169       pass
170