]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/plusieurspanel.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceTK / 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 from Editeur import Objecttreeitem
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 Editeur.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
58       #nettoyage de la liste
59       l_valeurs=[]
60       for  val in l1_valeurs :
61         if val != '' and val != None :
62            l_valeurs.append(val)
63     
64       longueur = len(l_valeurs)
65       if longueur < min or longueur > max :
66           self.parent.appli.affiche_infos("Valeur refusée : nombre d'éléments incorrect dans la liste")
67           return
68       if longueur > 1:
69          valeur = tuple(l_valeurs)
70       elif longueur == 1:
71          valeur = l_valeurs[0]
72       else:
73          valeur = None
74
75       self.parent.appli.affiche_infos("Valeur acceptée")
76       self.record_valeur(valeur)
77       # fermeture de la fenêtre de sélection
78       if self.ajout_valeurs:
79           self.ajout_valeurs.quit()
80           
81   def annule_modifs_valeur(self):
82       """
83       RAZ de la liste des valeurs (annule toutes les valeurs saisies par l'utilisateur)
84       """
85       self.node.select()
86       # fermeture de la fenêtre de sélection
87       if self.ajout_valeurs:
88           self.ajout_valeurs.quit()
89           
90   def add_valeur_sans_into(self,name=None,encorevalide=1):
91       """
92       Tente d'ajouter la valeur fournie (name) à la liste courante :
93         - si la valeur est acceptable, elle est ajoutée dans la liste des valeurs
94         - sinon elle est refusée
95
96       encorevalide peut prendre les valeurs suivantes :
97
98                    - valeur 1 si le validateur trouve l item et la liste correctes
99                    - valeur 0 si le validateur trouve la valeur de l item incorrecte
100                    - valeur -1 si le validateur trouve la liste incorrecte
101       """
102       valeur = name
103       commentaire="Valeur incorrecte : ajout à la liste refusé"
104       testvalide=1
105
106       # Pas de traitement des valeurs nulles ( a priori clic involontaire
107       if (valeur == None or valeur =="") :
108           commentaire = "Pas de saisie des valeurs nulles"
109           encorevalide = -2 
110           testtype=0
111       else :
112           testtype,comment = self.node.item.object.verif_type(valeur)
113           if not testtype :
114                commentaire =comment
115                encorevalide=-2
116                 
117       if (encorevalide ==0) :
118          commentaire=self.node.item.info_erreur_item()
119       if (encorevalide == -1) :
120          commentaire=self.node.item.info_erreur_liste()
121          # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
122          min,max = self.node.item.GetMinMax()
123          if len(self.Liste_valeurs.get_liste()) >= max : 
124             commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
125
126       if testvalide and (encorevalide == 1):
127          min,max = self.node.item.GetMinMax()
128
129          if testtype :
130             liste_valeurs = self.Liste_valeurs.get_liste()
131             if len(liste_valeurs) >= max :
132                 commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
133             else :
134                if (self.Liste_valeurs.selection != None):
135                    ligne=self.Liste_valeurs.cherche_selected_item()
136                    liste_valeurs.insert(ligne,valeur)
137                else :
138                    liste_valeurs.append(valeur)
139                try :
140                   self.set_valeur_texte(str(self.entry.get()))
141                except :
142                   pass
143                self.Liste_valeurs.put_liste(liste_valeurs)
144                self.erase_valeur()
145                commentaire="Nouvelle valeur acceptée"
146          else :
147             commentaire ="Type de la valeur incorrecte"
148
149       self.parent.appli.affiche_infos(commentaire)
150
151   def sup_valeur_sans_into(self,name=None):
152       """
153       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
154       """
155       try:
156           self.Liste_valeurs.remove_selected_item()
157           self.display_valeur(self.selected_valeur)
158           self.selected_valeur = None      
159       except:
160           # la valeur sélectionnée n'est pas dans la liste
161           return
162
163   def display_valeur(self,val=None):
164       """
165       Affiche la valeur passée en argument dans l'entry de saisie.
166       Par défaut affiche la valeur du mot-clé simple
167       """
168       if not val :
169           #valeur = self.node.item.getval()
170           valeur = self.node.item.object.getval()
171       else:
172           valeur = val
173       self.entry.delete(0,END)
174       if not valeur : return
175       self.entry.insert(0,str(valeur))
176