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)
57 Pmw.initialise(master)
58 self.lecture_parametres()
59 self.format_fichier = Tkinter.StringVar()
61 self.cree_composants_graphiques()
62 self.load_appli_composants() # Creation du BUREAU
66 # AY : cas ou le nom du fichier a été passé en argument
68 fich=str(MakeNomComplet.FILENAME(fichier))
69 if not os.path.isfile(fich):
70 showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
72 self.bureau.openJDC( fich)
74 # PN : ajout d un attribut pour indiquer si
75 # l appli a ete lance depuis Salome
80 def send_message(self,message):
89 def lecture_parametres(self):
91 Active la lecture des paramètres standards et utilisateur
94 splash._splash.configure(text = "Chargement des paramètres utilisateur")
96 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
98 def cree_composants_graphiques(self):
100 Cree les constituants de l'application :
107 splash._splash.configure(text = "Chargement de l'IHM")
108 splash._splash.configure(text = "Chargement de la menubar")
110 self.menubar=menubar.MENUBAR(self,self.top)
112 splash._splash.configure(text = "Chargement de la toolbar")
114 self.toolbar=toolbar.TOOLBAR(self,self.top)
116 splash._splash.configure(text = "Chargement de la statusbar")
118 self.statusbar=statusbar.STATUSBAR(self.top)
120 def load_appli_composants(self):
122 splash._splash.configure(text = "Chargement des appli_composants")
123 for mname in self.appli_composants:
124 self.load_appli_composant(mname)
126 def load_appli_composant(self,mname):
127 module=__import__(mname,globals(),locals())
128 factory=getattr(module,mname.upper())
129 appli_composant=factory(self,self.top)
130 setattr(self,mname,appli_composant)
131 self.fill_menus(appli_composant,appli_composant.menu_defs)
132 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
134 def affiche_FAQ(self):
136 #faq.affiche(self.top)
138 def affiche_infos(self,message):
139 self.statusbar.affiche_infos(message)
142 def initializeTk(self, root):
144 Initialize platform specific options
146 if sys.platform == 'mac':
147 self.initializeTk_mac(root)
148 elif sys.platform == 'win32':
149 self.initializeTk_win32(root)
151 self.initializeTk_unix(root)
153 def initializeTk_win32(self, root):
154 root.option_add('*Font', fontes.standard)
155 root.option_add('*EntryField.Entry.Font', fontes.standard)
156 root.option_add('*Listbox*Font',fontes.standard)
158 def initializeTk_colors_common(self, root):
159 root.option_add('*background', 'grey')
160 root.option_add('*foreground', 'black')
161 root.option_add('*EntryField.Entry.background', 'white')
162 root.option_add('*Entry*background', 'white')
163 root.option_add('*Listbox*background', 'white')
164 root.option_add('*Listbox*selectBackground', '#00008b')
165 root.option_add('*Listbox*selectForeground', 'white')
167 def initializeTk_mac(self, root):
168 self.initializeTk_colors_common(root)
170 def initializeTk_unix(self, root):
171 root.option_add('*Font', fontes.standard)
172 root.option_add('*EntryField.Entry.Font',fontes.standard )
173 root.option_add('*Listbox*Font', fontes.standard)
174 self.initializeTk_colors_common(root)
176 def get_texte_infos(self):
178 Retourne un texte d'informations sur la session courante d'EFICAS
180 texte = VERSION + '\n\n'
181 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
182 texte = texte + 'Equipe : SINETICS\n\n'
183 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
186 def efface_aide(self,event):
188 Efface la bulle d'aide d'un panneau
196 def affiche_aide(self,event,aide):
198 Affiche l'aide concernant un panneau
203 self.aide=tooltip.TOOLTIP(widget)
204 self.aide.xoffset = 10
205 self.aide.yoffset = - widget.winfo_height()/2
206 self.aide.setText(aide)
210 def cree_menu(self,menu,itemlist,appli_composant):
212 Ajoute les items du tuple itemlist
217 for item in itemlist:
218 number_item=number_item + 1
224 newitem=(item[0],item[1])
230 if type(method) == types.TupleType:
231 # On a un tuple => on cree une cascade
232 menu_cascade=Tkinter.Menu(menu)
233 menu.add_cascade(label=label,menu=menu_cascade)
234 self.cree_menu(menu_cascade,method,appli_composant)
235 elif method[0] == '&':
236 # On a une chaine avec & en tete => on cree un radiobouton
237 command=getattr(appli_composant,method[1:])
238 menu.add_radiobutton(label=label,command=command)
239 if radio == None:radio=number_item
241 command=getattr(appli_composant,method)
242 menu.add_command(label=label,command=command)
244 self.top.bind(raccourci,command)
245 # Si au moins un radiobouton existe on invoke le premier
246 if radio:menu.invoke(radio)
248 def fill_menus(self,appli_composant,defs):
249 menudict=self.menubar.menudict
250 for mname,itemlist in defs:
251 menu=menudict.get(mname)
253 self.cree_menu(menu,itemlist,appli_composant)
255 def update_jdc_courant(self):
256 self.bureau.update_jdc_courant()
258 def affiche_alerte(self,titre,message):
259 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)