// 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; } }