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
39 from styles import style
43 from widgets import Fenetre
44 from Misc import MakeNomComplet
50 def __init__ (self,master,code=prefs.code,fichier=None,test=0) :
53 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
54 self.top.minsize(900,500)
55 self.top.geometry("900x500")
56 self.top.title(VERSION + ' pour '+self.code)
58 self.initializeTk(master)
59 Pmw.initialise(master)
62 self.liste_simp_reel=[]
63 # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
64 # Si test est different de 0, les panneaux ne sont pas activés
67 # Lecture des parametres de configuration (fichier global editeur.ini
68 # et utilisateur eficas.ini)
69 self.lecture_parametres()
71 self.format_fichier = Tkinter.StringVar()
73 # Avant la creation du bureau qui lit le catalogue
74 self.version_code=session.d_env.cata
76 # Creation de la menubar, toolbar, messagebar
77 self.cree_composants_graphiques()
78 # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
79 self.load_appli_composants()
81 # PN : ajout d un attribut pour indiquer si
82 # l appli a ete lance depuis Salome
89 # Ouverture des fichiers de commandes donnes sur la ligne de commande
90 for study in session.d_env.studies:
92 d=session.get_unit(study,self)
93 self.bureau.openJDC(study["comm"],d)
95 def send_message(self,message):
104 def lecture_parametres(self):
106 Active la lecture des paramètres standards et utilisateur
109 splash._splash.configure(text = "Chargement des paramètres utilisateur")
111 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
113 def cree_composants_graphiques(self):
115 Cree les constituants graphiques fixes de l'application :
121 splash._splash.configure(text = "Chargement de l'IHM")
122 splash._splash.configure(text = "Chargement de la menubar")
124 self.menubar=menubar.MENUBAR(self,self.top)
126 splash._splash.configure(text = "Chargement de la toolbar")
128 self.toolbar=toolbar.TOOLBAR(self,self.top)
130 splash._splash.configure(text = "Chargement de la statusbar")
132 self.statusbar=statusbar.STATUSBAR(self.top)
134 def load_appli_composants(self):
136 Cree les autres constituants graphiques de l'application :
140 Cette creation est parametrable par fichier prefs.py
143 splash._splash.configure(text = "Chargement des appli_composants")
144 for mname in self.appli_composants:
145 self.load_appli_composant(mname)
147 def load_appli_composant(self,mname):
148 module=__import__(mname,globals(),locals())
149 factory=getattr(module,mname.upper())
150 appli_composant=factory(self,self.top)
151 setattr(self,mname,appli_composant)
152 self.fill_menus(appli_composant,appli_composant.menu_defs)
153 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
155 def affiche_FAQ(self):
157 faq.affiche(self.top)
159 def affiche_infos(self,message):
160 self.statusbar.affiche_infos(message)
163 def initializeTk(self, root):
165 Initialize platform specific options
167 if sys.platform == 'mac':
168 self.initializeTk_mac(root)
169 elif sys.platform == 'win32':
170 self.initializeTk_win32(root)
172 self.initializeTk_unix(root)
174 def initializeTk_win32(self, root):
175 root.option_add('*Font', fontes.standard)
176 root.option_add('*EntryField.Entry.Font', fontes.standard)
177 root.option_add('*Listbox*Font',fontes.standard)
179 def initializeTk_colors_common(self, root):
180 root.option_add('*background', style.background)
181 root.option_add('*foreground', style.foreground)
182 root.option_add('*EntryField.Entry.background', style.entry_background)
183 root.option_add('*Entry*background', style.entry_background)
184 root.option_add('*Listbox*background', style.list_background)
185 root.option_add('*Listbox*selectBackground', style.list_select_background)
186 root.option_add('*Listbox*selectForeground', style.list_select_foreground)
188 def initializeTk_mac(self, root):
189 self.initializeTk_colors_common(root)
191 def initializeTk_unix(self, root):
192 root.option_add('*Font', fontes.standard)
193 root.option_add('*EntryField.Entry.Font',fontes.standard )
194 root.option_add('*Listbox*Font', fontes.standard)
195 self.initializeTk_colors_common(root)
197 def get_texte_infos(self):
199 Retourne un texte d'informations sur la session courante d'EFICAS
201 texte = VERSION + '\n\n'
202 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
203 texte = texte + 'Equipe : SINETICS\n\n'
204 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
207 def efface_aide(self,event):
209 Efface la bulle d'aide d'un panneau
217 def affiche_aide(self,event,aide):
219 Affiche l'aide concernant un panneau
224 self.aide=tooltip.TOOLTIP(widget)
225 self.aide.xoffset = 10
226 self.aide.yoffset = - widget.winfo_height()/2
227 self.aide.setText(aide)
231 def cree_menu(self,menu,itemlist,appli_composant):
233 Ajoute les items du tuple itemlist
238 for item in itemlist:
239 number_item=number_item + 1
245 newitem=(item[0],item[1])
251 if type(method) == types.TupleType:
252 # On a un tuple => on cree une cascade
253 menu_cascade=Tkinter.Menu(menu)
254 menu.add_cascade(label=label,menu=menu_cascade)
255 self.cree_menu(menu_cascade,method,appli_composant)
256 elif method[0] == '&':
257 # On a une chaine avec & en tete => on cree un radiobouton
258 command=getattr(appli_composant,method[1:])
259 menu.add_radiobutton(label=label,command=command)
260 if radio == None:radio=number_item
262 command=getattr(appli_composant,method)
263 menu.add_command(label=label,command=command)
265 self.top.bind(raccourci,command)
266 # Si au moins un radiobouton existe on invoke le premier
267 if radio:menu.invoke(radio)
269 def fill_menus(self,appli_composant,defs):
270 menudict=self.menubar.menudict
271 for mname,itemlist in defs:
272 menu=menudict.get(mname)
274 self.cree_menu(menu,itemlist,appli_composant)
276 def update_jdc_courant(self):
277 self.bureau.update_jdc_courant()
279 def affiche_alerte(self,titre,message):
280 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)