Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceTK / plusieursintopanel.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import string,types,os
23 from Tkinter import *
24 import Pmw
25 from copy import copy,deepcopy
26 import traceback
27
28 # Modules Eficas
29 from Editeur import Objecttreeitem
30 import prefs
31 import panels
32 import images
33 from widgets import ListeChoix
34 from widgets import FenetreDeSelection
35
36 from Noyau.N_CR import justify_text
37 from Editeur.utils import substract_list
38
39 # Import des panels
40 from plusieurspanel import PLUSIEURS_Panel
41
42 class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
43   """
44   Classe servant à définir le panneau permettant d'afficher et de saisir une
45   liste de valeurs à choisir parmi une liste discrètes de valeurs possibles
46   """
47   def makeValeurPage(self,page):
48       """
49       Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
50       de possibles
51       """
52       self.ajout_valeurs = None
53       # On récupère la bulle d'aide du panneau, l'objet, min et max (cardinalité de la liste),
54       # la liste des choix et la liste des valeurs
55       aide = self.get_aide()
56       aide = justify_text(texte=aide)
57       bulle_aide=self.get_bulle_aide()
58       objet_mc = self.node.item.get_definition()
59       min,max = self.node.item.GetMinMax()
60       #l_choix=list(objet_mc.into)
61       l_valeurs = self.node.item.GetListeValeurs()
62       l_choix= self.node.item.get_liste_possible(l_valeurs)
63       # reinitialisation de l_valeurs
64       l_valeurs = self.node.item.GetListeValeurs()
65
66       # remplissage du panneau
67       self.frame_valeurs = Frame(page)
68       self.frame_valeurs.place(relx=0.05,rely=0.05,relwidth=0.35,relheight=0.7)
69       self.frame_boutons_fleches = Frame(page)
70       self.frame_boutons_fleches.place(relx=0.4,rely=0.,relwidth=0.2,relheight=0.7)
71       self.frame_choix = Frame(page)
72       self.frame_choix.place(relx=0.6,rely=0.05,relwidth=0.35,relheight=0.7)
73       self.frame_boutons = Frame(page)
74       self.frame_boutons.place(relx=0.35,rely=0.87,relwidth=1,relheight=0.1)
75       self.frame_aide = Frame(page)
76       self.frame_aide.place(relx=0.1,rely=0.75,relwidth=1,relheight=0.15)
77       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
78                                  ("<Button-3>",self.deselectValeur),
79                                  ("<Double-Button-1>",self.sup_valeur))
80       liste_commandes_choix = (("<Button-1>",self.selectChoix),
81                                ("<Button-3>",self.deselectChoix),
82                                ("<Double-Button-1>",self.add_choix))
83       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,
84                                       l_valeurs,liste_commandes = liste_commandes_valeurs,
85                                       titre="Valeur(s) actuelle(s)")
86       self.Liste_choix = ListeChoix(self,self.frame_choix,l_choix,
87                                     liste_commandes = liste_commandes_choix,
88                                     titre= "Valeurs possibles")
89       self.bouton_add = Button(self.frame_boutons_fleches,
90                           #text="<--",
91                           image = images.get_image('arrow_left'),
92                           command = self.add_choix)
93       self.bouton_sup = Button(self.frame_boutons_fleches,
94                           #text="-->",
95                           image = images.get_image('arrow_right'),
96                           command = self.sup_valeur)
97       self.bouton_accepter = Button(self.frame_boutons,
98                                text='Valider',
99                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
100       self.bouton_annuler = Button(self.frame_boutons,
101                               text = 'Annuler',
102                               command = self.annule_modifs_valeur)
103       self.bouton_add.place(relx=0.3,rely=0.35)
104       self.bouton_sup.place(relx=0.3,rely=0.65)
105       for but in (self.bouton_accepter,self.bouton_annuler):
106           but.pack(side='left',padx=3)
107       self.Liste_valeurs.affiche_liste()
108       if len(l_valeurs) > 0 :
109           liste_marque=l_valeurs[-1]
110           self.Liste_valeurs.surligne(liste_marque)
111           self.selectValeur(l_valeurs[-1])
112       self.Liste_choix.affiche_liste()
113       for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
114           fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
115           fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
116       self.frame_aide.update()
117       self.aide = Label(self.frame_aide,
118                         text = aide,
119                         justify='center',
120                         anchor='center')
121                         #wraplength=int(self.frame_aide.winfo_width()*0.8))
122       self.aide.place(relx=0.3,rely=0.5,anchor='center',relwidth=1)
123
124   def get_aide(self):
125       """
126       Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
127       que saisit l'utilisateur
128       """
129       commentaire=""
130       mc = self.node.item.get_definition()
131       d_aides = { 'TXM' : 'chaînes de caractères',
132                   'R'   : 'réels',
133                   'I'   : 'entiers',
134                   'C'   : 'complexes'}
135       type = mc.type[0]
136       if not d_aides.has_key(type) : 
137          if mc.min == mc.max:
138             return str(mc.min)+" valeur(s) est(sont) attendue(s)"
139          else :
140             return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
141       if mc.min == mc.max:
142             commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
143       else :
144             commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type  "+d_aides[type]+" sont attendues"
145       aideval=self.node.item.aide()
146       commentaire=commentaire + "\n" + aideval
147       return commentaire
148
149   def get_bulle_aide(self):
150       """
151       Retourne la bulle d'aide du panneau (affichée par clic droit)
152       """
153       return """Un clic sur une valeur des deux listes la sélectionne.
154       - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
155       dans la liste des valeurs que vous voulez affecter au mot-clé simple
156       - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
157       sélectionnée (elle apparaît alors à nouveau comme choix possible
158       dans la liste des choix à droite)
159       - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
160       au mot-clé simple courant
161       - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
162       avant toute modification depuis le dernier 'Valider'"""
163