Salome HOME
CCAR : remplacement separateur New24.gif par Sep.gif
[tools/eficas.git] / Editeur / appli.py
index c00568cef625ee92930ce16957d33e941170612f..8dd925b7d1a59d36d30784113264598afdf6e095 100644 (file)
@@ -25,6 +25,7 @@
 """
 # Modules Python
 import sys
+import types
 import Pmw
 import Tkinter
 
@@ -32,6 +33,10 @@ import Tkinter
 import splash
 import prefs
 import fontes
+import tooltip
+import properties
+
+VERSION="EFICAS v1.3"
 
 class APPLI: 
   def __init__ (self,master,code='ASTER',fichier=None) :
@@ -40,7 +45,7 @@ class APPLI:
       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)
@@ -48,7 +53,7 @@ class APPLI:
       self.format_fichier = Tkinter.StringVar()
       self.message=''
       self.cree_composants_graphiques()
-      self.load_extensions()
+      self.load_appli_composants()
       self.affiche_FAQ()
       splash.fini_splash()
 
@@ -88,18 +93,18 @@ class APPLI:
       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
@@ -147,10 +152,10 @@ class APPLI:
       """
           Retourne un texte d'informations sur la session courante d'EFICAS
       """
-      texte = 'EFICAS v1.1\n\n'
+      texte = VERSION + '\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 = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
       return texte
 
   def efface_aide(self,event):
@@ -170,24 +175,45 @@ class APPLI:
       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:
+            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)
+      # 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)