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