]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/uniquecomppanel.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceTK / uniquecomppanel.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 uniquepanel import UNIQUE_Panel
40
41       
42 class UNIQUE_COMP_Panel(UNIQUE_Panel):
43   """
44   Classe servant à définir le panneau associé aux mots-clés simples
45   qui attendent une valeur de type complexe
46   """
47   def makeValeurPage(self,page):
48       """
49       Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
50       de base cad entier, réel, string ou complexe
51       """
52       # Récupération de l'aide associée au panneau et de l'aide destinée à l'utilisateur
53       bulle_aide=self.get_bulle_aide()
54       aide=self.get_aide()
55       aide= justify_text(texte=aide)
56       # Remplissage du panneau
57       self.frame_valeur = Frame(page)
58       self.frame_valeur.pack(fill='both',expand=1)
59       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
60       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
61       self.label  = Label(self.frame_valeur,text='Complexe de la forme : a+bj')
62       self.label1 = Label(self.frame_valeur,text='Imaginaire')
63       self.label2 = Label(self.frame_valeur,text='Phase')
64       self.label3 = Label(self.frame_valeur,text='OU')
65       self.label.place (relx=0.15,rely=0.1)
66       self.label1.place(relx=0.6,rely=0.50)
67       self.label2.place(relx=0.6,rely=0.57)
68       self.label3.place(relx=0.15,rely=0.4)
69       self.typ_cplx=StringVar()
70       self.typ_cplx.set('RI')
71       rb1 = Radiobutton(self.frame_valeur, text='RI  : Réel',variable=self.typ_cplx,value='RI')
72       rb2 = Radiobutton(self.frame_valeur, text='MP  : Module',variable=self.typ_cplx,value='MP')
73       rb1.place(relx=0.15,rely = 0.50)
74       rb2.place(relx=0.15,rely = 0.57)
75       self.entry1 = Pmw.EntryField(self.frame_valeur,validate='real')
76       self.entry2 = Pmw.EntryField(self.frame_valeur,validate='real')
77       self.entry3 = Pmw.EntryField(self.frame_valeur)
78       self.entry1.component('entry').bind("<Return>",lambda e,s=self:s.entry2.component('entry').focus())
79       self.entry1.component('entry').bind("<KP_Enter>",lambda e,s=self:s.entry2.component('entry').focus())
80       self.entry2.component('entry').bind("<Return>",lambda e,c=self.valid_valeur:c())
81       self.entry2.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_valeur:c())
82       self.entry3.component('entry').bind("<Return>",lambda e,c=self.valid_complexe:c())
83       self.entry3.component('entry').bind("<KP_Enter>",lambda e,c=self.valid_complexe:c())
84       self.entry1.place(relx=0.15,rely = 0.65,relwidth=0.35)
85       self.entry2.place(relx=0.60,rely = 0.65,relwidth=0.35)
86       self.entry3.place(relx=0.15,rely = 0.20,relwidth=0.60)
87       self.entry1.focus()
88       self.bouton_val=Button(self.frame_valeur,text="Valider",command=self.valider,width=14)
89       self.bouton_val.place(relx=0.4,rely=0.8)
90       self.frame_valeur.update()
91       self.aide = Label(self.frame_valeur,
92                         text = aide,
93                         wraplength=int(self.frame_valeur.winfo_width()*0.8),
94                         justify='center')
95       self.aide.place(relx=0.5,rely=0.9,anchor='n')
96       # affichage de la valeur du MCS
97       self.display_valeur()
98
99   def valider(self):
100       if ((self.entry3.get() != None) and (self.entry3.get() != "" )):
101          self.erase_valeur()
102          self.valid_complexe()
103       else :
104          self.valid_valeur()
105          
106
107   def display_valeur(self):
108       """
109       Affiche la valeur de l'objet pointé par self
110       """
111       valeur = self.node.item.get_valeur()
112       if valeur == None or valeur == '' : return # pas de valeur à afficher ...
113       self.entry1.delete(0,END)
114       self.entry2.delete(0,END)
115       self.entry3.delete(0,END)
116       if type(valeur) not in (types.ListType,types.TupleType) :
117          self.display_complexe()
118       else:
119          typ_cplx,x1,x2=valeur
120          self.typ_cplx.set(typ_cplx)
121          self.entry1.setentry(x1)
122          self.entry2.setentry(x2)
123
124   def display_complexe(self):
125       valeur = self.node.item.get_valeur()
126       self.entry3.setentry(valeur)
127
128   def get_bulle_aide(self):
129       """
130       Retourne la bulle d'aide du panneau
131       """
132       return """-Choisissez votre format de saisie du complexe :
133       \t 'RI' = parties réelle et imaginaire
134       \t 'MP' = module/phase (en degrés)
135       - Saisissez ensuite dans les deux zones de saisie les deux nombres attendus"""
136
137   def get_aide(self):
138       """
139       Retourne la phrase d'aide décrivant le type de la valeur que peut prendre
140       le mot-clé simple courant
141       """
142       commentaire='Un complexe est attendu'
143       aideval=self.node.item.aide()
144       commentaire=commentaire +"\n"+ aideval
145       return commentaire
146
147   def get_valeur(self):
148       """
149       Retourne le complexe saisi par l'utilisateur
150       """
151       l=[]
152       l.append(self.typ_cplx.get())
153       try :
154          l.append(string.atof(self.entry1.get()))
155          l.append(string.atof(self.entry2.get()))
156       except :
157          return None
158       return `tuple(l)`
159
160   def erase_valeur(self):
161       """
162       Efface les entries de saisie
163       """
164       self.typ_cplx.set('RI')
165       self.entry1.delete(0,END)
166       self.entry2.delete(0,END)
167       
168   def valid_complexe(self):
169       valeurentree=self.entry3.get()
170       self.valid_valeur(valeurentree=valeurentree)