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.
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.
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.
20 # ======================================================================
22 Ce module contient la classe APPLI qui est la classe mère de
23 l'application EFICAS. Elle prend en charge l'organisation générale
24 des composants graphiques et l'initialisation Tk
25 L'aspect applicatif doit etre pris en charge par la classe dérivée
33 from widgets import showerror
41 from widgets import Fenetre
42 from Misc import MakeNomComplet
47 def __init__ (self,master,code='ASTER',fichier=None,test=0) :
50 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
51 self.top.minsize(900,500)
52 self.top.geometry("900x500")
53 self.top.title(VERSION + ' pour '+self.code)
55 self.initializeTk(master)
56 # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
57 # Si test est different de 0, les panneaux ne sont pas activés
59 Pmw.initialise(master)
60 self.lecture_parametres()
61 self.format_fichier = Tkinter.StringVar()
63 self.cree_composants_graphiques()
64 self.load_appli_composants() # Creation du BUREAU
68 # AY : cas ou le nom du fichier a été passé en argument
70 fich=str(MakeNomComplet.FILENAME(fichier))
71 if not os.path.isfile(fich):
72 showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
74 self.bureau.openJDC( fich)
76 # PN : ajout d un attribut pour indiquer si
77 # l appli a ete lance depuis Salome
82 def send_message(self,message):
91 def lecture_parametres(self):
93 Active la lecture des paramètres standards et utilisateur
96 splash._splash.configure(text = "Chargement des paramètres utilisateur")
98 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
100 def cree_composants_graphiques(self):
102 Cree les constituants de l'application :
109 splash._splash.configure(text = "Chargement de l'IHM")
110 splash._splash.configure(text = "Chargement de la menubar")
112 self.menubar=menubar.MENUBAR(self,self.top)
114 splash._splash.configure(text = "Chargement de la toolbar")
116 self.toolbar=toolbar.TOOLBAR(self,self.top)
118 splash._splash.configure(text = "Chargement de la statusbar")
120 self.statusbar=statusbar.STATUSBAR(self.top)
122 def load_appli_composants(self):
124 splash._splash.configure(text = "Chargement des appli_composants")
125 for mname in self.appli_composants:
126 self.load_appli_composant(mname)
128 def load_appli_composant(self,mname):
129 module=__import__(mname,globals(),locals())
130 factory=getattr(module,mname.upper())
131 appli_composant=factory(self,self.top)
132 setattr(self,mname,appli_composant)
133 self.fill_menus(appli_composant,appli_composant.menu_defs)
134 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
136 def affiche_FAQ(self):
138 faq.affiche(self.top)
140 def affiche_infos(self,message):
141 self.statusbar.affiche_infos(message)
144 def initializeTk(self, root):
146 Initialize platform specific options
148 if sys.platform == 'mac':
149 self.initializeTk_mac(root)
150 elif sys.platform == 'win32':
151 self.initializeTk_win32(root)
153 self.initializeTk_unix(root)
155 def initializeTk_win32(self, root):
156 root.option_add('*Font', fontes.standard)
157 root.option_add('*EntryField.Entry.Font', fontes.standard)
158 root.option_add('*Listbox*Font',fontes.standard)
160 def initializeTk_colors_common(self, root):
161 root.option_add('*background', 'grey')
162 root.option_add('*foreground', 'black')
163 root.option_add('*EntryField.Entry.background', 'white')
164 root.option_add('*Entry*background', 'white')
165 root.option_add('*Listbox*background', 'white')
166 root.option_add('*Listbox*selectBackground', '#00008b')
167 root.option_add('*Listbox*selectForeground', 'white')
169 def initializeTk_mac(self, root):
170 self.initializeTk_colors_common(root)
172 def initializeTk_unix(self, root):
173 root.option_add('*Font', fontes.standard)
174 root.option_add('*EntryField.Entry.Font',fontes.standard )
175 root.option_add('*Listbox*Font', fontes.standard)
176 self.initializeTk_colors_common(root)
178 def get_texte_infos(self):
180 Retourne un texte d'informations sur la session courante d'EFICAS
182 texte = VERSION + '\n\n'
183 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
184 texte = texte + 'Equipe : SINETICS\n\n'
185 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
188 def efface_aide(self,event):
190 Efface la bulle d'aide d'un panneau
198 def affiche_aide(self,event,aide):
200 Affiche l'aide concernant un panneau
205 self.aide=tooltip.TOOLTIP(widget)
206 self.aide.xoffset = 10
207 self.aide.yoffset = - widget.winfo_height()/2
208 self.aide.setText(aide)
212 def cree_menu(self,menu,itemlist,appli_composant):
214 Ajoute les items du tuple itemlist
219 for item in itemlist:
220 number_item=number_item + 1
226 newitem=(item[0],item[1])
232 if type(method) == types.TupleType:
233 # On a un tuple => on cree une cascade
234 menu_cascade=Tkinter.Menu(menu)
235 menu.add_cascade(label=label,menu=menu_cascade)
236 self.cree_menu(menu_cascade,method,appli_composant)
237 elif method[0] == '&':
238 # On a une chaine avec & en tete => on cree un radiobouton
239 command=getattr(appli_composant,method[1:])
240 menu.add_radiobutton(label=label,command=command)
241 if radio == None:radio=number_item
243 command=getattr(appli_composant,method)
244 menu.add_command(label=label,command=command)
246 self.top.bind(raccourci,command)
247 # Si au moins un radiobouton existe on invoke le premier
248 if radio:menu.invoke(radio)
250 def fill_menus(self,appli_composant,defs):
251 menudict=self.menubar.menudict
252 for mname,itemlist in defs:
253 menu=menudict.get(mname)
255 self.cree_menu(menu,itemlist,appli_composant)
257 def update_jdc_courant(self):
258 self.bureau.update_jdc_courant()
260 def affiche_alerte(self,titre,message):
261 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)