From 696c9c657336356770cfff65db53271296781bca Mon Sep 17 00:00:00 2001 From: Ian C Date: Fri, 21 Jan 2005 01:01:51 +0000 Subject: Initial checkin --- MenuTree.cs | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 MenuTree.cs (limited to 'MenuTree.cs') diff --git a/MenuTree.cs b/MenuTree.cs new file mode 100644 index 0000000..10033a0 --- /dev/null +++ b/MenuTree.cs @@ -0,0 +1,163 @@ +// 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 directorey based interface to creating a Menu + /// + public class MenuTree + { + // -------------------------------- + // PUBLIC + // -------------------------------- + + /// + /// Constructs the pathed Menu + /// + /// The GUI object to manage + public MenuTree(Menu m) + { + m_defHandler=null; + m_dir=new DirectoryCollection(); + m_dir.Add("/",m); + } + + /// + /// The default event handler for menu items. + /// + public EventHandler DefaultHandler + { + set {m_defHandler = value;} + } + + /// + /// Adds a menu item + /// + /// The path to the item + /// The text to put in the menu item + public void Add(string path, string name) + { + if (m_defHandler!=null) + { + Add(path,new MenuItem(name,m_defHandler)); + } + else + { + Add(path,new MenuItem(name)); + } + } + + /// + /// Adds a menu item + /// + /// The path to the item + /// The text to put in the menu item + /// The event handler to associate with the menu item + public void Add(string path, string name, EventHandler handler) + { + Add(path,new MenuItem(name,handler)); + } + + /// + /// Adds a menu item + /// + /// The path to the item + /// The menu item + public void Add(string path, MenuItem item) + { + if (m_dir.IsRoot(path)) + { + throw new ArgumentException("Cannot set the root element"); + } + + m_dir.Add(path,item); + + object o=m_dir.GetParent(path); + + if (o is MenuItem) + { + MenuItem m=(MenuItem)o; + + m.MenuItems.Add(item); + } + else + { + Menu m=(Menu)o; + + m.MenuItems.Add(item); + } + } + + /// + /// Gets a menu item + /// + /// The path to the menu item + /// The MenuItem object + public MenuItem Get(string path) + { + if (m_dir.IsRoot(path)) + { + throw new ArgumentException("Cannot get the root element"); + } + + return (MenuItem)m_dir.Get(path); + } + + /// + /// Removes a section of the menu 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); + MenuItem item=(MenuItem)m_dir.Get(path); + + m_dir.Remove(path); + + if (o is MenuItem) + { + MenuItem m=(MenuItem)o; + + m.MenuItems.Remove(item); + } + else + { + Menu m=(Menu)o; + + m.MenuItems.Remove(item); + } + } + + // -------------------------------- + // PRIVATE + // -------------------------------- + + private DirectoryCollection m_dir; + private EventHandler m_defHandler; + } +} -- cgit v1.2.3