Salome HOME
PN
[tools/eficas.git] / Editeur / newsimppanel.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 import composimp
34 from widgets import ListeChoix
35 from widgets import FenetreDeSelection
36
37 from Noyau.N_CR import justify_text
38 from utils import substract_list
39
40
41 class newSIMPPanel(panels.OngletPanel):
42   """
43   Classe virtuelle servant de classe mère à toutes les classes Panel
44   servant à afficher et récupérer la valeur d'un mot-clé simple.
45   Le panel est différent suivant le type de la valeur attendu
46   """
47   def init(self):
48       """
49       Méthode appelée par le constructeur de OngletPanel :
50       construit le notebook à 2 onglets utilisé par tous les panels de
51       tous les mots-clés simples
52       """
53       nb = Pmw.NoteBook(self,raisecommand=self.raisecmd)
54       nb.pack(fill = 'both', expand = 1)
55       self.nb=nb
56       nb.add('Valeur', tab_text='Saisir valeur')
57       self.makeValeurPage(nb.page('Valeur'))
58       self.enlevebind()
59       self.creebind()
60       nb.setnaturalsize()
61       
62 # ----------------------------------------------------------------------------------------
63 #   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
64 #    au mot-clé courant
65 # ----------------------------------------------------------------------------------------
66
67   def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
68       """
69           Enregistre  val comme valeur de self.node.item.object SANS 
70           faire de test de validité ni ré-évaluer l'ancienne valeur
71           permet de rester avec des valeurs non entrees et de ne pas 
72           ré-évaluer des entiers par exemple
73       """
74       if self.parent.modified == 'n' : self.parent.init_modif()
75       self.node.item.set_valeur(name)
76       self.parent.appli.affiche_infos(mess)
77       #if self.node.item.get_position()=='global':
78            #self.node.etape.verif_all()
79       #elif self.node.item.get_position()=='global_jdc':
80            #self.node.racine.verif_all()
81       #else :
82            #self.node.parent.verif()
83       #self.node.update()
84
85   def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
86       """
87           Enregistre  val comme valeur de self.node.item.object  
88           en evaluant l item et en le validant 
89           Si name n'est pas renseigné, la valeur 
90       """
91       if self.parent.modified == 'n' : self.parent.init_modif()
92       if name != None:
93           valeur = name
94           validite = 1
95       else :
96           valeurentree= self.entry.get()
97           self.entry.delete(0,END)
98           if valeurentree == '': valeurentree=None
99           valeur,validite=self.node.item.eval_valeur(valeurentree)
100           if not validite :
101                 valeur= self.entry.get()
102                 commentaire = "impossible d'évaluer : %s " %`valeurentree`
103                 self.parent.appli.affiche_infos(commentaire)
104                 
105       if validite : 
106          if self.node.item.is_list() :
107             validite=self.node.item.valide_liste_complete(valeur)
108             commentaire=self.node.item.info_erreur_liste()
109          else :
110             validite=self.node.item.valide_item(valeur)
111             commentaire=self.node.item.info_erreur_item()
112  
113       if validite :
114           self.node.item.set_valeur(valeur)
115           self.parent.appli.affiche_infos(mess)
116           #if self.node.item.get_position()=='global':
117               #self.node.etape.verif_all()
118           #elif self.node.item.get_position()=='global_jdc':
119               #self.node.racine.verif_all()
120           #else :
121               #self.node.parent.verif()
122           #self.node.update()
123           #if self.node.item.isvalid():
124           #    self.node.parent.select()
125       else :
126           self.parent.appli.affiche_infos(commentaire)
127
128 # ----------------------------------------------------------------------------------------
129 #   Méthodes utilisées pour la manipulation des items dans les listes de choix
130 # ----------------------------------------------------------------------------------------
131   def selectValeur(self,name):
132       self.selected_valeur = name
133
134   def deselectValeur(self,name):
135       self.selectValeur = None
136
137   def sup_valeur(self,name=None):
138       """
139       Supprime la valeur selectionnée de la liste des valeurs et la rajoute
140       à la liste des choix possibles
141       """
142       if hasattr(self,'selected_valeur') :
143          if ( self.selected_valeur != None and self.selected_valeur != ''):
144             liste_valeurs = self.Liste_valeurs.get_liste()
145             liste_valeurs.remove(self.selected_valeur)
146             self.Liste_valeurs.put_liste(liste_valeurs)
147             listeActuelle=self.Liste_valeurs.get_liste()
148             liste_choix=self.node.item.get_liste_possible(listeActuelle)
149             self.Liste_choix.put_liste(liste_choix)
150             self.selected_valeur = None
151
152   def add_choix(self,name=None):
153       """
154       Ajoute le choix selectionné à la liste des valeurs et le retire
155       de la liste des choix possibles
156       """
157       
158       if hasattr(self,'selected_choix') :
159          if (self.selected_choix != None and self.selected_choix != ''):
160             min,max = self.node.item.GetMinMax()
161             liste_valeurs = self.Liste_valeurs.get_liste()
162             if len(liste_valeurs) >= max :
163                 self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
164                 return
165             if (self.Liste_valeurs.selection != None):
166                 ligne=self.Liste_valeurs.cherche_selected_item()
167                 liste_valeurs.insert(ligne,self.selected_choix)
168             else :
169                 liste_valeurs.append(self.selected_choix)
170             self.Liste_valeurs.put_liste(liste_valeurs)
171             listeActuelle=self.Liste_valeurs.get_liste()
172             liste_choix=self.node.item.get_liste_possible(listeActuelle)
173             self.Liste_choix.put_liste(liste_choix)
174             self.selected_choix = None
175
176   def selectChoix(self,name):
177       self.selected_choix = name
178
179   def deselectChoix(self,name):
180       self.selectChoix = None
181       
182   def raisecmd(self,page):
183       try:
184          self.entry.focus()
185       except:
186          pass
187
188 # ----------------------------------------------------------------------------------------
189 #   Méthodes utilisées pour la manipulation des items en notation scientifique
190 # ----------------------------------------------------------------------------------------
191   def set_valeur_texte(self,texte_valeur) :
192       """ Sert à mettre à jour la notation scientifique"""
193       try :
194         if "R" in self.node.item.object.definition.type:
195             if texte_valeur[0] != "'":
196                clef=eval(texte_valeur)
197                if str(clef) != str(texte_valeur) :
198                   self.node.item.object.init_modif()
199                   clefobj=self.node.item.object.GetNomConcept()
200                   if not self.parent.appli.dict_reels.has_key(clefobj):
201                      self.parent.appli.dict_reels[clefobj] = {}
202                   self.parent.appli.dict_reels[clefobj][clef]=texte_valeur
203                   self.parent.appli.dict_reels[clefobj]
204                   self.node.item.object.fin_modif()
205       except:
206         pass
207
208
209   def get_valeur_texte(self,valeur) :
210      valeur_texte=""
211      if "R" in self.node.item.object.definition.type:
212         clefobj=self.node.item.object.GetNomConcept()
213         if self.parent.appli.dict_reels.has_key(clefobj):
214            if self.parent.appli.dict_reels[clefobj].has_key(valeur):
215               valeur_texte=self.parent.appli.dict_reels[clefobj][valeur]
216      return valeur_texte
217