1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 import string,types,os
24 from copy import copy,deepcopy
32 from widgets import ListeChoix
33 from widgets import FenetreDeSelection
35 from Noyau.N_CR import justify_text
36 from utils import substract_list
37 from plusieursbasepanel import PLUSIEURS_BASE_Panel
40 class FONCTION_Panel(PLUSIEURS_BASE_Panel):
41 def makeValeurPage(self,page):
43 Crée la page de saisie d'une liste de valeurs à priori quelconques,
44 cad qui ne sont pas à choisir dans une liste prédéfinie
46 # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
47 # et la liste des valeurs déjà affectées à l'objet courant
48 bulle_aide=self.get_bulle_aide()
49 objet_mc = self.node.item.get_definition()
50 aide = self.get_aide()
51 aide = justify_text(texte=aide)
52 min,max = self.node.item.GetMinMax()
53 l_valeurs = self.node.item.GetListeValeurs()
54 l2_valeurs=self.decoupeListeValeurs(l_valeurs)
56 # création des frames globales
57 self.frame1 = Frame(page,relief='groove',bd=2)
58 self.frame2 = Frame(page)
59 self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
60 self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
61 self.frame_right = Frame(self.frame1)
62 self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
64 # création des frames internes
65 self.frame_valeurs = Frame(self.frame1)
66 self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
67 self.frame_boutons_fleches = Frame(self.frame_right)
68 self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.5)
69 self.frame_choix = Frame(self.frame_right)
70 self.frame_choix.place(relx=0.2,rely=0.2,relwidth=0.7,relheight=0.5)
71 self.frame_aide = Frame(self.frame_right)
72 self.frame_aide.place(relx=0.1,rely=0.7,relwidth=0.8,relheight=0.3)
73 self.frame_boutons = Frame(self.frame2)
74 self.frame_boutons.place(relx=0.35,rely=0.,relwidth=0.3,relheight=1.)
75 for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
76 self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
77 fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
78 fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
80 # création des objets dans les frames
81 liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
82 ("<Button-3>",self.deselectValeur),
83 ("<Double-Button-1>",self.sup_valeur_sans_into))
84 self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l2_valeurs,liste_commandes = liste_commandes_valeurs,
85 titre="Valeur(s) actuelle(s)")
87 # Création de l'entry ou de la liste des SD
88 self.label = Label(self.frame_choix,text="Valeur :")
89 self.make_entry(frame = self.frame_choix,command = self.add_double_valeur_plusieurs_base)
90 self.label.place(relx=0.05,rely=0.5)
92 # Création d'un bouton "Importer ..." sur le panel.
93 bouton_valeurs_fichier = Button(self.frame_choix,
95 command=self.select_in_file)
96 bouton_valeurs_fichier.place(relx=0.28,rely=0.7,relwidth=0.6)
97 self.ajout_valeurs = None
99 # boutons Ajouter et Supprimer
100 bouton_add = Button(self.frame_boutons_fleches,
101 image = images.get_image('arrow_left'),
102 command = self.add_double_valeur_plusieurs_base)
103 bouton_sup = Button(self.frame_boutons_fleches,
104 image = images.get_image('arrow_right'),
105 command = self.sup_valeur_sans_into)
106 bouton_add.place(relx=0.3,rely=0.35)
107 bouton_sup.place(relx=0.3,rely=0.65)
108 # affichage de l'aide
109 self.frame_aide.update()
110 self.aide = Label(self.frame_aide,
114 wraplength=int(self.frame_aide.winfo_width()*0.8))
115 self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
116 self.Liste_valeurs.affiche_liste()
117 # boutons Accepter et Annuler
118 bouton_accepter = Button(self.frame_boutons,
120 command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
121 bouton_annuler = Button(self.frame_boutons,
123 command = self.annule_modifs_valeur)
124 for but in (bouton_accepter,bouton_annuler):
125 but.pack(side='left',padx=5)
128 def decoupeListeValeurs(self,liste):
129 #decoupe la liste des valeurs en 2 ( les x puis les y)
131 for i in range(len(liste)/2) :
132 t=(liste[i*2], liste[i*2+1])
137 def accepte_modifs_valeur_recolle(self,min,max):
139 l1_valeurs = self.Liste_valeurs.get_liste()
140 for val in l1_valeurs :
142 l_valeurs.append(item)
143 self.accepte_modifs_valeur(min,max,l_valeurs)
146 def add_double_valeur_plusieurs_base(self):
147 # on verifie qu'il s agit bien d un tuple
148 # on enleve les parentheses eventuelles
149 #doublevaleur_entree,validite,commentaire=self.get_valeur_double()
150 doublevaleur_entree= self.entry.get()
152 if doublevaleur_entree[0]=='(' :
153 doublevaleur_entree=doublevaleur_entree[1:-1]
154 if doublevaleur_entree[-1]==')' :
155 doublevaleur_entree=doublevaleur_entree[0:-2]
156 val1=doublevaleur_entree.split(',')[0]
157 val2=doublevaleur_entree.split(',')[1]
159 commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
160 self.parent.appli.affiche_infos(commentaire)
163 # et seulement d un tuple
165 val3=doublevaleur_entree.split(',')[2]
166 commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
167 self.parent.appli.affiche_infos(commentaire)
170 # c est la le cas normal
173 # on verifie la validite des valeurs sont correctes
174 valeur,validite=self.node.item.eval_valeur((val1,val2))
176 commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
177 self.parent.appli.affiche_infos(commentaire)
180 # on verifie la validite de la liste
182 l1_valeurs = self.Liste_valeurs.get_liste()
183 for val in l1_valeurs :
186 validite_liste=self.node.item.valide_liste_partielle(valeur[0],liste)
187 if not validite_liste:
188 commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
189 self.parent.appli.affiche_infos(commentaire)
191 # liste a deja ete modifiee par l appel precedent a valide_liste_partielle
192 # et contient deja valeur[0]
193 validite_liste=self.node.item.valide_liste_partielle(valeur[1],liste)
194 if not validite_liste:
195 commentaire = "impossible d'ajouter %s a la liste " %`doublevaleur_entree`
196 self.parent.appli.affiche_infos(commentaire)
199 # si une valeur est selectionnee on insere apres
200 # sinon on ajoute la valeur à la fin
201 if (self.Liste_valeurs.selection != None):
202 ligne=self.Liste_valeurs.cherche_selected_item()
203 l1_valeurs.insert(ligne,(valeur[0],valeur[1]))
205 l1_valeurs.append((valeur[0],valeur[1]))
206 self.Liste_valeurs.put_liste(l1_valeurs)