]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/plusieursintopanel.py
Salome HOME
Restitution de PN_DecoupePanel
[tools/eficas.git] / Editeur / plusieursintopanel.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_INTO_Panel(PLUSIEURS_Panel):
42   """
43   Classe servant à définir le panneau permettant d'afficher et de saisir une
44   liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
45   """
46   def makeValeurPage(self,page):
47       """
48       Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
49       de possibles
50       """
51       self.ajout_valeurs = None
52       # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
53       # la liste des choix et la liste des valeurs
54       aide = self.get_aide()
55       aide = justify_text(texte=aide)
56       bulle_aide=self.get_bulle_aide()
57       objet_mc = self.node.item.get_definition()
58       min,max = self.node.item.GetMinMax()
59       #l_choix=list(objet_mc.into)
60       l_valeurs = self.node.item.GetListeValeurs()
61       l_choix= self.node.item.get_liste_possible(l_valeurs)
62       # reinitialisation de l_valeurs
63       l_valeurs = self.node.item.GetListeValeurs()
64
65       # remplissage du panneau
66       self.frame_valeurs = Frame(page)
67       self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
68       self.frame_boutons_fleches = Frame(page)
69       self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
70       self.frame_choix = Frame(page)
71       self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
72       self.frame_boutons = Frame(page)
73       self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=0.3,relheight=0.1)
74       self.frame_aide = Frame(page)
75       self.frame_aide.place(relx=0.1,rely=0.75,relwidth=0.9,relheight=0.1)
76       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
77                                  ("<Button-3>",self.deselectValeur),
78                                  ("<Double-Button-1>",self.sup_valeur))
79       liste_commandes_choix = (("<Button-1>",self.selectChoix),
80                                ("<Button-3>",self.deselectChoix),
81                                ("<Double-Button-1>",self.add_choix))
82       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
83                                       l_valeurs,liste_commandes = liste_commandes_valeurs,
84                                       titre="Valeur(s) actuelle(s)")
85       self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
86                                     liste_commandes = liste_commandes_choix,
87                                     titre= "Valeurs possibles")
88       bouton_add = Button(self.frame_boutons_fleches,
89                           #text="<--",
90                           image = images.get_image('arrow_left'),
91                           command = self.add_choix)
92       bouton_sup = Button(self.frame_boutons_fleches,
93                           #text="-->",
94                           image = images.get_image('arrow_right'),
95                           command = self.sup_valeur)
96       bouton_accepter = Button(self.frame_boutons,
97                                text='Valider',
98                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
99       bouton_annuler = Button(self.frame_boutons,
100                               text = 'Annuler',
101                               command = self.annule_modifs_valeur)
102       bouton_add.place(relx=0.3,rely=0.35)
103       bouton_sup.place(relx=0.3,rely=0.65)
104       for but in (bouton_accepter,bouton_annuler):
105           but.pack(side='left',padx=5)
106       self.Liste_valeurs.affiche_liste()
107       self.Liste_choix.affiche_liste()
108       for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
109           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
110           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
111       self.frame_aide.update()
112       self.aide = Label(self.frame_aide,
113                         text = aide,
114                         justify='center',
115                         anchor='center',
116                         wraplength=int(self.frame_aide.winfo_width()*0.8))
117       self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
118
119   def get_aide(self):
120       """
121       Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
122       que saisit l'utilisateur
123       """
124       commentaire=""
125       mc = self.node.item.get_definition()
126       d_aides = { 'TXM' : 'chaînes de caractères',
127                   'R'   : 'réels',
128                   'I'   : 'entiers',
129                   'C'   : 'complexes'}
130       type = mc.type[0]
131       if not d_aides.has_key(type) : 
132          if mc.min == mc.max:
133             return str(mc.min)+" valeur(s) est(sont) attendue(s)"
134          else :
135             return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
136       if mc.min == mc.max:
137             commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
138       else :
139             commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
140       aideval=self.node.item.aide()
141       commentaire=commentaire + "\n" + aideval
142       return commentaire
143
144   def get_bulle_aide(self):
145       """
146       Retourne la bulle d'aide du panneau (affichée par clic droit)
147       """
148       return """Un clic sur une valeur des deux listes la sélectionne.
149       - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
150       dans la liste des valeurs que vous voulez affecter au mot-clé simple
151       - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
152       sélectionnée (elle apparaît alors à nouveau comme choix possible
153       dans la liste des choix à droite)
154       - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
155       au mot-clé simple courant
156       - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
157       avant toute modification depuis le dernier 'Valider'"""
158