Salome HOME
PN pour notation scientifique
[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       nb.setnaturalsize()
59       
60 # ----------------------------------------------------------------------------------------
61 #   Méthodes utilisées pour l'affectation de la valeur donnée par l'utilisateur
62 #    au mot-clé courant
63 # ----------------------------------------------------------------------------------------
64
65   def reset_old_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
66       """
67           Enregistre  val comme valeur de self.node.item.object SANS 
68           faire de test de validité ni ré-évaluer l'ancienne valeur
69           permet de rester avec des valeurs non entrees et de ne pas 
70           ré-évaluer des entiers par exemple
71       """
72       if self.parent.modified == 'n' : self.parent.init_modif()
73       self.node.item.set_valeur(name)
74       self.parent.appli.affiche_infos(mess)
75       if self.node.item.get_position()=='global':
76            self.node.etape.verif_all()
77       elif self.node.item.get_position()=='global_jdc':
78            self.node.racine.verif_all()
79       else :
80            self.node.parent.verif()
81       self.node.update()
82
83   def record_valeur(self,name=None,mess='Valeur du mot-clé enregistrée'):
84       """
85           Enregistre  val comme valeur de self.node.item.object  
86           en evaluant l item et en le validant 
87           Si name n'est pas renseigné, la valeur 
88       """
89       if self.parent.modified == 'n' : self.parent.init_modif()
90       if name != None:
91           valeur = name
92           validite = 1
93       else :
94           valeurentree= self.entry.get()
95           self.entry.delete(0,END)
96           if valeurentree == '': valeurentree=None
97           valeur,validite=self.node.item.eval_valeur(valeurentree)
98           if not validite :
99                 valeur= self.entry.get()
100                 commentaire = "impossible d'évaluer : %s " %`valeurentree`
101                 self.parent.appli.affiche_infos(commentaire)
102                 
103       if validite : 
104          if self.node.item.is_list() :
105             validite=self.node.item.valide_liste_complete(valeur)
106             commentaire=self.node.item.info_erreur_liste()
107          else :
108             validite=self.node.item.valide_item(valeur)
109             commentaire=self.node.item.info_erreur_item()
110  
111       if validite :
112           self.node.item.set_valeur(valeur)
113           self.parent.appli.affiche_infos(mess)
114           if self.node.item.get_position()=='global':
115               self.node.etape.verif_all()
116           elif self.node.item.get_position()=='global_jdc':
117               self.node.racine.verif_all()
118           else :
119               self.node.parent.verif()
120           self.node.update()
121           if self.node.item.isvalid():
122               self.node.parent.select()
123       else :
124           self.parent.appli.affiche_infos(commentaire)
125
126 # ----------------------------------------------------------------------------------------
127 #   Méthodes utilisées pour la manipulation des items dans les listes de choix
128 # ----------------------------------------------------------------------------------------
129   def selectValeur(self,name):
130       self.selected_valeur = name
131
132   def deselectValeur(self,name):
133       self.selectValeur = None
134
135   def sup_valeur(self,name=None):
136       """
137       Supprime la valeur selectionnée de la liste des valeurs et la rajoute
138       à la liste des choix possibles
139       """
140       if hasattr(self,'selected_valeur') :
141          if ( self.selected_valeur != None and self.selected_valeur != ''):
142             liste_valeurs = self.Liste_valeurs.get_liste()
143             liste_valeurs.remove(self.selected_valeur)
144             self.Liste_valeurs.put_liste(liste_valeurs)
145             listeActuelle=self.Liste_valeurs.get_liste()
146             liste_choix=self.node.item.get_liste_possible(listeActuelle)
147             self.Liste_choix.put_liste(liste_choix)
148             self.selected_valeur = None
149
150   def add_choix(self,name=None):
151       """
152       Ajoute le choix selectionné à la liste des valeurs et le retire
153       de la liste des choix possibles
154       """
155       
156       if hasattr(self,'selected_choix') :
157          if (self.selected_choix != None and self.selected_choix != ''):
158             min,max = self.node.item.GetMinMax()
159             liste_valeurs = self.Liste_valeurs.get_liste()
160             if len(liste_valeurs) >= max :
161                 self.parent.appli.affiche_infos("La liste ne peut pas avoir plus de %d éléments" %max)
162                 return
163             if (self.Liste_valeurs.selection != None):
164                 ligne=self.Liste_valeurs.cherche_selected_item()
165                 liste_valeurs.insert(ligne,self.selected_choix)
166             else :
167                 liste_valeurs.append(self.selected_choix)
168             self.Liste_valeurs.put_liste(liste_valeurs)
169             listeActuelle=self.Liste_valeurs.get_liste()
170             liste_choix=self.node.item.get_liste_possible(listeActuelle)
171             self.Liste_choix.put_liste(liste_choix)
172             self.selected_choix = None
173
174   def selectChoix(self,name):
175       self.selected_choix = name
176
177   def deselectChoix(self,name):
178       self.selectChoix = None
179       
180   def raisecmd(self,page):
181       try:
182          self.entry.focus()
183       except:
184          pass
185
186 # ----------------------------------------------------------------------------------------
187 #   Méthodes utilisées pour la manipulation des items en notation scientifique
188 # ----------------------------------------------------------------------------------------
189   def set_valeur_texte(self,texte_valeur) :
190       """ Sert à mettre à jour la notation scientifique"""
191       try :
192         if "R" in self.node.item.object.definition.type:
193             if texte_valeur[0] != "'":
194                clef=eval(texte_valeur)
195                if str(clef) != str(texte_valeur) :
196                   clefobj=self.node.item.object.GetNomConcept()
197                   self.parent.appli.dict_reels[clefobj][clef]=texte_valeur
198       except:
199         pass
200
201
202   def get_valeur_texte(self,valeur) :
203      valeur_texte=""
204      if "R" in self.node.item.object.definition.type:
205         clefobj=self.node.item.object.GetNomConcept()
206         if self.parent.appli.dict_reels.has_key(clefobj):
207            if self.parent.appli.dict_reels[clefobj].has_key(valeur):
208               valeur_texte=self.parent.appli.dict_reels[clefobj][valeur]
209      return valeur_texte
210