+# -*- coding: utf-8 -*-
+# CONFIGURATION MANAGEMENT OF EDF VERSION
+# ======================================================================
+# COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
+# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
+# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
+# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
+# (AT YOUR OPTION) ANY LATER VERSION.
+#
+# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
+# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
+# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
+# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+#
+# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
+# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
+# 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+#
+#
+# ======================================================================
"""
Ce module contient la classe APPLI qui est la classe mère de
l'application EFICAS. Elle prend en charge l'organisation générale
L'aspect applicatif doit etre pris en charge par la classe dérivée
"""
# Modules Python
+import os
import sys
+import types
import Pmw
import Tkinter
+from widgets import showerror
# Modules Eficas
import splash
import prefs
import fontes
+import tooltip
+import properties
+from widgets import Fenetre
+from Misc import MakeNomComplet
+
+VERSION="EFICAS v1.6"
class APPLI:
def __init__ (self,master,code='ASTER',fichier=None) :
self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
self.top.minsize(900,500)
self.top.geometry("900x500")
- self.top.title('EFICAS v1.1 pour '+self.code)
+ self.top.title(VERSION + ' pour '+self.code)
self.top.withdraw()
self.initializeTk(master)
Pmw.initialise(master)
self.format_fichier = Tkinter.StringVar()
self.message=''
self.cree_composants_graphiques()
- self.load_extensions()
- self.affiche_FAQ()
+ self.load_appli_composants() # Creation du BUREAU
splash.fini_splash()
+ self.affiche_FAQ()
+ # AY : cas ou le nom du fichier a été passé en argument
+ if fichier :
+ fich=str(MakeNomComplet.FILENAME(fichier))
+ if not os.path.isfile(fich):
+ showerror("Fichier inexistant", "Fichier %s en argument n'existe pas" % fich)
+ else:
+ self.bureau.openJDC( fich)
+ # AY : fin
+ # PN : ajout d un attribut pour indiquer si
+ # l appli a ete lance depuis Salome
+ self.salome=0
+
+
def send_message(self,message):
self.message=message
"""
Cree les constituants de l'application :
- menubar
- - tollbar
+ - toolbar
- bureau
- statusbar
"""
import statusbar
self.statusbar=statusbar.STATUSBAR(self.top)
- def load_extensions(self):
- splash._splash.configure(text = "Chargement des extensions")
- for mname in self.extensions:
- self.load_extension(mname)
+ def load_appli_composants(self):
+ splash._splash.configure(text = "Chargement des appli_composants")
+ for mname in self.appli_composants:
+ self.load_appli_composant(mname)
- def load_extension(self,mname):
+ def load_appli_composant(self,mname):
module=__import__(mname,globals(),locals())
factory=getattr(module,mname.upper())
- extension=factory(self,self.top)
- setattr(self,mname,extension)
- self.fill_menus(extension,extension.menu_defs)
- self.toolbar.creer_boutons_extension(extension.button_defs,extension)
+ appli_composant=factory(self,self.top)
+ setattr(self,mname,appli_composant)
+ self.fill_menus(appli_composant,appli_composant.menu_defs)
+ self.toolbar.creer_boutons_appli_composant(appli_composant.button_defs,appli_composant)
def affiche_FAQ(self):
import faq
"""
Retourne un texte d'informations sur la session courante d'EFICAS
"""
- texte = 'EFICAS v1.1\n\n'
- texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
- texte = texte + 'Equipe : MTI/MMN\n\n'
- texte = texte + 'Code utilisé : %s\n' %self.code
+ texte = VERSION + '\n\n'
+ texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
+ texte = texte + 'Equipe : SINETICS\n\n'
+ texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
return texte
def efface_aide(self,event):
x=event.x
y=event.y
widget=event.widget
- self.aide = Tkinter.Label(widget ,text = aide,
- bg="yellow",relief="ridge",anchor='w')
- self.aide.place(in_=widget,
- relx=0.5,rely=0.5,anchor='center')
- print aide
- return
-
- def fill_menus(self,extension,defs):
+ self.aide=tooltip.TOOLTIP(widget)
+ self.aide.xoffset = 10
+ self.aide.yoffset = - widget.winfo_height()/2
+ self.aide.setText(aide)
+ self.aide._showTip()
+ return
+
+ def cree_menu(self,menu,itemlist,appli_composant):
+ """
+ Ajoute les items du tuple itemlist
+ dans le menu menu
+ """
+ number_item=0
+ radio=None
+ for item in itemlist:
+ number_item=number_item + 1
+ if not item :
+ menu.add_separator()
+ else:
+ if len(item)==3:
+ raccourci=item[2]
+ newitem=(item[0],item[1])
+ else :
+ raccourci=""
+ newitem=item
+ item=newitem
+ label,method=item
+ if type(method) == types.TupleType:
+ # On a un tuple => on cree une cascade
+ menu_cascade=Tkinter.Menu(menu)
+ menu.add_cascade(label=label,menu=menu_cascade)
+ self.cree_menu(menu_cascade,method,appli_composant)
+ elif method[0] == '&':
+ # On a une chaine avec & en tete => on cree un radiobouton
+ command=getattr(appli_composant,method[1:])
+ menu.add_radiobutton(label=label,command=command)
+ if radio == None:radio=number_item
+ else:
+ command=getattr(appli_composant,method)
+ menu.add_command(label=label,command=command)
+ if raccourci != "" :
+ self.top.bind(raccourci,command)
+ # Si au moins un radiobouton existe on invoke le premier
+ if radio:menu.invoke(radio)
+
+ def fill_menus(self,appli_composant,defs):
menudict=self.menubar.menudict
for mname,itemlist in defs:
menu=menudict.get(mname)
if not menu:continue
- for item in itemlist:
- if not item :
- menu.add_separator()
- else:
- label,method=item
- command=getattr(extension,method)
- menu.add_command(label=label,command=command)
-
-
+ self.cree_menu(menu,itemlist,appli_composant)
+
+ def update_jdc_courant(self):
+ self.bureau.update_jdc_courant()
+
+ def affiche_alerte(self,titre,message):
+ f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
+ f.wait()
+
+