]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/plusieursassdpanel.py
Salome HOME
Restitution de PN_DecoupePanel
[tools/eficas.git] / Editeur / plusieursassdpanel.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
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 plusieurspanel import PLUSIEURS_Panel 
40
41 class PLUSIEURS_ASSD_Panel(PLUSIEURS_Panel):
42   """
43   Classe définissant le panel associé aux mots-clés qui demandent
44   à l'utilisateur de donner une liste de valeurs qui ne sont pas
45   à choisir dans une liste discrètes et qui sont de type dérivé d'ASSD
46   """
47   def makeValeurPage(self,page):
48       """
49       Génère la page de saisie de plusieurs noms de SD parmi un ensemble discret
50       de SD possibles, cad d'un type cohérent avec les types attendus par le mot-clé simple
51       """
52       # On récupère la bulle d'aide du panneau, l'objet, l'aide, min et max (cardinalité de la liste),
53       # la liste des valeurs déjà affectées à l'objet courant et la liste des SD du bon type
54       bulle_aide=self.get_bulle_aide()
55       self.ajout_valeurs=None
56       objet_mc = self.node.item.get_definition()
57       aide = self.get_aide()
58       aide = justify_text(texte=aide)
59       min,max = self.node.item.GetMinMax()
60       l_valeurs = self.node.item.GetListeValeurs()
61       l_choix=self.node.item.get_sd_avant_du_bon_type()
62       l_choix.sort()
63       # remplissage du panneau
64       self.frame_valeurs = Frame(page)
65       self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
66       self.frame_boutons_fleches = Frame(page)
67       self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
68       self.frame_choix = Frame(page)
69       self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
70       self.frame_boutons = Frame(page)
71       self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
72       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
73                                  ("<Button-3>",self.deselectValeur),
74                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
75       liste_commandes_choix = (("<Button-1>",self.selectChoix),
76                                ("<Button-3>",self.deselectChoix),
77       #                         ("<Double-Button-1>",self.add_valeur_sans_into))
78                                ("<Double-Button-1>",self.add_eval_valeur_sans_into))
79       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,liste_commandes = liste_commandes_valeurs,
80                                       titre="Valeur(s) actuelle(s)")
81       self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,liste_commandes = liste_commandes_choix,
82                                     titre= "Valeurs possibles")
83       bouton_add = Button(self.frame_boutons_fleches,
84                           #text="<--",
85                           image = images.get_image('arrow_left'),
86       #                    command = self.add_valeur_sans_into)
87                           command = self.add_eval_valeur_sans_into)
88       bouton_sup = Button(self.frame_boutons_fleches,
89                           #text="-->",
90                           image = images.get_image('arrow_right'),
91                           command = self.sup_valeur_sans_into)
92       bouton_accepter = Button(self.frame_boutons,
93                                text='Valider',
94                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
95       bouton_annuler = Button(self.frame_boutons,
96                               text = 'Annuler',
97                               command = self.annule_modifs_valeur)
98       bouton_add.place(relx=0.3,rely=0.35)
99       bouton_sup.place(relx=0.3,rely=0.65)
100       for but in (bouton_accepter,bouton_annuler):
101           but.pack(side='left',padx=5)
102       self.Liste_valeurs.affiche_liste()
103       self.Liste_choix.affiche_liste()
104       for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
105           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
106           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
107   
108   def add_eval_valeur_sans_into(self,valeurentree=None):
109       valeur,validite=self.node.item.eval_valeur(valeurentree)
110       if not validite :
111              commentaire = "impossible d'évaluer : %s " %`valeurentree`
112              self.parent.appli.affiche_infos(commentaire)
113              return
114       self.add_valeur_sans_into(valeur)
115
116   def get_bulle_aide(self):
117       """
118       Retourne la bulle d'aide associée au panneau
119       """
120       return """Un clic sur une valeur des deux listes la sélectionne.
121       - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
122       dans la liste des valeurs que vous voulez affecter au mot-clé simple
123       - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
124       sélectionnée (elle apparaît alors à nouveau comme choix possible
125       dans la liste des choix à droite)
126       - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
127       au mot-clé simple courant
128       - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
129       avant toute modification depuis le dernier 'Valider'"""
130
131   def get_aide(self):
132       """
133       Retourne la phrase d'aide indiquant de quel type doivent être les
134       valeurs que doit entrer l'utilisateur
135       """
136       commentaire=""
137       mc = self.node.item.get_definition()
138       type = mc.type[0].__name__  
139       if len(mc.type)>1 :
140           for typ in mc.type[1:] :
141               type = type + ' ou '+typ.__name__
142       if mc.min == mc.max:
143         commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
144       else :
145         commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
146       aideval=self.node.item.aide()
147       commentaire=commentaire +"\n"+ aideval
148       return commentaire
149
150     
151   def sup_valeur(self,name=None):
152       """
153       Supprime la valeur selectionnée de la liste des valeurs et la rajoute
154       à la liste des choix possibles
155       """
156       liste_valeurs = self.Liste_valeurs.get_liste()
157       liste_valeurs.remove(self.selected_valeur)
158       liste_choix = self.node.item.get_definition().into
159       liste_choix = substract_list(liste_choix,liste_valeurs)
160       self.Liste_valeurs.put_liste(liste_valeurs)
161       self.Liste_choix.put_liste(liste_choix)
162       self.selected_valeur = None      
163     
164   def erase_valeur(self):
165       pass
166
167   def get_valeur(self):
168       """
169       Retourne la valeur sélectionnée dans la liste des choix
170       """
171       return self.selected_choix
172
173   def display_valeur(self,val=None):
174       """
175          Affiche la valeur passée en argument dans l'entry de saisie.
176          Par défaut affiche la valeur du mot-clé simple
177       """
178       # Il n'y a pas d'entry pour ce type de panneau
179       return
180
181