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
85 # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test
90 # Ouverture des fichiers de commandes donnes sur la ligne de commande
92 for study in session.d_env.studies:
94 d=session.get_unit(study,self)
95 self.bureau.openJDC(file=study["comm"],units=d)
98 def send_message(self,message):
101 def exitEFICAS(self):
107 def lecture_parametres(self):
109 Active la lecture des paramètres standards et utilisateur
112 splash._splash.configure(text = "Chargement des paramètres utilisateur")
114 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
116 def cree_composants_graphiques(self):
118 Cree les constituants graphiques fixes de l'application :
124 splash._splash.configure(text = "Chargement de l'IHM")
125 splash._splash.configure(text = "Chargement de la menubar")
127 self.menubar=menubar.MENUBAR(self,self.top)
129 splash._splash.configure(text = "Chargement de la toolbar")
131 self.toolbar=toolbar.TOOLBAR(self,self.top)
133 splash._splash.configure(text = "Chargement de la statusbar")
135 self.statusbar=statusbar.STATUSBAR(self.top)
137 def load_appli_composants(self):
139 Cree les autres constituants graphiques de l'application :
143 Cette creation est parametrable par fichier prefs.py
146 splash._splash.configure(text = "Chargement des appli_composants")
147 for mname in self.appli_composants:
148 self.load_appli_composant(mname)
150 def load_appli_composant(self,mname):
151 module=__import__(mname,globals(),locals())
152 factory=getattr(module,mname.upper())
153 appli_composant=factory(self,self.top)
154 setattr(self,mname,appli_composant)
155 self.fill_menus(appli_composant,appli_composant.menu_defs)
156 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
158 def affiche_FAQ(self):
160 faq.affiche(self.top)
162 def affiche_infos(self,message):
163 self.statusbar.affiche_infos(message)
166 def initializeTk(self, root):
168 Initialize platform specific options
170 if sys.platform == 'mac':
171 self.initializeTk_mac(root)
172 elif sys.platform == 'win32':
173 self.initializeTk_win32(root)
175 self.initializeTk_unix(root)
177 def initializeTk_win32(self, root):
178 root.option_add('*Font', fontes.standard)
179 root.option_add('*EntryField.Entry.Font', fontes.standard)
180 root.option_add('*Listbox*Font',fontes.standard)
182 def initializeTk_colors_common(self, root):
183 root.option_add('*background', style.background)
184 root.option_add('*foreground', style.foreground)
185 root.option_add('*EntryField.Entry.background', style.entry_background)
186 root.option_add('*Entry*background', style.entry_background)
187 root.option_add('*Listbox*background', style.list_background)
188 root.option_add('*Listbox*selectBackground', style.list_select_background)
189 root.option_add('*Listbox*selectForeground', style.list_select_foreground)
191 def initializeTk_mac(self, root):
192 self.initializeTk_colors_common(root)
194 def initializeTk_unix(self, root):
195 root.option_add('*Font', fontes.standard)
196 root.option_add('*EntryField.Entry.Font',fontes.standard )
197 root.option_add('*Listbox*Font', fontes.standard)
198 self.initializeTk_colors_common(root)
200 def get_texte_infos(self):
202 Retourne un texte d'informations sur la session courante d'EFICAS
204 texte = VERSION + '\n\n'
205 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
206 texte = texte + 'Equipe : SINETICS\n\n'
207 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
210 def efface_aide(self,event):
212 Efface la bulle d'aide d'un panneau
220 def affiche_aide(self,event,aide):
222 Affiche l'aide concernant un panneau
227 self.aide=tooltip.TOOLTIP(widget)
228 self.aide.xoffset = 10
229 self.aide.yoffset = - widget.winfo_height()/2
230 self.aide.setText(aide)
234 def cree_menu(self,menu,itemlist,appli_composant):
236 Ajoute les items du tuple itemlist
241 for item in itemlist:
242 number_item=number_item + 1
248 newitem=(item[0],item[1])
254 if type(method) == types.TupleType:
255 # On a un tuple => on cree une cascade
256 menu_cascade=Tkinter.Menu(menu)
257 menu.add_cascade(label=label,menu=menu_cascade)
258 self.cree_menu(menu_cascade,method,appli_composant)
259 elif method[0] == '&':
260 # On a une chaine avec & en tete => on cree un radiobouton
261 command=getattr(appli_composant,method[1:])
262 menu.add_radiobutton(label=label,command=command)
263 if radio == None:radio=number_item
265 command=getattr(appli_composant,method)
266 menu.add_command(label=label+" "+raccourci,command=command)
268 self.top.bind(raccourci,command)
269 # Si au moins un radiobouton existe on invoke le premier
270 if radio:menu.invoke(radio)
272 def fill_menus(self,appli_composant,defs):
273 menudict=self.menubar.menudict
274 for mname,itemlist in defs:
275 menu=menudict.get(mname)
277 self.cree_menu(menu,itemlist,appli_composant)
279 def update_jdc_courant(self):
280 self.bureau.update_jdc_courant()
282 def affiche_alerte(self,titre,message):
283 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)