]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/appli.py
Salome HOME
PN : ajout des raccourcis clavier
[tools/eficas.git] / Editeur / appli.py
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.
8 #
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.
13 #
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.
17 #
18 #
19 # ======================================================================
20 """
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
25 """
26 # Modules Python
27 import os
28 import sys
29 import types
30 import Pmw
31 import Tkinter
32 from widgets import showerror
33
34 # Modules Eficas
35 import splash
36 import prefs
37 import fontes
38 import tooltip
39 import properties
40 from widgets import Fenetre
41 from Misc import MakeNomComplet
42
43 VERSION="EFICAS v1.6"
44
45 class APPLI: 
46   def __init__ (self,master,code='ASTER',fichier=None) :
47       self.top=master
48       self.code=code
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)
53       self.top.withdraw()
54       self.initializeTk(master)
55       Pmw.initialise(master)
56       self.lecture_parametres()
57       self.format_fichier = Tkinter.StringVar()
58       self.message=''
59       self.cree_composants_graphiques()
60       self.load_appli_composants()                      # Creation du BUREAU
61       splash.fini_splash()
62       self.affiche_FAQ()
63       # AY : cas ou le nom du fichier a été passé en argument
64       if fichier :
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)
68            else:
69               self.bureau.openJDC( fich)
70       # AY : fin
71       # PN : ajout d un attribut pour indiquer si 
72       # l appli a ete lance depuis Salome
73       self.salome=0
74
75      
76
77   def send_message(self,message):
78       self.message=message
79
80   def exitEFICAS(self):
81       self.quit()
82
83   def quit(self):
84       self.top.quit()
85
86   def lecture_parametres(self):
87       """
88           Active la lecture des paramètres standards et utilisateur
89       """
90       splash._splash.configure(text = "Chargement des paramètres utilisateur")
91       import configuration
92       self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
93
94   def cree_composants_graphiques(self):
95       """
96           Cree les constituants de l'application :
97            - menubar
98            - toolbar
99            - bureau
100            - statusbar
101       """
102       splash._splash.configure(text = "Chargement de l'IHM")
103       splash._splash.configure(text = "Chargement de la menubar")
104       import menubar
105       self.menubar=menubar.MENUBAR(self,self.top)
106       splash._splash.configure(text = "Chargement de la toolbar")
107       import toolbar
108       self.toolbar=toolbar.TOOLBAR(self,self.top)
109       splash._splash.configure(text = "Chargement de la statusbar")
110       import statusbar
111       self.statusbar=statusbar.STATUSBAR(self.top)
112
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)
117
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)
125
126   def affiche_FAQ(self):
127       import faq
128       faq.affiche(self.top)
129
130   def affiche_infos(self,message):
131       self.statusbar.affiche_infos(message)
132       return
133
134   def  initializeTk(self, root):
135         """
136         Initialize platform specific options
137         """
138         if sys.platform == 'mac':
139             self.initializeTk_mac(root)
140         elif sys.platform == 'win32':
141             self.initializeTk_win32(root)
142         else:
143             self.initializeTk_unix(root)
144
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)
149
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')
158
159   def initializeTk_mac(self, root):
160         self.initializeTk_colors_common(root)
161
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)
167
168   def get_texte_infos(self):
169       """
170           Retourne un texte d'informations sur la session courante d'EFICAS
171       """
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)
176       return texte
177
178   def efface_aide(self,event):
179       """
180           Efface la bulle d'aide d'un panneau
181       """
182       try:
183           self.aide.destroy()
184       except:
185           pass
186       return
187
188   def affiche_aide(self,event,aide):
189       """
190           Affiche l'aide concernant un panneau
191       """
192       x=event.x
193       y=event.y
194       widget=event.widget
195       self.aide=tooltip.TOOLTIP(widget)
196       self.aide.xoffset = 10
197       self.aide.yoffset = - widget.winfo_height()/2
198       self.aide.setText(aide)
199       self.aide._showTip()
200       return 
201
202   def cree_menu(self,menu,itemlist,appli_composant):
203       """
204           Ajoute les items du tuple itemlist
205           dans le menu menu
206       """
207       number_item=0
208       radio=None
209       for item in itemlist:
210          number_item=number_item + 1
211          if not item :
212             menu.add_separator()
213          else:
214             if len(item)==3:
215                raccourci=item[2]
216                newitem=(item[0],item[1])
217             else :
218                raccourci=""
219                newitem=item
220             item=newitem
221             label,method=item
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
232             else:
233                command=getattr(appli_composant,method)
234                menu.add_command(label=label,command=command)
235                if raccourci != "" :
236                   self.top.bind(raccourci,command)
237       # Si au moins un radiobouton existe on invoke le premier
238       if radio:menu.invoke(radio)
239
240   def fill_menus(self,appli_composant,defs):
241       menudict=self.menubar.menudict
242       for mname,itemlist in defs:
243           menu=menudict.get(mname)
244           if not menu:continue
245           self.cree_menu(menu,itemlist,appli_composant)
246
247   def update_jdc_courant(self):
248       self.bureau.update_jdc_courant()
249
250   def affiche_alerte(self,titre,message):
251       f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
252       f.wait()
253
254