2009-06-04 4 views

Répondre

4

Il peut être fait par:

  1. Manipulation du ButtonPressEvent du NodeView. Vous devez appliquer le GLib.ConnectBeforeAttribute au gestionnaire d'événements.
  2. Création d'un menu et appel de sa méthode Popup() si le bouton droit de la souris était enfoncé.
  3. Gestion de ButtonPressEvent de l'élément de menu et utilisation de la propriété NodeSelection de NodeView pour supprimer le noeud.

A partir d'une fenêtre vide le code ressemblerait à ceci:

using System; 
using Gtk; 

public partial class MainWindow: Gtk.Window 
{ 
    NodeView myNodeView; 
    NodeStore store; 

    public MainWindow(): base (Gtk.WindowType.Toplevel) 
    { 
     Build(); 

     store = new Gtk.NodeStore (typeof (MyTreeNode)); 
     store.AddNode (new MyTreeNode ("Item A")); 
     store.AddNode (new MyTreeNode ("Item B")); 
     store.AddNode (new MyTreeNode ("Item C")); 

     myNodeView = new NodeView(store); 
     myNodeView.ButtonPressEvent += new ButtonPressEventHandler(OnItemButtonPressed); 

     myNodeView.AppendColumn ("Deletable items", new Gtk.CellRendererText(), "text", 0); 
     myNodeView.ShowAll(); 
     Add (myNodeView); 
    } 

    [GLib.ConnectBeforeAttribute] 
    protected void OnItemButtonPressed (object sender, ButtonPressEventArgs e) 
    { 
     if (e.Event.Button == 3) /* right click */ 
     { 
      Menu m = new Menu(); 
      MenuItem deleteItem = new MenuItem("Delete this item"); 
      deleteItem.ButtonPressEvent += new ButtonPressEventHandler(OnDeleteItemButtonPressed); 
      m.Add(deleteItem); 
      m.ShowAll(); 
      m.Popup(); 
     } 
    }               

    protected void OnDeleteItemButtonPressed (object sender, ButtonPressEventArgs e) 
    { 
     MyTreeNode node = (MyTreeNode)myNodeView.NodeSelection.SelectedNode; 
     store.RemoveNode(node); 
    } 

    protected void OnDeleteEvent (object sender, DeleteEventArgs a) 
    { 
     Application.Quit(); 
     a.RetVal = true; 
    } 
} 

public class MyTreeNode : Gtk.TreeNode { 

    public MyTreeNode (string text) 
    { 
     ItemText=text; 
    } 

    [Gtk.TreeNodeValue (Column=0)] 
    public string ItemText {get; set;} 
} 
Questions connexes