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