From 696c9c657336356770cfff65db53271296781bca Mon Sep 17 00:00:00 2001 From: Ian C Date: Fri, 21 Jan 2005 01:01:51 +0000 Subject: Initial checkin --- NodeTree.cs | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 NodeTree.cs (limited to 'NodeTree.cs') diff --git a/NodeTree.cs b/NodeTree.cs new file mode 100644 index 0000000..6d4a145 --- /dev/null +++ b/NodeTree.cs @@ -0,0 +1,141 @@ +// 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; + } +} -- cgit v1.2.3