Salome HOME
CCAR: correction mineures
[tools/eficas.git] / Editeur / jdcdisplay.py
index 7c7060691dd8bbcafe504456aacefb12d9e00a95..da4d1ac82486a5c00b079de03517698e74d470a2 100644 (file)
@@ -23,6 +23,7 @@
    les informations attachées au noeud de l'arbre sélectionné
 """
 # Modules Python
+import types
 import Tkinter
 import Pmw
 
@@ -72,11 +73,51 @@ class JDCDISPLAY:
       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):
       """
@@ -194,7 +235,7 @@ class JDCDISPLAY:
       else:
           showinfo("Copie impossible",
                    "Vous ne pouvez copier que des commandes ou des mots-clés facteurs !")
-          return
+      return
 
    def doPaste_Commande(self,objet_a_copier):
       """
@@ -265,3 +306,9 @@ class JDCDISPLAY:
       # 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()
+