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.
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.
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.
19 # ======================================================================
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
31 from tkMessageBox import showinfo,askyesno,showerror
39 from widgets import Fenetre
44 def __init__ (self,master,code='ASTER',fichier=None) :
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)
52 self.initializeTk(master)
53 Pmw.initialise(master)
54 self.lecture_parametres()
55 self.format_fichier = Tkinter.StringVar()
57 self.cree_composants_graphiques()
58 self.load_appli_composants()
62 def send_message(self,message):
71 def lecture_parametres(self):
73 Active la lecture des paramètres standards et utilisateur
75 splash._splash.configure(text = "Chargement des paramètres utilisateur")
77 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
79 def cree_composants_graphiques(self):
81 Cree les constituants de l'application :
87 splash._splash.configure(text = "Chargement de l'IHM")
88 splash._splash.configure(text = "Chargement de la menubar")
90 self.menubar=menubar.MENUBAR(self,self.top)
91 splash._splash.configure(text = "Chargement de la toolbar")
93 self.toolbar=toolbar.TOOLBAR(self,self.top)
94 splash._splash.configure(text = "Chargement de la statusbar")
96 self.statusbar=statusbar.STATUSBAR(self.top)
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)
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)
111 def affiche_FAQ(self):
113 faq.affiche(self.top)
115 def affiche_infos(self,message):
116 self.statusbar.affiche_infos(message)
119 def initializeTk(self, root):
121 Initialize platform specific options
123 if sys.platform == 'mac':
124 self.initializeTk_mac(root)
125 elif sys.platform == 'win32':
126 self.initializeTk_win32(root)
128 self.initializeTk_unix(root)
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)
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')
144 def initializeTk_mac(self, root):
145 self.initializeTk_colors_common(root)
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)
153 def get_texte_infos(self):
155 Retourne un texte d'informations sur la session courante d'EFICAS
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)
163 def efface_aide(self,event):
165 Efface la bulle d'aide d'un panneau
173 def affiche_aide(self,event,aide):
175 Affiche l'aide concernant un panneau
180 self.aide=tooltip.TOOLTIP(widget)
181 self.aide.xoffset = 10
182 self.aide.yoffset = - widget.winfo_height()/2
183 self.aide.setText(aide)
187 def cree_menu(self,menu,itemlist,appli_composant):
189 Ajoute les items du tuple itemlist
194 for item in itemlist:
195 number_item=number_item + 1
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
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)
216 def fill_menus(self,appli_composant,defs):
217 menudict=self.menubar.menudict
218 for mname,itemlist in defs:
219 menu=menudict.get(mname)
221 self.cree_menu(menu,itemlist,appli_composant)
223 def update_jdc_courant(self):
224 self.bureau.update_jdc_courant()
226 def affiche_alerte(self,titre,message):
227 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)