// Noddybox.GUI - various GUI support routines
// Copyright (C) 2004 Ian Cowburn
//
// 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 the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
// $Id$
//
using System;
using System.Windows.Forms;
namespace Noddybox.GUI
{
///
/// Provides a directory based interface to creating a TreeView
///
public class NodeTree
{
// --------------------------------
// PUBLIC
// --------------------------------
///
/// Constructs the pathed Tree
///
/// The GUI object to manage
public NodeTree(TreeView tree)
{
m_dir=new DirectoryCollection();
m_tree=tree;
m_dir.Add("/",m_tree.Nodes);
}
///
/// Adds a node
///
/// The path to the node
/// The text to put in the node
/// The tag to associate with the node
public void Add(string path, string name, object tag)
{
Add(path,new TreeNode(name),tag);
}
///
/// Adds a node
///
/// The path to the node
/// The Node to put there
/// The tag to associate with node
public void Add(string path, TreeNode node, object tag)
{
if (m_dir.IsRoot(path))
{
throw new ArgumentException("Cannot set the root element");
}
node.Tag=tag;
m_dir.Add(path,node);
object o=m_dir.GetParent(path);
if (o is TreeNodeCollection)
{
TreeNodeCollection n=(TreeNodeCollection)o;
n.Add(node);
}
else
{
TreeNode n=(TreeNode)o;
n.Nodes.Add(node);
}
}
///
/// Gets a node
///
/// The path to the node
/// The TreeNode object
public TreeNode Get(string path)
{
if (m_dir.IsRoot(path))
{
throw new ArgumentException("Cannot get the root element");
}
return (TreeNode)m_dir.Get(path);
}
///
/// Removes a section of the tree recursively
///
/// The path to remove
public void Remove(string path)
{
if (m_dir.IsRoot(path))
{
throw new ArgumentException("Cannot remove the root element");
}
object o=m_dir.GetParent(path);
TreeNode node=(TreeNode)m_dir.Get(path);
m_dir.Remove(path);
if (o is TreeNodeCollection)
{
TreeNodeCollection n=(TreeNodeCollection)o;
n.Remove(node);
}
else
{
TreeNode n=(TreeNode)o;
n.Nodes.Remove(node);
}
}
// --------------------------------
// PRIVATE
// --------------------------------
private DirectoryCollection m_dir;
private TreeView m_tree;
}
}