summaryrefslogtreecommitdiff
path: root/MenuTree.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MenuTree.cs')
-rw-r--r--MenuTree.cs163
1 files changed, 163 insertions, 0 deletions
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
+{
+ /// <summary>
+ /// Provides a directorey based interface to creating a Menu
+ /// </summary>
+ public class MenuTree
+ {
+ // --------------------------------
+ // PUBLIC
+ // --------------------------------
+
+ /// <summary>
+ /// Constructs the pathed Menu
+ /// </summary>
+ /// <param name="m">The GUI object to manage</param>
+ public MenuTree(Menu m)
+ {
+ m_defHandler=null;
+ m_dir=new DirectoryCollection();
+ m_dir.Add("/",m);
+ }
+
+ /// <summary>
+ /// The default event handler for menu items.
+ /// </summary>
+ public EventHandler DefaultHandler
+ {
+ set {m_defHandler = value;}
+ }
+
+ /// <summary>
+ /// Adds a menu item
+ /// </summary>
+ /// <param name="path">The path to the item</param>
+ /// <param name="name">The text to put in the menu item</param>
+ public void Add(string path, string name)
+ {
+ if (m_defHandler!=null)
+ {
+ Add(path,new MenuItem(name,m_defHandler));
+ }
+ else
+ {
+ Add(path,new MenuItem(name));
+ }
+ }
+
+ /// <summary>
+ /// Adds a menu item
+ /// </summary>
+ /// <param name="path">The path to the item</param>
+ /// <param name="name">The text to put in the menu item</param>
+ /// <param name="handler">The event handler to associate with the menu item</param>
+ public void Add(string path, string name, EventHandler handler)
+ {
+ Add(path,new MenuItem(name,handler));
+ }
+
+ /// <summary>
+ /// Adds a menu item
+ /// </summary>
+ /// <param name="path">The path to the item</param>
+ /// <param name="item">The menu item</param>
+ 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);
+ }
+ }
+
+ /// <summary>
+ /// Gets a menu item
+ /// </summary>
+ /// <param name="path">The path to the menu item</param>
+ /// <returns>The MenuItem object</returns>
+ public MenuItem Get(string path)
+ {
+ if (m_dir.IsRoot(path))
+ {
+ throw new ArgumentException("Cannot get the root element");
+ }
+
+ return (MenuItem)m_dir.Get(path);
+ }
+
+ /// <summary>
+ /// Removes a section of the menu recursively
+ /// </summary>
+ /// <param name="path">The path to remove</param>
+ 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;
+ }
+}