Salome HOME
PN : l ajout dans une liste se fait apres l item eventuellement selectionne
[tools/eficas.git] / Editeur / plusieurspanel.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
38 # Import des panels
39 from  newsimppanel import newSIMPPanel
40
41
42 class PLUSIEURS_Panel(newSIMPPanel):
43   """
44   Classe virtuelle servant de classe mère à toutes celles définissant
45   un panneau pour un mot-clé simple qui attend une liste de valeurs
46   """
47   def accepte_modifs_valeur(self,min,max,liste=None):
48       """
49       Méthode qui récupère la liste des valeurs donnée par l'utilisateur
50       et l'affecte au mot-clé courant.
51       le parametre None n'est pas rempli sauf par l appel a partir de fonctionpanel
52       """
53       if liste==None:
54          l1_valeurs = self.Liste_valeurs.get_liste()
55       else:
56          l1_valeurs = liste
57       l_valeurs=[]
58       for  val in l1_valeurs :
59         if val != '' and val != None :
60            l_valeurs.append(val)
61     
62       longueur = len(l_valeurs)
63       if longueur < min or longueur > max :
64           self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
65           return
66       if longueur > 1:
67          valeur = tuple(l_valeurs)
68       elif longueur == 1:
69          valeur = l_valeurs[0]
70       else:
71          valeur = None
72
73       self.parent.appli.affiche_infos("Valeur acceptée")
74       self.record_valeur(valeur)
75       # fermeture de la fenêtre de sélection
76       if self.ajout_valeurs:
77           self.ajout_valeurs.quit()
78           
79   def annule_modifs_valeur(self):
80       """
81       RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
82       """
83       self.node.select()
84       # fermeture de la fenêtre de sélection
85       if self.ajout_valeurs:
86           self.ajout_valeurs.quit()
87           
88   def add_valeur_sans_into(self,name=None,encorevalide=1):
89       """
90       Lit ce que l'utilisateur a saisi dans self.entry et cherche à
91       l'évaluer :
92         - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
93         - sinon elle est refusée
94       encorevalide vaut 1 si le validateur trouve l item et la liste correctes
95                         0 si le validateur trouve la valeur de l item incorrecte
96                        -1 si le validateur trouve la liste incorrecte
97       """
98
99       commentaire="Valeur incorrecte : ajout à la liste refusé"
100       testvalide=1
101
102       # Lecture de la zone de saisie et evaluation si nécessaire
103       if name != None :
104          valeur = name
105       else:
106          valeurentree = self.get_valeur()
107          if valeurentree == '': valeur=None
108          valeurentree,testvalide=self.node.item.eval_valeur(valeur)
109          if (not testvalide) :
110             commentaire = "impossible d'évaluer : %s " %`valeurentree`
111
112       # Pas de traitement des valeurs nulles ( a priori clic involontaire
113       if (valeur == None or valeur =="") :
114           commentaire = "Pas de saisie des valeurs nulles"
115           encorevalide = -2 
116           testtype=0
117       else :
118           testtype = self.node.item.object.verif_type(valeur)
119           if not testtype :
120             commentaire ="Type de la valeur incorrecte"
121             encorevalide=-2
122                 
123       if (encorevalide ==0) :
124          commentaire=self.node.item.info_erreur_item()
125       if (encorevalide == -1) :
126          commentaire=self.node.item.info_erreur_liste()
127          # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
128          min,max = self.node.item.GetMinMax()
129          if len(self.Liste_valeurs.get_liste()) >= max : 
130             commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
131
132       if testvalide and (encorevalide == 1):
133          min,max = self.node.item.GetMinMax()
134
135          if testtype :
136             liste_valeurs = self.Liste_valeurs.get_liste()
137             if len(liste_valeurs) >= max :
138                 commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
139             else :
140                if (self.Liste_valeurs.selection != None):
141                    ligne=self.Liste_valeurs.cherche_selected_item()
142                    liste_valeurs.insert(ligne,valeur)
143                else :
144                    liste_valeurs.append(valeur)
145                self.Liste_valeurs.put_liste(liste_valeurs)
146                self.erase_valeur()
147                commentaire="Nouvelle valeur acceptée"
148          else :
149             commentaire ="Type de la valeur incorrecte"
150
151       #self.erase_valeur()
152       self.parent.appli.affiche_infos(commentaire)
153
154   def sup_valeur_sans_into(self,name=None):
155       """
156       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
157       """
158       try:
159           self.Liste_valeurs.remove_selected_item()
160           self.display_valeur(self.selected_valeur)
161           self.selected_valeur = None      
162       except:
163           # la valeur sélectionnée n'est pas dans la liste
164           return
165
166   def display_valeur(self,val=None):
167       """
168       Affiche la valeur passée en argument dans l'entry de saisie.
169       Par défaut affiche la valeur du mot-clé simple
170       """
171       if not val :
172           #valeur = self.node.item.getval()
173           valeur = self.node.item.object.getval()
174       else:
175           valeur = val
176       self.entry.delete(0,END)
177       if not valeur : return
178       self.entry.insert(0,str(valeur))
179