Salome HOME
83b3243949573b0cf8b6d1bdc66896ba030fa4e7
[tools/eficas.git] / Editeur / appli.py
1 #            CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
8 #
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
13 #
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
17 #
18 #
19 # ======================================================================
20 """
21     Ce module contient la classe APPLI qui est la classe mère de
22     l'application EFICAS. Elle prend en charge l'organisation générale
23     des composants graphiques et l'initialisation Tk
24     L'aspect applicatif doit etre pris en charge par la classe dérivée
25 """
26 # Modules Python
27 import sys
28 import types
29 import Pmw
30 import Tkinter
31 from tkMessageBox import showinfo,askyesno,showerror
32
33 # Modules Eficas
34 import splash
35 import prefs
36 import fontes
37 import tooltip
38 import properties
39 from widgets import Fenetre
40
41 VERSION="EFICAS v1.3"
42
43 class APPLI: 
44   def __init__ (self,master,code='ASTER',fichier=None) :
45       self.top=master
46       self.code=code
47       self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
48       self.top.minsize(900,500)
49       self.top.geometry("900x500")
50       self.top.title(VERSION + ' pour '+self.code)
51       self.top.withdraw()
52       self.initializeTk(master)
53       Pmw.initialise(master)
54       self.lecture_parametres()
55       self.format_fichier = Tkinter.StringVar()
56       self.message=''
57       self.cree_composants_graphiques()
58       self.load_appli_composants()
59       self.affiche_FAQ()
60       splash.fini_splash()
61
62   def send_message(self,message):
63       self.message=message
64
65   def exitEFICAS(self):
66       self.quit()
67
68   def quit(self):
69       self.top.quit()
70
71   def lecture_parametres(self):
72       """
73           Active la lecture des paramètres standards et utilisateur
74       """
75       splash._splash.configure(text = "Chargement des paramètres utilisateur")
76       import configuration
77       self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
78
79   def cree_composants_graphiques(self):
80       """
81           Cree les constituants de l'application :
82            - menubar
83            - toolbar
84            - bureau
85            - statusbar
86       """
87       splash._splash.configure(text = "Chargement de l'IHM")
88       splash._splash.configure(text = "Chargement de la menubar")
89       import menubar
90       self.menubar=menubar.MENUBAR(self,self.top)
91       splash._splash.configure(text = "Chargement de la toolbar")
92       import toolbar
93       self.toolbar=toolbar.TOOLBAR(self,self.top)
94       splash._splash.configure(text = "Chargement de la statusbar")
95       import statusbar
96       self.statusbar=statusbar.STATUSBAR(self.top)
97
98   def load_appli_composants(self):
99       splash._splash.configure(text = "Chargement des appli_composants")
100       for mname in self.appli_composants:
101          self.load_appli_composant(mname)
102
103   def load_appli_composant(self,mname):
104       module=__import__(mname,globals(),locals())
105       factory=getattr(module,mname.upper())
106       appli_composant=factory(self,self.top)
107       setattr(self,mname,appli_composant)
108       self.fill_menus(appli_composant,appli_composant.menu_defs)
109       self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
110
111   def affiche_FAQ(self):
112       import faq
113       faq.affiche(self.top)
114
115   def affiche_infos(self,message):
116       self.statusbar.affiche_infos(message)
117       return
118
119   def  initializeTk(self, root):
120         """
121         Initialize platform specific options
122         """
123         if sys.platform == 'mac':
124             self.initializeTk_mac(root)
125         elif sys.platform == 'win32':
126             self.initializeTk_win32(root)
127         else:
128             self.initializeTk_unix(root)
129
130   def initializeTk_win32(self, root):
131         root.option_add('*Font', fontes.standard)
132         root.option_add('*EntryField.Entry.Font', fontes.standard)
133         root.option_add('*Listbox*Font',fontes.standard)
134
135   def initializeTk_colors_common(self, root):
136         root.option_add('*background', 'grey')
137         root.option_add('*foreground', 'black')
138         root.option_add('*EntryField.Entry.background', 'white')
139         root.option_add('*Entry*background', 'white')
140         root.option_add('*Listbox*background', 'white')
141         root.option_add('*Listbox*selectBackground', '#00008b')
142         root.option_add('*Listbox*selectForeground', 'white')
143
144   def initializeTk_mac(self, root):
145         self.initializeTk_colors_common(root)
146
147   def initializeTk_unix(self, root):
148       root.option_add('*Font', fontes.standard)
149       root.option_add('*EntryField.Entry.Font',fontes.standard )
150       root.option_add('*Listbox*Font', fontes.standard)
151       self.initializeTk_colors_common(root)
152
153   def get_texte_infos(self):
154       """
155           Retourne un texte d'informations sur la session courante d'EFICAS
156       """
157       texte = VERSION + '\n\n'
158       texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
159       texte = texte + 'Equipe : MTI/MMN\n\n'
160       texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
161       return texte
162
163   def efface_aide(self,event):
164       """
165           Efface la bulle d'aide d'un panneau
166       """
167       try:
168           self.aide.destroy()
169       except:
170           pass
171       return
172
173   def affiche_aide(self,event,aide):
174       """
175           Affiche l'aide concernant un panneau
176       """
177       x=event.x
178       y=event.y
179       widget=event.widget
180       self.aide=tooltip.TOOLTIP(widget)
181       self.aide.xoffset = 10
182       self.aide.yoffset = - widget.winfo_height()/2
183       self.aide.setText(aide)
184       self.aide._showTip()
185       return 
186
187   def cree_menu(self,menu,itemlist,appli_composant):
188       """
189           Ajoute les items du tuple itemlist
190           dans le menu menu
191       """
192       number_item=0
193       radio=None
194       for item in itemlist:
195          number_item=number_item + 1
196          if not item :
197             menu.add_separator()
198          else:
199             label,method=item
200             if type(method) == types.TupleType:
201                # On a un tuple => on cree une cascade
202                menu_cascade=Tkinter.Menu(menu)
203                menu.add_cascade(label=label,menu=menu_cascade)
204                self.cree_menu(menu_cascade,method,appli_composant)
205             elif method[0] == '&':
206                # On a une chaine avec & en tete => on cree un radiobouton
207                command=getattr(appli_composant,method[1:])
208                menu.add_radiobutton(label=label,command=command)
209                if radio == None:radio=number_item
210             else:
211                command=getattr(appli_composant,method)
212                menu.add_command(label=label,command=command)
213       # Si au moins un radiobouton existe on invoke le premier
214       if radio:menu.invoke(radio)
215
216   def fill_menus(self,appli_composant,defs):
217       menudict=self.menubar.menudict
218       for mname,itemlist in defs:
219           menu=menudict.get(mname)
220           if not menu:continue
221           self.cree_menu(menu,itemlist,appli_composant)
222
223   def update_jdc_courant(self):
224       self.bureau.update_jdc_courant()
225
226   def affiche_alerte(self,titre,message):
227       f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
228       f.wait()
229
230