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.
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.
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.
20 # ======================================================================
22 import string,types,os
25 from copy import copy,deepcopy
33 from widgets import ListeChoix
34 from widgets import FenetreDeSelection
36 from Noyau.N_CR import justify_text
37 from utils import substract_list
40 from plusieurspanel import PLUSIEURS_Panel
42 class PLUSIEURS_INTO_Panel(PLUSIEURS_Panel):
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
47 def makeValeurPage(self,page):
49 Génère la page de saisie de plusieurs valeurs parmi un ensemble discret
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()
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=0.3,relheight=0.1)
75 self.frame_aide = Frame(page)
76 self.frame_aide.place(relx=0.1,rely=0.75,relwidth=0.9,relheight=0.1)
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 bouton_add = Button(self.frame_boutons_fleches,
91 image = images.get_image('arrow_left'),
92 command = self.add_choix)
93 bouton_sup = Button(self.frame_boutons_fleches,
95 image = images.get_image('arrow_right'),
96 command = self.sup_valeur)
97 bouton_accepter = Button(self.frame_boutons,
99 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
100 bouton_annuler = Button(self.frame_boutons,
102 command = self.annule_modifs_valeur)
103 bouton_add.place(relx=0.3,rely=0.35)
104 bouton_sup.place(relx=0.3,rely=0.65)
105 for but in (bouton_accepter,bouton_annuler):
106 but.pack(side='left',padx=5)
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.Liste_choix.affiche_liste()
112 for fram in (self.frame_valeurs,self.frame_boutons_fleches,self.frame_choix,self.frame_boutons):
113 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
114 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
115 self.frame_aide.update()
116 self.aide = Label(self.frame_aide,
120 wraplength=int(self.frame_aide.winfo_width()*0.8))
121 self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
125 Retourne la phrase d'aide indiquant de quel type de base doivent être les valeurs
126 que saisit l'utilisateur
129 mc = self.node.item.get_definition()
130 d_aides = { 'TXM' : 'chaînes de caractères',
135 if not d_aides.has_key(type) :
137 return str(mc.min)+" valeur(s) est(sont) attendue(s)"
139 return "entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs"
141 commentaire="Une liste de "+str(mc.min)+" "+d_aides[type]+" est attendue"
143 commentaire="Entre "+str(mc.min)+" et "+str(mc.max)+" valeurs de type "+d_aides[type]+" sont attendues"
144 aideval=self.node.item.aide()
145 commentaire=commentaire + "\n" + aideval
148 def get_bulle_aide(self):
150 Retourne la bulle d'aide du panneau (affichée par clic droit)
152 return """Un clic sur une valeur des deux listes la sélectionne.
153 - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
154 dans la liste des valeurs que vous voulez affecter au mot-clé simple
155 - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
156 sélectionnée (elle apparaît alors à nouveau comme choix possible
157 dans la liste des choix à droite)
158 - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
159 au mot-clé simple courant
160 - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
161 avant toute modification depuis le dernier 'Valider'"""