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
48 def __init__ (self,master,code='ASTER',fichier=None,test=0) :
51 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
52 self.top.minsize(900,500)
53 self.top.geometry("900x500")
54 self.top.title(VERSION + ' pour '+self.code)
56 self.initializeTk(master)
57 Pmw.initialise(master)
60 self.liste_simp_reel=[]
61 # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
62 # Si test est different de 0, les panneaux ne sont pas activés
65 # Lecture des parametres de configuration (fichier global editeur.ini
66 # et utilisateur eficas.ini)
67 self.lecture_parametres()
69 self.format_fichier = Tkinter.StringVar()
71 # Avant la creation du bureau qui lit le catalogue
72 self.version_code=session.d_env.cata
74 # Creation de la menubar, toolbar, messagebar
75 self.cree_composants_graphiques()
76 # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
77 self.load_appli_composants()
79 # PN : ajout d un attribut pour indiquer si
80 # l appli a ete lance depuis Salome
87 # Ouverture des fichiers de commandes donnes sur la ligne de commande
88 for study in session.d_env.studies:
90 d=session.get_unit(study,self)
91 self.bureau.openJDC(study["comm"],d)
93 def send_message(self,message):
102 def lecture_parametres(self):
104 Active la lecture des paramètres standards et utilisateur
107 splash._splash.configure(text = "Chargement des paramètres utilisateur")
109 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
111 def cree_composants_graphiques(self):
113 Cree les constituants graphiques fixes de l'application :
119 splash._splash.configure(text = "Chargement de l'IHM")
120 splash._splash.configure(text = "Chargement de la menubar")
122 self.menubar=menubar.MENUBAR(self,self.top)
124 splash._splash.configure(text = "Chargement de la toolbar")
126 self.toolbar=toolbar.TOOLBAR(self,self.top)
128 splash._splash.configure(text = "Chargement de la statusbar")
130 self.statusbar=statusbar.STATUSBAR(self.top)
132 def load_appli_composants(self):
134 Cree les autres constituants graphiques de l'application :
138 Cette creation est parametrable par fichier prefs.py
141 splash._splash.configure(text = "Chargement des appli_composants")
142 for mname in self.appli_composants:
143 self.load_appli_composant(mname)
145 def load_appli_composant(self,mname):
146 module=__import__(mname,globals(),locals())
147 factory=getattr(module,mname.upper())
148 appli_composant=factory(self,self.top)
149 setattr(self,mname,appli_composant)
150 self.fill_menus(appli_composant,appli_composant.menu_defs)
151 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
153 def affiche_FAQ(self):
155 faq.affiche(self.top)
157 def affiche_infos(self,message):
158 self.statusbar.affiche_infos(message)
161 def initializeTk(self, root):
163 Initialize platform specific options
165 if sys.platform == 'mac':
166 self.initializeTk_mac(root)
167 elif sys.platform == 'win32':
168 self.initializeTk_win32(root)
170 self.initializeTk_unix(root)
172 def initializeTk_win32(self, root):
173 root.option_add('*Font', fontes.standard)
174 root.option_add('*EntryField.Entry.Font', fontes.standard)
175 root.option_add('*Listbox*Font',fontes.standard)
177 def initializeTk_colors_common(self, root):
178 root.option_add('*background', 'grey')
179 root.option_add('*foreground', 'black')
180 root.option_add('*EntryField.Entry.background', 'white')
181 root.option_add('*Entry*background', 'white')
182 root.option_add('*Listbox*background', 'white')
183 root.option_add('*Listbox*selectBackground', '#00008b')
184 root.option_add('*Listbox*selectForeground', 'white')
186 def initializeTk_mac(self, root):
187 self.initializeTk_colors_common(root)
189 def initializeTk_unix(self, root):
190 root.option_add('*Font', fontes.standard)
191 root.option_add('*EntryField.Entry.Font',fontes.standard )
192 root.option_add('*Listbox*Font', fontes.standard)
193 self.initializeTk_colors_common(root)
195 def get_texte_infos(self):
197 Retourne un texte d'informations sur la session courante d'EFICAS
199 texte = VERSION + '\n\n'
200 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
201 texte = texte + 'Equipe : SINETICS\n\n'
202 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
205 def efface_aide(self,event):
207 Efface la bulle d'aide d'un panneau
215 def affiche_aide(self,event,aide):
217 Affiche l'aide concernant un panneau
222 self.aide=tooltip.TOOLTIP(widget)
223 self.aide.xoffset = 10
224 self.aide.yoffset = - widget.winfo_height()/2
225 self.aide.setText(aide)
229 def cree_menu(self,menu,itemlist,appli_composant):
231 Ajoute les items du tuple itemlist
236 for item in itemlist:
237 number_item=number_item + 1
243 newitem=(item[0],item[1])
249 if type(method) == types.TupleType:
250 # On a un tuple => on cree une cascade
251 menu_cascade=Tkinter.Menu(menu)
252 menu.add_cascade(label=label,menu=menu_cascade)
253 self.cree_menu(menu_cascade,method,appli_composant)
254 elif method[0] == '&':
255 # On a une chaine avec & en tete => on cree un radiobouton
256 command=getattr(appli_composant,method[1:])
257 menu.add_radiobutton(label=label,command=command)
258 if radio == None:radio=number_item
260 command=getattr(appli_composant,method)
261 menu.add_command(label=label,command=command)
263 self.top.bind(raccourci,command)
264 # Si au moins un radiobouton existe on invoke le premier
265 if radio:menu.invoke(radio)
267 def fill_menus(self,appli_composant,defs):
268 menudict=self.menubar.menudict
269 for mname,itemlist in defs:
270 menu=menudict.get(mname)
272 self.cree_menu(menu,itemlist,appli_composant)
274 def update_jdc_courant(self):
275 self.bureau.update_jdc_courant()
277 def affiche_alerte(self,titre,message):
278 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)