+# 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 JDCDISPLAY qui réalise l'affichage
du jeu de commandes sous la forme d'un arbre et de panneaux qui portent
les informations attachées au noeud de l'arbre sélectionné
"""
# Modules Python
+import types
import Tkinter
import Pmw
self.modified='n'
self.pane=Pmw.PanedWidget(self.parent,orient='horizontal')
- self.pane.add('treebrowser',min=0.5)
- self.pane.add('selected',min=0.5)
+ self.pane.add('treebrowser',min=0.4,size=0.5)
+ self.pane.add('selected',min=0.4)
self.pane.pack(expand=1,fill='both')
self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'),
- self.appli,self.select_node)
+ self.appli,self.select_node,self.make_rmenu)
+
+ def make_rmenu(self,node,event):
+ if hasattr(node.item,'rmenu_specs'):
+ rmenu = Tkinter.Menu(self.pane.pane('treebrowser'), tearoff=0)
+ #node.select()
+ self.cree_menu(rmenu,node.item.rmenu_specs,node)
+ rmenu.tk_popup(event.x_root,event.y_root)
+
+ def cree_menu(self,menu,itemlist,node):
+ """
+ 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,node)
+ elif method[0] == '&':
+ # On a une chaine avec & en tete => on cree un radiobouton
+ try:
+ command=getattr(node.item,method[1:])
+ menu.add_radiobutton(label=label,command=lambda a=self.appli,c=command:c(a))
+ if radio == None:radio=number_item
+ except:pass
+ else:
+ try:
+ command=getattr(node.item,method)
+ menu.add_command(label=label,command=lambda a=self.appli,c=command:c(a))
+ except:pass
+ # Si au moins un radiobouton existe on invoke le premier
+ if radio:menu.invoke(radio)
def select_node(self,node):
"""
# on rend la copie à nouveau possible en libérant le flag edit
self.edit="copier"
+ def update(self):
+ """Cette methode est utilisee par le JDC associe pour
+ signaler des modifications globales du JDC
+ """
+ self.tree.update()
+