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