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 if len(l_valeurs) > 0 :
105 liste_marque=l_valeurs[-1]
106 self.Liste_valeurs.surligne(liste_marque)
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)
112 def add_eval_valeur_sans_into(self,valeurentree=None):
113 if valeurentree == None:
114 valeurentree = self.get_valeur()
115 valeur,validite=self.node.item.eval_valeur(valeurentree)
117 commentaire = "impossible d'évaluer : %s " %`valeurentree`
118 self.parent.appli.affiche_infos(commentaire)
120 self.add_valeur_sans_into(valeur)
122 def get_bulle_aide(self):
124 Retourne la bulle d'aide associée au panneau
126 return """Un clic sur une valeur des deux listes la sélectionne.
127 - Un clic sur la flèche gauche stocke la valeur possible sélectionnée
128 dans la liste des valeurs que vous voulez affecter au mot-clé simple
129 - Un clic sur la flèche droite déstocke la valeur du mot-clé simple
130 sélectionnée (elle apparaît alors à nouveau comme choix possible
131 dans la liste des choix à droite)
132 - Cliquez sur 'Valider' pour affecter la liste des valeurs sélectionnées
133 au mot-clé simple courant
134 - Cliquez sur 'Annuler' pour restaurer la valeur du mot-clé simple
135 avant toute modification depuis le dernier 'Valider'"""
139 Retourne la phrase d'aide indiquant de quel type doivent être les
140 valeurs que doit entrer l'utilisateur
143 mc = self.node.item.get_definition()
144 type = mc.type[0].__name__
146 for typ in mc.type[1:] :
147 type = type + ' ou '+typ.__name__
149 commentaire="Une liste de "+`mc.min`+" objets de type "+type+" est attendue"
151 commentaire="Une liste d'objets de type "+type+" est attendue (min="+`mc.min`+",max="+`mc.max`+')'
152 aideval=self.node.item.aide()
153 commentaire=commentaire +"\n"+ aideval
157 def sup_valeur(self,name=None):
159 Supprime la valeur selectionnée de la liste des valeurs et la rajoute
160 à la liste des choix possibles
162 liste_valeurs = self.Liste_valeurs.get_liste()
163 liste_valeurs.remove(self.selected_valeur)
164 liste_choix = self.node.item.get_definition().into
165 liste_choix = substract_list(liste_choix,liste_valeurs)
166 self.Liste_valeurs.put_liste(liste_valeurs)
167 self.Liste_choix.put_liste(liste_choix)
168 self.selected_valeur = None
170 def erase_valeur(self):
173 def get_valeur(self):
175 Retourne la valeur sélectionnée dans la liste des choix
177 return self.selected_choix
179 def display_valeur(self,val=None):
181 Affiche la valeur passée en argument dans l'entry de saisie.
182 Par défaut affiche la valeur du mot-clé simple
184 # Il n'y a pas d'entry pour ce type de panneau