]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/fonctionpanel.py
Salome HOME
PN
[tools/eficas.git] / Editeur / fonctionpanel.py
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.
8 #
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.
13 #
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.
17 #
18 #
19 # ======================================================================
20 # Modules Python
21 import string,types,os
22 from Tkinter import *
23 import Pmw
24 from copy import copy,deepcopy
25 import traceback
26
27 # Modules Eficas
28 import Objecttreeitem
29 import prefs
30 import panels
31 import images
32 from widgets import ListeChoix
33 from widgets import FenetreDeSelection
34
35 from Noyau.N_CR import justify_text
36 from utils import substract_list
37 from plusieursbasepanel import PLUSIEURS_BASE_Panel
38
39
40 class FONCTION_Panel(PLUSIEURS_BASE_Panel):
41   def makeValeurPage(self,page):
42       """
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
45       """
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)
55
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.)
63
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)
79
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)")
86
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)
91
92       # Création d'un bouton "Importer ..." sur le panel.
93       bouton_valeurs_fichier = Button(self.frame_choix,
94                                       text="Importer ...",
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
98
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,
111                         text = aide,
112                         justify='center',
113                         anchor='center',
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,
119                                text='Valider',
120                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur_recolle(m,M))
121       bouton_annuler = Button(self.frame_boutons,
122                               text = 'Annuler',
123                               command = self.annule_modifs_valeur)
124       for but in (bouton_accepter,bouton_annuler):
125           but.pack(side='left',padx=5)
126
127
128   def decoupeListeValeurs(self,liste):
129       #decoupe la liste des valeurs en 2 ( les x puis les y)
130       l_valeurs=[]
131       for i in range(len(liste)/2) :
132           t=(liste[i*2], liste[i*2+1])
133           l_valeurs.append(t)
134       return l_valeurs
135
136
137   def accepte_modifs_valeur_recolle(self,min,max):
138       l_valeurs=[]
139       l1_valeurs = self.Liste_valeurs.get_liste()
140       for val in l1_valeurs :
141           for item in val :
142              l_valeurs.append(item) 
143       self.accepte_modifs_valeur(min,max,l_valeurs)
144
145
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()
151       try:
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] 
158       except :
159         commentaire = "%s n est pas un tuple de la forme (x,y)" %`doublevaleur_entree`
160         self.parent.appli.affiche_infos(commentaire)
161         return
162
163       # et seulement d un tuple
164       try:
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)
168         return
169       except :
170         # c est la le cas normal
171         pass
172
173       # on verifie la validite des valeurs sont correctes
174       valeur,validite=self.node.item.eval_valeur((val1,val2))
175       if not validite :
176         commentaire = "impossible d'évaluer : %s " %`doublevaleur_entree`
177         self.parent.appli.affiche_infos(commentaire)
178         return
179
180       # on verifie la validite de la liste
181       liste=[]
182       l1_valeurs = self.Liste_valeurs.get_liste()
183       for val in l1_valeurs :
184           for item in val :
185              liste.append(item) 
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)
190         return
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)
197         return
198      
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]))
204       else :
205          l1_valeurs.append((valeur[0],valeur[1]))
206       self.Liste_valeurs.put_liste(l1_valeurs)