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,test=0) :
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)
57 self.liste_simp_reel=[]
58 # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
59 # Si test est different de 0, les panneaux ne sont pas activés
61 Pmw.initialise(master)
62 self.lecture_parametres()
63 self.format_fichier = Tkinter.StringVar()
65 self.cree_composants_graphiques()
66 self.load_appli_composants() # Creation du BUREAU
67 # PN : ajout d un attribut pour indiquer si
68 # l appli a ete lance depuis Salome
73 # AY : cas ou le nom du fichier a été passé en argument
75 fich=str(MakeNomComplet.FILENAME(fichier))
76 if not os.path.isfile(fich):
77 showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
79 self.bureau.openJDC( fich)
83 def send_message(self,message):
92 def lecture_parametres(self):
94 Active la lecture des paramètres standards et utilisateur
97 splash._splash.configure(text = "Chargement des paramètres utilisateur")
99 self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
101 def cree_composants_graphiques(self):
103 Cree les constituants de l'application :
110 splash._splash.configure(text = "Chargement de l'IHM")
111 splash._splash.configure(text = "Chargement de la menubar")
113 self.menubar=menubar.MENUBAR(self,self.top)
115 splash._splash.configure(text = "Chargement de la toolbar")
117 self.toolbar=toolbar.TOOLBAR(self,self.top)
119 splash._splash.configure(text = "Chargement de la statusbar")
121 self.statusbar=statusbar.STATUSBAR(self.top)
123 def load_appli_composants(self):
125 splash._splash.configure(text = "Chargement des appli_composants")
126 for mname in self.appli_composants:
127 self.load_appli_composant(mname)
129 def load_appli_composant(self,mname):
130 module=__import__(mname,globals(),locals())
131 factory=getattr(module,mname.upper())
132 appli_composant=factory(self,self.top)
133 setattr(self,mname,appli_composant)
134 self.fill_menus(appli_composant,appli_composant.menu_defs)
135 self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
137 def affiche_FAQ(self):
139 #faq.affiche(self.top)
141 def affiche_infos(self,message):
142 self.statusbar.affiche_infos(message)
145 def initializeTk(self, root):
147 Initialize platform specific options
149 if sys.platform == 'mac':
150 self.initializeTk_mac(root)
151 elif sys.platform == 'win32':
152 self.initializeTk_win32(root)
154 self.initializeTk_unix(root)
156 def initializeTk_win32(self, root):
157 root.option_add('*Font', fontes.standard)
158 root.option_add('*EntryField.Entry.Font', fontes.standard)
159 root.option_add('*Listbox*Font',fontes.standard)
161 def initializeTk_colors_common(self, root):
162 root.option_add('*background', 'grey')
163 root.option_add('*foreground', 'black')
164 root.option_add('*EntryField.Entry.background', 'white')
165 root.option_add('*Entry*background', 'white')
166 root.option_add('*Listbox*background', 'white')
167 root.option_add('*Listbox*selectBackground', '#00008b')
168 root.option_add('*Listbox*selectForeground', 'white')
170 def initializeTk_mac(self, root):
171 self.initializeTk_colors_common(root)
173 def initializeTk_unix(self, root):
174 root.option_add('*Font', fontes.standard)
175 root.option_add('*EntryField.Entry.Font',fontes.standard )
176 root.option_add('*Listbox*Font', fontes.standard)
177 self.initializeTk_colors_common(root)
179 def get_texte_infos(self):
181 Retourne un texte d'informations sur la session courante d'EFICAS
183 texte = VERSION + '\n\n'
184 texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
185 texte = texte + 'Equipe : SINETICS\n\n'
186 texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
189 def efface_aide(self,event):
191 Efface la bulle d'aide d'un panneau
199 def affiche_aide(self,event,aide):
201 Affiche l'aide concernant un panneau
206 self.aide=tooltip.TOOLTIP(widget)
207 self.aide.xoffset = 10
208 self.aide.yoffset = - widget.winfo_height()/2
209 self.aide.setText(aide)
213 def cree_menu(self,menu,itemlist,appli_composant):
215 Ajoute les items du tuple itemlist
220 for item in itemlist:
221 number_item=number_item + 1
227 newitem=(item[0],item[1])
233 if type(method) == types.TupleType:
234 # On a un tuple => on cree une cascade
235 menu_cascade=Tkinter.Menu(menu)
236 menu.add_cascade(label=label,menu=menu_cascade)
237 self.cree_menu(menu_cascade,method,appli_composant)
238 elif method[0] == '&':
239 # On a une chaine avec & en tete => on cree un radiobouton
240 command=getattr(appli_composant,method[1:])
241 menu.add_radiobutton(label=label,command=command)
242 if radio == None:radio=number_item
244 command=getattr(appli_composant,method)
245 menu.add_command(label=label,command=command)
247 self.top.bind(raccourci,command)
248 # Si au moins un radiobouton existe on invoke le premier
249 if radio:menu.invoke(radio)
251 def fill_menus(self,appli_composant,defs):
252 menudict=self.menubar.menudict
253 for mname,itemlist in defs:
254 menu=menudict.get(mname)
256 self.cree_menu(menu,itemlist,appli_composant)
258 def update_jdc_courant(self):
259 self.bureau.update_jdc_courant()
261 def affiche_alerte(self,titre,message):
262 f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)