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
86 # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test
91 # Ouverture des fichiers de commandes donnes sur la ligne de commande
94 for study in session.d_env.studies:
96 d=session.get_unit(study,self)
97 self.bureau.openJDC(file=study["comm"],units=d)
100 def send_message(self,message):
103 def exitEFICAS(self):
109 def lecture_parametres(self):
111 Active la lecture des paramètres standards et utilisateur
114 splash._splash.configure(text = "Chargement des paramètres utilisateur")
116 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
118 def cree_composants_graphiques(self):
120 Cree les constituants graphiques fixes de l'application :
126 splash._splash.configure(text = "Chargement de l'IHM")
127 splash._splash.configure(text = "Chargement de la menubar")
129 self.menubar=menubar.MENUBAR(self,self.top)
131 splash._splash.configure(text = "Chargement de la toolbar")
133 self.toolbar=toolbar.TOOLBAR(self,self.top)
135 splash._splash.configure(text = "Chargement de la statusbar")
137 self.statusbar=statusbar.STATUSBAR(self.top)
139 def load_appli_composants(self):
141 Cree les autres constituants graphiques de l'application :
145 Cette creation est parametrable par fichier prefs.py
148 splash._splash.configure(text = "Chargement des appli_composants")
149 for mname in self.appli_composants:
150 self.load_appli_composant(mname)
152 def load_appli_composant(self,mname):
153 module=__import__(mname,globals(),locals())
154 factory=getattr(module,mname.upper())
155 appli_composant=factory(self,self.top)
156 setattr(self,mname,appli_composant)
157 self.fill_menus(appli_composant,appli_composant.menu_defs)
158 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
160 def affiche_FAQ(self):
162 faq.affiche(self.top)
164 def affiche_infos(self,message):
165 self.statusbar.affiche_infos(message)
168 def initializeTk(self, root):
170 Initialize platform specific options
172 if sys.platform == 'mac':
173 self.initializeTk_mac(root)
174 elif sys.platform == 'win32':
175 self.initializeTk_win32(root)
177 self.initializeTk_unix(root)
179 def initializeTk_win32(self, root):
180 root.option_add('*Font', fontes.standard)
181 root.option_add('*EntryField.Entry.Font', fontes.standard)
182 root.option_add('*Listbox*Font',fontes.standard)
184 def initializeTk_colors_common(self, root):
185 root.option_add('*background', style.background)
186 root.option_add('*foreground', style.foreground)
187 root.option_add('*EntryField.Entry.background', style.entry_background)
188 root.option_add('*Entry*background', style.entry_background)
189 root.option_add('*Listbox*background', style.list_background)
190 root.option_add('*Listbox*selectBackground', style.list_select_background)
191 root.option_add('*Listbox*selectForeground', style.list_select_foreground)
193 def initializeTk_mac(self, root):
194 self.initializeTk_colors_common(root)
196 def initializeTk_unix(self, root):
197 root.option_add('*Font', fontes.standard)
198 root.option_add('*EntryField.Entry.Font',fontes.standard )
199 root.option_add('*Listbox*Font', fontes.standard)
200 self.initializeTk_colors_common(root)
202 def get_texte_infos(self):
204 Retourne un texte d'informations sur la session courante d'EFICAS
206 texte = VERSION + '\n\n'
207 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
208 texte = texte + 'Equipe : SINETICS\n\n'
209 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
212 def efface_aide(self,event):
214 Efface la bulle d'aide d'un panneau
222 def affiche_aide(self,event,aide):
224 Affiche l'aide concernant un panneau
229 self.aide=tooltip.TOOLTIP(widget)
230 self.aide.xoffset = 10
231 self.aide.yoffset = - widget.winfo_height()/2
232 self.aide.setText(aide)
236 def cree_menu(self,menu,itemlist,appli_composant):
238 Ajoute les items du tuple itemlist
243 for item in itemlist:
244 number_item=number_item + 1
251 raccourci_label=" "+raccourci
252 newitem=(item[0],item[1])
256 raccourci_label=" "+item[3]
257 newitem=(item[0],item[1])
263 if type(method) == types.TupleType:
264 # On a un tuple => on cree une cascade
265 menu_cascade=Tkinter.Menu(menu)
266 menu.add_cascade(label=label,menu=menu_cascade)
267 self.cree_menu(menu_cascade,method,appli_composant)
268 elif method[0] == '&':
269 # On a une chaine avec & en tete => on cree un radiobouton
270 command=getattr(appli_composant,method[1:])
271 menu.add_radiobutton(label=label,command=command)
272 if radio == None:radio=number_item
274 command=getattr(appli_composant,method)
275 menu.add_command(label=label+" "+raccourci_label,command=command)
277 self.top.bind(raccourci,command)
278 # Si au moins un radiobouton existe on invoke le premier
279 if radio:menu.invoke(radio)
281 def fill_menus(self,appli_composant,defs):
282 menudict=self.menubar.menudict
283 for mname,itemlist in defs:
284 menu=menudict.get(mname)
286 self.cree_menu(menu,itemlist,appli_composant)
288 def update_jdc_courant(self):
289 self.bureau.update_jdc_courant()
291 def affiche_alerte(self,titre,message):
292 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)