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
38 from plusieursbasepanel import PLUSIEURS_BASE_Panel
41 class FONCTION_Panel(PLUSIEURS_BASE_Panel):
42 def makeValeurPage(self,page):
44 Crée la page de saisie d'une liste de valeurs à priori quelconques,
45 cad qui ne sont pas à choisir dans une liste prédéfinie
47 genea=self.node.item.get_genealogie()
52 # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
53 # et la liste des valeurs déjà affectées à l'objet courant
54 bulle_aide=self.get_bulle_aide()
55 objet_mc = self.node.item.get_definition()
56 aide = self.get_aide()
57 aide = justify_text(texte=aide)
58 min,max = self.node.item.GetMinMax()
59 l_valeurs = self.node.item.GetListeValeurs()
60 l2_valeurs=self.decoupeListeValeurs(l_valeurs)
62 # création des frames globales
63 self.frame1 = Frame(page,relief='groove',bd=2)
64 self.frame2 = Frame(page)
65 self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
66 self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
67 self.frame_right = Frame(self.frame1)
68 self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
70 # création des frames internes
71 self.frame_valeurs = Frame(self.frame1)
72 self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
73 self.frame_boutons_fleches = Frame(self.frame_right)
74 self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
75 self.frame_choix = Frame(self.frame_right)
76 self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
77 self.frame_aide = Frame(self.frame_right)
78 self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
79 self.frame_boutons = Frame(self.frame2)
80 self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
81 for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
82 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
83 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
84 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
86 # création des objets dans les frames
87 liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
88 ("<Button-3>",self.deselectValeur),
89 ("<Double-Button-1>",self.afficheValeurListe))
90 self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs,
91 titre="Valeur(s) actuelle(s)")
93 # Création de l'entry ou de la liste des SD
94 self.label = Label(self.frame_choix,text="Valeur :")
95 self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base)
96 self.label.place(relx=0.05,rely=0.5)
98 # Création d'un bouton "Importer ..." sur le panel.
99 bouton_valeurs_fichier = Button(self.frame_choix,
101 command=self.select_in_file)
102 bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
103 self.ajout_valeurs = None
105 # boutons Ajouter et Supprimer
106 bouton_add = Button(self.frame_boutons_fleches,
107 image = images.get_image('arrow_left'),
108 command = self.add_double_valeur_plusieurs_base)
109 bouton_sup = Button(self.frame_boutons_fleches,
110 image = images.get_image('arrow_right'),
111 command = self.sup_valeur_sans_into)
112 bouton_add.place(relx=0.3,rely=0.35)
113 bouton_sup.place(relx=0.3,rely=0.65)
114 # affichage de l'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)
122 self.Liste_valeurs.affiche_liste()
123 # boutons Accepter et Annuler
124 bouton_accepter = Button(self.frame_boutons,
126 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
127 bouton_annuler = Button(self.frame_boutons,
129 command = self.annule_modifs_valeur)
130 for but in (bouton_accepter,bouton_annuler):
131 but.pack(side='left',padx=5)
134 def afficheValeurListe(self,name):
135 self.display_valeur(name)
137 def decoupeListeValeurs(self,liste):
138 #decoupe la liste des valeurs en n ( les x puis les y)
141 for i in range(len(liste)/nb) :
143 t=(liste[i*nb], liste[i*nb+1])
145 t=(liste[i*nb], liste[i*nb+1], liste[i*nb+2])
150 def accepte_modifs_valeur_recolle(self,min,max):
152 l1_valeurs = self.Liste_valeurs.get_liste()
153 for val in l1_valeurs :
155 l_valeurs.append(item)
156 self.accepte_modifs_valeur(min,max,l_valeurs)
159 def add_double_valeur_plusieurs_base(self):
160 # on verifie qu'il s agit bien d un tuple
161 # on enleve les parentheses eventuelles
162 #doublevaleur_entree,validite,commentaire=self.get_valeur_double()
163 doublevaleur_entree= self.entry.get()
165 if doublevaleur_entree[0]=='(' :
166 doublevaleur_entree=doublevaleur_entree[1:-1]
167 if doublevaleur_entree[-1]==')' :
168 doublevaleur_entree=doublevaleur_entree[0:-2]
169 val1=doublevaleur_entree.split(',')[0]
170 val2=doublevaleur_entree.split(',')[1]
172 if (self.nb_valeurs==3):
173 val3=doublevaleur_entree.split(',')[2]
174 saisie=(val1,val2,val3)
176 commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
177 if (self.nb_valeurs==3):
178 commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
179 self.parent.appli.affiche_infos(commentaire)
182 # et seulement d un tuple
184 val=doublevaleur_entree.split(',')[self.nb_valeurs]
185 commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
186 if (self.nb_valeurs==3):
187 commentaire = "%s n est pas un tuple de la forme (x,y,z)" %`doublevaleur_entree`
188 self.parent.appli.affiche_infos(commentaire)
189 self.parent.appli.affiche_infos(commentaire)
192 # c est la le cas normal
195 # on verifie la validite des valeurs sont correctes
196 valeur,validite=self.node.item.eval_valeur(saisie)
198 commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
199 self.parent.appli.affiche_infos(commentaire)
202 # on verifie la validite de la liste
204 l1_valeurs = self.Liste_valeurs.get_liste()
205 for val in l1_valeurs :
208 validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste)
209 if not validite_liste:
210 commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
211 self.parent.appli.affiche_infos(commentaire)
213 # liste a deja ete modifiee par l appel precedent a valide_liste_partielle
214 # et contient deja valeur[0]
215 validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste)
216 if not validite_liste:
217 commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
218 self.parent.appli.affiche_infos(commentaire)
221 # si une valeur est selectionnee on insere apres
222 # sinon on ajoute la valeur à la fin
223 if (self.Liste_valeurs.selection != None):
224 ligne=self.Liste_valeurs.cherche_selected_item()
225 if self.nb_valeurs==2:
226 l1_valeurs.insert(ligne,(valeur[0],valeur[1]))
228 l1_valeurs.insert(ligne,(valeur[0],valeur[1],valeur[2]))
230 if self.nb_valeurs==2:
231 l1_valeurs.append((valeur[0],valeur[1]))
233 l1_valeurs.append((valeur[0],valeur[1],valeur[2]))
234 self.Liste_valeurs.put_liste(l1_valeurs)
237 def display_valeur(self,val=None):
239 Affiche la valeur passée en argument dans l'entry de saisie.
240 Par défaut affiche la valeur du mot-clé simple
241 Doit être redéfinie pour un pb avec les parametres dans un tuple
244 valeur = self.node.item.object.getval()
247 if not valeur : return
254 affiche=affiche+separe+str(val)
257 self.entry.delete(0,END)
258 self.entry.insert(0,affiche)
260 self.entry.delete(0,END)