GtkSharp/gtk/TreeNode.cs
Mike Kestner b57221cf44 2003-11-05 Mike Kestner <mkestner@ximian.com>
* gtk/ITreeNode.cs : make Parent readonly
	* gtk/TreeNode.cs : use an internal method to set parent on the
	child, and set child.Parent to null in RemoveChild.

svn path=/trunk/gtk-sharp/; revision=19651
2003-11-05 22:11:45 +00:00

110 lines
1.7 KiB
C#

// TreeNode.cs - Abstract base class to subclass for TreeNode types
//
// Author: Mike Kestner <mkestner@ximian.com>
//
// <c> 2003 Novell, Inc.
namespace Gtk {
using System;
using System.Collections;
public abstract class TreeNode : ITreeNode {
static int next_idx = 0;
int id;
ITreeNode parent;
ArrayList children = new ArrayList ();
public TreeNode ()
{
id = next_idx++;
}
public int ID {
get {
return id;
}
}
public ITreeNode Parent {
get {
return parent;
}
}
public int ChildCount {
get {
return children.Count;
}
}
public int IndexOf (object o)
{
return children.IndexOf (o);
}
internal void SetParent (ITreeNode parent)
{
this.parent = parent;
}
public ITreeNode this [int index] {
get {
if (index >= ChildCount)
return null;
return children [index] as ITreeNode;
}
}
public event EventHandler Changed;
protected void OnChanged ()
{
if (Changed == null)
return;
Changed (this, new EventArgs ());
}
public event TreeNodeAddedHandler ChildAdded;
private void OnChildAdded (ITreeNode child)
{
if (ChildAdded == null)
return;
ChildAdded (this, child);
}
public event TreeNodeRemovedHandler ChildRemoved;
private void OnChildRemoved (int old_position)
{
if (ChildRemoved == null)
return;
ChildRemoved (this, old_position);
}
public void AddChild (TreeNode child)
{
children.Add (child);
child.SetParent (this);
OnChildAdded (child);
}
public void RemoveChild (TreeNode child)
{
int idx = children.IndexOf (child);
if (idx < 0)
return;
children.Remove (child);
child.SetParent (null);
OnChildRemoved (idx);
}
}
}