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
47 def __init__ (self,master,code='ASTER',fichier=None) :
50 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
51 self.top.minsize(900,500)
52 self.top.geometry("900x500")
53 self.top.title(VERSION + ' pour '+self.code)
55 self.initializeTk(master)
56 Pmw.initialise(master)
57 self.lecture_parametres()
58 self.format_fichier = Tkinter.StringVar()
60 self.cree_composants_graphiques()
61 self.load_appli_composants() # Creation du BUREAU
64 # AY : cas ou le nom du fichier a été passé en argument
66 fich=str(MakeNomComplet.FILENAME(fichier))
67 if not os.path.isfile(fich):
68 showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
70 self.bureau.openJDC( fich)
72 # PN : ajout d un attribut pour indiquer si
73 # l appli a ete lance depuis Salome
78 def send_message(self,message):
87 def lecture_parametres(self):
89 Active la lecture des paramètres standards et utilisateur
91 splash._splash.configure(text = "Chargement des paramètres utilisateur")
93 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
95 def cree_composants_graphiques(self):
97 Cree les constituants de l'application :
103 splash._splash.configure(text = "Chargement de l'IHM")
104 splash._splash.configure(text = "Chargement de la menubar")
106 self.menubar=menubar.MENUBAR(self,self.top)
107 splash._splash.configure(text = "Chargement de la toolbar")
109 self.toolbar=toolbar.TOOLBAR(self,self.top)
110 splash._splash.configure(text = "Chargement de la statusbar")
112 self.statusbar=statusbar.STATUSBAR(self.top)
114 def load_appli_composants(self):
115 splash._splash.configure(text = "Chargement des appli_composants")
116 for mname in self.appli_composants:
117 self.load_appli_composant(mname)
119 def load_appli_composant(self,mname):
120 module=__import__(mname,globals(),locals())
121 factory=getattr(module,mname.upper())
122 appli_composant=factory(self,self.top)
123 setattr(self,mname,appli_composant)
124 self.fill_menus(appli_composant,appli_composant.menu_defs)
125 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
127 def affiche_FAQ(self):
129 faq.affiche(self.top)
131 def affiche_infos(self,message):
132 self.statusbar.affiche_infos(message)
135 def initializeTk(self, root):
137 Initialize platform specific options
139 if sys.platform == 'mac':
140 self.initializeTk_mac(root)
141 elif sys.platform == 'win32':
142 self.initializeTk_win32(root)
144 self.initializeTk_unix(root)
146 def initializeTk_win32(self, root):
147 root.option_add('*Font', fontes.standard)
148 root.option_add('*EntryField.Entry.Font', fontes.standard)
149 root.option_add('*Listbox*Font',fontes.standard)
151 def initializeTk_colors_common(self, root):
152 root.option_add('*background', 'grey')
153 root.option_add('*foreground', 'black')
154 root.option_add('*EntryField.Entry.background', 'white')
155 root.option_add('*Entry*background', 'white')
156 root.option_add('*Listbox*background', 'white')
157 root.option_add('*Listbox*selectBackground', '#00008b')
158 root.option_add('*Listbox*selectForeground', 'white')
160 def initializeTk_mac(self, root):
161 self.initializeTk_colors_common(root)
163 def initializeTk_unix(self, root):
164 root.option_add('*Font', fontes.standard)
165 root.option_add('*EntryField.Entry.Font',fontes.standard )
166 root.option_add('*Listbox*Font', fontes.standard)
167 self.initializeTk_colors_common(root)
169 def get_texte_infos(self):
171 Retourne un texte d'informations sur la session courante d'EFICAS
173 texte = VERSION + '\n\n'
174 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
175 texte = texte + 'Equipe : SINETICS\n\n'
176 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
179 def efface_aide(self,event):
181 Efface la bulle d'aide d'un panneau
189 def affiche_aide(self,event,aide):
191 Affiche l'aide concernant un panneau
196 self.aide=tooltip.TOOLTIP(widget)
197 self.aide.xoffset = 10
198 self.aide.yoffset = - widget.winfo_height()/2
199 self.aide.setText(aide)
203 def cree_menu(self,menu,itemlist,appli_composant):
205 Ajoute les items du tuple itemlist
210 for item in itemlist:
211 number_item=number_item + 1
217 newitem=(item[0],item[1])
223 if type(method) == types.TupleType:
224 # On a un tuple => on cree une cascade
225 menu_cascade=Tkinter.Menu(menu)
226 menu.add_cascade(label=label,menu=menu_cascade)
227 self.cree_menu(menu_cascade,method,appli_composant)
228 elif method[0] == '&':
229 # On a une chaine avec & en tete => on cree un radiobouton
230 command=getattr(appli_composant,method[1:])
231 menu.add_radiobutton(label=label,command=command)
232 if radio == None:radio=number_item
234 command=getattr(appli_composant,method)
235 menu.add_command(label=label,command=command)
237 self.top.bind(raccourci,command)
238 # Si au moins un radiobouton existe on invoke le premier
239 if radio:menu.invoke(radio)
241 def fill_menus(self,appli_composant,defs):
242 menudict=self.menubar.menudict
243 for mname,itemlist in defs:
244 menu=menudict.get(mname)
246 self.cree_menu(menu,itemlist,appli_composant)
248 def update_jdc_courant(self):
249 self.bureau.update_jdc_courant()
251 def affiche_alerte(self,titre,message):
252 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)