Salome HOME
CCAR: ajout des fichiers macros
[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             commentaire ="Type de la valeur incorrecte"
122             encorevalide=-2
123                 
124       if (encorevalide ==0) :
125          commentaire=self.node.item.info_erreur_item()
126       if (encorevalide == -1) :
127          commentaire=self.node.item.info_erreur_liste()
128          # On traite le cas ou la liste n est pas valide pour un pb de cardinalite
129          min,max = self.node.item.GetMinMax()
130          if len(self.Liste_valeurs.get_liste()) >= max : 
131             commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
132
133       if testvalide and (encorevalide == 1):
134          min,max = self.node.item.GetMinMax()
135
136          if testtype :
137             liste_valeurs = self.Liste_valeurs.get_liste()
138             if len(liste_valeurs) >= max :
139                 commentaire="La liste a déjà atteint le nombre maximum d'éléments,ajout refusé"
140             else :
141                if (self.Liste_valeurs.selection != None):
142                    ligne=self.Liste_valeurs.cherche_selected_item()
143                    liste_valeurs.insert(ligne,valeur)
144                else :
145                    liste_valeurs.append(valeur)
146                self.Liste_valeurs.put_liste(liste_valeurs)
147                self.erase_valeur()
148                commentaire="Nouvelle valeur acceptée"
149          else :
150             commentaire ="Type de la valeur incorrecte"
151
152       #self.erase_valeur()
153       self.parent.appli.affiche_infos(commentaire)
154
155   def sup_valeur_sans_into(self,name=None):
156       """
157       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
158       """
159       try:
160           self.Liste_valeurs.remove_selected_item()
161           self.display_valeur(self.selected_valeur)
162           self.selected_valeur = None      
163       except:
164           # la valeur sélectionnée n'est pas dans la liste
165           return
166
167   def display_valeur(self,val=None):
168       """
169       Affiche la valeur passée en argument dans l'entry de saisie.
170       Par défaut affiche la valeur du mot-clé simple
171       """
172       if not val :
173           #valeur = self.node.item.getval()
174           valeur = self.node.item.object.getval()
175       else:
176           valeur = val
177       self.entry.delete(0,END)
178       if not valeur : return
179       self.entry.insert(0,str(valeur))
180