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