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
75 def send_message(self,message):
84 def lecture_parametres(self):
86 Active la lecture des paramètres standards et utilisateur
88 splash._splash.configure(text = "Chargement des paramètres utilisateur")
90 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
92 def cree_composants_graphiques(self):
94 Cree les constituants de l'application :
100 splash._splash.configure(text = "Chargement de l'IHM")
101 splash._splash.configure(text = "Chargement de la menubar")
103 self.menubar=menubar.MENUBAR(self,self.top)
104 splash._splash.configure(text = "Chargement de la toolbar")
106 self.toolbar=toolbar.TOOLBAR(self,self.top)
107 splash._splash.configure(text = "Chargement de la statusbar")
109 self.statusbar=statusbar.STATUSBAR(self.top)
111 def load_appli_composants(self):
112 splash._splash.configure(text = "Chargement des appli_composants")
113 for mname in self.appli_composants:
114 self.load_appli_composant(mname)
116 def load_appli_composant(self,mname):
117 module=__import__(mname,globals(),locals())
118 factory=getattr(module,mname.upper())
119 appli_composant=factory(self,self.top)
120 setattr(self,mname,appli_composant)
121 self.fill_menus(appli_composant,appli_composant.menu_defs)
122 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
124 def affiche_FAQ(self):
126 faq.affiche(self.top)
128 def affiche_infos(self,message):
129 self.statusbar.affiche_infos(message)
132 def initializeTk(self, root):
134 Initialize platform specific options
136 if sys.platform == 'mac':
137 self.initializeTk_mac(root)
138 elif sys.platform == 'win32':
139 self.initializeTk_win32(root)
141 self.initializeTk_unix(root)
143 def initializeTk_win32(self, root):
144 root.option_add('*Font', fontes.standard)
145 root.option_add('*EntryField.Entry.Font', fontes.standard)
146 root.option_add('*Listbox*Font',fontes.standard)
148 def initializeTk_colors_common(self, root):
149 root.option_add('*background', 'grey')
150 root.option_add('*foreground', 'black')
151 root.option_add('*EntryField.Entry.background', 'white')
152 root.option_add('*Entry*background', 'white')
153 root.option_add('*Listbox*background', 'white')
154 root.option_add('*Listbox*selectBackground', '#00008b')
155 root.option_add('*Listbox*selectForeground', 'white')
157 def initializeTk_mac(self, root):
158 self.initializeTk_colors_common(root)
160 def initializeTk_unix(self, root):
161 root.option_add('*Font', fontes.standard)
162 root.option_add('*EntryField.Entry.Font',fontes.standard )
163 root.option_add('*Listbox*Font', fontes.standard)
164 self.initializeTk_colors_common(root)
166 def get_texte_infos(self):
168 Retourne un texte d'informations sur la session courante d'EFICAS
170 texte = VERSION + '\n\n'
171 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
172 texte = texte + 'Equipe : SINETICS\n\n'
173 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
176 def efface_aide(self,event):
178 Efface la bulle d'aide d'un panneau
186 def affiche_aide(self,event,aide):
188 Affiche l'aide concernant un panneau
193 self.aide=tooltip.TOOLTIP(widget)
194 self.aide.xoffset = 10
195 self.aide.yoffset = - widget.winfo_height()/2
196 self.aide.setText(aide)
200 def cree_menu(self,menu,itemlist,appli_composant):
202 Ajoute les items du tuple itemlist
207 for item in itemlist:
208 number_item=number_item + 1
213 if type(method) == types.TupleType:
214 # On a un tuple => on cree une cascade
215 menu_cascade=Tkinter.Menu(menu)
216 menu.add_cascade(label=label,menu=menu_cascade)
217 self.cree_menu(menu_cascade,method,appli_composant)
218 elif method[0] == '&':
219 # On a une chaine avec & en tete => on cree un radiobouton
220 command=getattr(appli_composant,method[1:])
221 menu.add_radiobutton(label=label,command=command)
222 if radio == None:radio=number_item
224 command=getattr(appli_composant,method)
225 menu.add_command(label=label,command=command)
226 # Si au moins un radiobouton existe on invoke le premier
227 if radio:menu.invoke(radio)
229 def fill_menus(self,appli_composant,defs):
230 menudict=self.menubar.menudict
231 for mname,itemlist in defs:
232 menu=menudict.get(mname)
234 self.cree_menu(menu,itemlist,appli_composant)
236 def update_jdc_courant(self):
237 self.bureau.update_jdc_courant()
239 def affiche_alerte(self,titre,message):
240 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)