1 # CONFIGURATION MANAGEMENT OF EDF VERSION
2 # ======================================================================
3 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
4 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
5 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
6 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
7 # (AT YOUR OPTION) ANY LATER VERSION.
9 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
10 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
11 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
12 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
15 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
16 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
19 # ======================================================================
21 Ce module contient la classe APPLI qui est la classe mère de
22 l'application EFICAS. Elle prend en charge l'organisation générale
23 des composants graphiques et l'initialisation Tk
24 L'aspect applicatif doit etre pris en charge par la classe dérivée
32 from widgets import showerror
40 from widgets import Fenetre
41 from Misc import MakeNomComplet
46 def __init__ (self,master,code='ASTER',fichier=None) :
49 self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
50 self.top.minsize(900,500)
51 self.top.geometry("900x500")
52 self.top.title(VERSION + ' pour '+self.code)
54 self.initializeTk(master)
55 Pmw.initialise(master)
56 self.lecture_parametres()
57 self.format_fichier = Tkinter.StringVar()
59 self.cree_composants_graphiques()
60 self.load_appli_composants() # Creation du BUREAU
63 # AY : cas ou le nom du fichier a été passé en argument
65 fich=str(MakeNomComplet.FILENAME(fichier))
66 if not os.path.isfile(fich):
67 showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
69 self.bureau.openJDC( fich)
71 # PN : ajout d un attribut pour indiquer si
72 # l appli a ete lance depuis Salome
77 def send_message(self,message):
86 def lecture_parametres(self):
88 Active la lecture des paramètres standards et utilisateur
90 splash._splash.configure(text = "Chargement des paramètres utilisateur")
92 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
94 def cree_composants_graphiques(self):
96 Cree les constituants de l'application :
102 splash._splash.configure(text = "Chargement de l'IHM")
103 splash._splash.configure(text = "Chargement de la menubar")
105 self.menubar=menubar.MENUBAR(self,self.top)
106 splash._splash.configure(text = "Chargement de la toolbar")
108 self.toolbar=toolbar.TOOLBAR(self,self.top)
109 splash._splash.configure(text = "Chargement de la statusbar")
111 self.statusbar=statusbar.STATUSBAR(self.top)
113 def load_appli_composants(self):
114 splash._splash.configure(text = "Chargement des appli_composants")
115 for mname in self.appli_composants:
116 self.load_appli_composant(mname)
118 def load_appli_composant(self,mname):
119 module=__import__(mname,globals(),locals())
120 factory=getattr(module,mname.upper())
121 appli_composant=factory(self,self.top)
122 setattr(self,mname,appli_composant)
123 self.fill_menus(appli_composant,appli_composant.menu_defs)
124 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
126 def affiche_FAQ(self):
128 faq.affiche(self.top)
130 def affiche_infos(self,message):
131 self.statusbar.affiche_infos(message)
134 def initializeTk(self, root):
136 Initialize platform specific options
138 if sys.platform == 'mac':
139 self.initializeTk_mac(root)
140 elif sys.platform == 'win32':
141 self.initializeTk_win32(root)
143 self.initializeTk_unix(root)
145 def initializeTk_win32(self, root):
146 root.option_add('*Font', fontes.standard)
147 root.option_add('*EntryField.Entry.Font', fontes.standard)
148 root.option_add('*Listbox*Font',fontes.standard)
150 def initializeTk_colors_common(self, root):
151 root.option_add('*background', 'grey')
152 root.option_add('*foreground', 'black')
153 root.option_add('*EntryField.Entry.background', 'white')
154 root.option_add('*Entry*background', 'white')
155 root.option_add('*Listbox*background', 'white')
156 root.option_add('*Listbox*selectBackground', '#00008b')
157 root.option_add('*Listbox*selectForeground', 'white')
159 def initializeTk_mac(self, root):
160 self.initializeTk_colors_common(root)
162 def initializeTk_unix(self, root):
163 root.option_add('*Font', fontes.standard)
164 root.option_add('*EntryField.Entry.Font',fontes.standard )
165 root.option_add('*Listbox*Font', fontes.standard)
166 self.initializeTk_colors_common(root)
168 def get_texte_infos(self):
170 Retourne un texte d'informations sur la session courante d'EFICAS
172 texte = VERSION + '\n\n'
173 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
174 texte = texte + 'Equipe : SINETICS\n\n'
175 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
178 def efface_aide(self,event):
180 Efface la bulle d'aide d'un panneau
188 def affiche_aide(self,event,aide):
190 Affiche l'aide concernant un panneau
195 self.aide=tooltip.TOOLTIP(widget)
196 self.aide.xoffset = 10
197 self.aide.yoffset = - widget.winfo_height()/2
198 self.aide.setText(aide)
202 def cree_menu(self,menu,itemlist,appli_composant):
204 Ajoute les items du tuple itemlist
209 for item in itemlist:
210 number_item=number_item + 1
216 newitem=(item[0],item[1])
222 if type(method) == types.TupleType:
223 # On a un tuple => on cree une cascade
224 menu_cascade=Tkinter.Menu(menu)
225 menu.add_cascade(label=label,menu=menu_cascade)
226 self.cree_menu(menu_cascade,method,appli_composant)
227 elif method[0] == '&':
228 # On a une chaine avec & en tete => on cree un radiobouton
229 command=getattr(appli_composant,method[1:])
230 menu.add_radiobutton(label=label,command=command)
231 if radio == None:radio=number_item
233 command=getattr(appli_composant,method)
234 menu.add_command(label=label,command=command)
236 self.top.bind(raccourci,command)
237 # Si au moins un radiobouton existe on invoke le premier
238 if radio:menu.invoke(radio)
240 def fill_menus(self,appli_composant,defs):
241 menudict=self.menubar.menudict
242 for mname,itemlist in defs:
243 menu=menudict.get(mname)
245 self.cree_menu(menu,itemlist,appli_composant)
247 def update_jdc_courant(self):
248 self.bureau.update_jdc_courant()
250 def affiche_alerte(self,titre,message):
251 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)