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
52 def __init__ (self,master,code=prefs.code,fichier=None,test=0) :
55 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
56 self.top.minsize(900,500)
57 self.top.geometry("900x500")
58 self.top.title(VERSION + ' pour '+self.code)
60 self.initializeTk(master)
61 Pmw.initialise(master)
64 self.liste_simp_reel=[]
65 # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
66 # Si test est different de 0, les panneaux ne sont pas activés
69 # Lecture des parametres de configuration (fichier global editeur.ini
70 # et utilisateur eficas.ini)
71 self.lecture_parametres()
73 self.format_fichier = Tkinter.StringVar()
75 # Avant la creation du bureau qui lit le catalogue
76 self.version_code=session.d_env.cata
78 # Creation de la menubar, toolbar, messagebar
79 self.cree_composants_graphiques()
80 # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
81 self.load_appli_composants()
82 self.listeFichiers=listeFichiers.listeFichiers(self)
83 self.listePatrons=listePatrons.listePatrons(self)
85 # PN : ajout d un attribut pour indiquer si
86 # l appli a ete lance depuis Salome
90 # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test
95 # Ouverture des fichiers de commandes donnes sur la ligne de commande
98 for study in session.d_env.studies:
100 d=session.get_unit(study,self)
101 self.bureau.openJDC(file=study["comm"],units=d)
104 def send_message(self,message):
107 def exitEFICAS(self):
113 def lecture_parametres(self):
115 Active la lecture des paramètres standards et utilisateur
118 splash._splash.configure(text = "Chargement des paramètres utilisateur")
120 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
122 def cree_composants_graphiques(self):
124 Cree les constituants graphiques fixes de l'application :
130 splash._splash.configure(text = "Chargement de l'IHM")
131 splash._splash.configure(text = "Chargement de la menubar")
133 self.menubar=menubar.MENUBAR(self,self.top)
135 splash._splash.configure(text = "Chargement de la toolbar")
137 self.toolbar=toolbar.TOOLBAR(self,self.top)
139 splash._splash.configure(text = "Chargement de la statusbar")
141 self.statusbar=statusbar.STATUSBAR(self.top)
143 def load_appli_composants(self):
145 Cree les autres constituants graphiques de l'application :
149 Cette creation est parametrable par fichier prefs.py
152 splash._splash.configure(text = "Chargement des appli_composants")
153 for mname in self.appli_composants:
154 self.load_appli_composant(mname)
156 def load_appli_composant(self,mname):
157 module=__import__(mname,globals(),locals())
158 factory=getattr(module,mname.upper())
159 appli_composant=factory(self,self.top)
160 setattr(self,mname,appli_composant)
161 self.fill_menus(appli_composant,appli_composant.menu_defs)
162 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
164 def affiche_FAQ(self):
166 faq.affiche(self.top)
168 def affiche_infos(self,message):
169 self.statusbar.affiche_infos(message)
172 def initializeTk(self, root):
174 Initialize platform specific options
176 if sys.platform == 'mac':
177 self.initializeTk_mac(root)
178 elif sys.platform == 'win32':
179 self.initializeTk_win32(root)
181 self.initializeTk_unix(root)
183 def initializeTk_win32(self, root):
184 root.option_add('*Font', fontes.standard)
185 root.option_add('*EntryField.Entry.Font', fontes.standard)
186 root.option_add('*Listbox*Font',fontes.standard)
188 def initializeTk_colors_common(self, root):
189 root.option_add('*background', style.background)
190 root.option_add('*foreground', style.foreground)
191 root.option_add('*EntryField.Entry.background', style.entry_background)
192 root.option_add('*Entry*background', style.entry_background)
193 root.option_add('*Listbox*background', style.list_background)
194 root.option_add('*Listbox*selectBackground', style.list_select_background)
195 root.option_add('*Listbox*selectForeground', style.list_select_foreground)
197 def initializeTk_mac(self, root):
198 self.initializeTk_colors_common(root)
200 def initializeTk_unix(self, root):
201 root.option_add('*Font', fontes.standard)
202 root.option_add('*EntryField.Entry.Font',fontes.standard )
203 root.option_add('*Listbox*Font', fontes.standard)
204 self.initializeTk_colors_common(root)
206 def get_texte_infos(self):
208 Retourne un texte d'informations sur la session courante d'EFICAS
210 texte = VERSION + '\n\n'
211 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
212 texte = texte + 'Equipe : SINETICS\n\n'
213 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
216 def efface_aide(self,event):
218 Efface la bulle d'aide d'un panneau
226 def affiche_aide(self,event,aide):
228 Affiche l'aide concernant un panneau
233 self.aide=tooltip.TOOLTIP(widget)
234 self.aide.xoffset = 10
235 self.aide.yoffset = - widget.winfo_height()/2
236 self.aide.setText(aide)
240 def cree_menu(self,menu,itemlist,appli_composant):
242 Ajoute les items du tuple itemlist
247 for item in itemlist:
248 number_item=number_item + 1
251 #menu.add_separator()
256 raccourci_label=" "+raccourci
257 newitem=(item[0],item[1])
261 raccourci_label=" "+item[3]
262 newitem=(item[0],item[1])
268 if type(method) == types.TupleType:
269 # On a un tuple => on cree une cascade
270 menu_cascade=Tkinter.Menu(menu)
271 menu.add_cascade(label=label,menu=menu_cascade)
272 self.cree_menu(menu_cascade,method,appli_composant)
273 elif method[0] == '&':
274 # On a une chaine avec & en tete => on cree un radiobouton
275 command=getattr(appli_composant,method[1:])
276 menu.add_radiobutton(label=label,command=command)
277 if radio == None:radio=number_item
279 command=getattr(appli_composant,method)
280 menu.add_command(label=label,accelerator=raccourci_label,command=command)
282 self.top.bind(raccourci,command)
283 # Si au moins un radiobouton existe on invoke le premier
284 if radio:menu.invoke(radio)
286 def fill_menus(self,appli_composant,defs):
287 menudict=self.menubar.menudict
288 for mname,itemlist in defs:
289 menu=menudict.get(mname)
291 self.cree_menu(menu,itemlist,appli_composant)
293 def update_jdc_courant(self):
294 self.bureau.update_jdc_courant()
296 def affiche_alerte(self,titre,message):
297 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)