using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.Xml;
using UtilityLibrary.Menus;
using System.Diagnostics;namespace MenuSample
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
static ResourceManager rm;
private System.ComponentModel.IContainer components = null; public Form1()
{ rm = new ResourceManager("VSNetMenus", Assembly.GetCallingAssembly());
//
// Required for Windows Form Designer support
//
InitializeComponent();
} /// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} public static MenuItem[] CreateMainMenu()
{
string menuFile = Application.StartupPath + "\\" + "mainmenu.xml";
XmlDocument doc = new XmlDocument();
doc.Load(menuFile);

XmlNodeList topMenus = doc.DocumentElement.ChildNodes;
MenuItem[] menuItems = new MenuItem[topMenus.Count];
int i = 0;
foreach ( XmlElement element in topMenus )  
{
menuItems[i++] = ProcessMenuItem(element);
}
            
return menuItems;
} public static MenuItem ProcessMenuItem(XmlElement xmlelement)
{
string menuName = xmlelement.Attributes["Name"].InnerXml;
if ( menuName.IndexOf("&") != -1 ) 
menuName = menuName.Replace("&amp;", "&");
            string menuShortcutString = xmlelement.Attributes["Shortcut"].InnerXml;
string menuIcon = xmlelement.Attributes["Icon"].InnerXml;
string menuChecked = xmlelement.Attributes["Checked"].InnerXml;
string menuRadio = xmlelement.Attributes["Radio"].InnerXml;
string menuEnabled = xmlelement.Attributes["Enabled"].InnerXml;

Shortcut menuShortcut = Shortcut.None;

if ( menuShortcutString != "" ) 
{
menuShortcut = (Shortcut)((Shortcut.F1.GetType()).InvokeMember(menuShortcutString, 
BindingFlags.GetField, null, Shortcut.F1, new object[0]));
}
MenuItemEx parentMenu = new MenuItemEx(menuName, new EventHandler(SelectMenuItem), menuShortcut);
if ( menuIcon != "" )
parentMenu.Icon = GetIcon(menuIcon);
if ( menuChecked == "True" )
parentMenu.Checked = true;
if ( menuEnabled == "False" ) 
parentMenu.Enabled = false;
if ( menuRadio == "True" )
parentMenu.RadioCheck = true;

XmlNodeList nodes = xmlelement.ChildNodes;
if ( nodes.Count > 0 )
{
MenuItem[] menuItems = new MenuItem[nodes.Count];
int i = 0 ;
foreach ( XmlElement node in nodes ) 
{
menuItems[i] = ProcessMenuItem(node);
if ( menuItems[i] != null)
parentMenu.MenuItems.Add(menuItems[i]);
i++;
}
}
return parentMenu;
} public static Bitmap GetIcon(string iconName)
{
Bitmap icon = (Bitmap)rm.GetObject(iconName);
return icon;
}

public static void SelectMenuItem(object sender, EventArgs e)
{
if (typeof(MenuItemEx).IsInstanceOfType(sender)) 
{
MenuItemEx item = (MenuItemEx)sender;
string menuText = item.Text;
MessageBox.Show(menuText);
}
} public static void Main(string[] args)
{
Form1 mainForm = new Form1();
            mainForm.Menu = new MainMenu(CreateMainMenu());
mainForm.BackColor = Color.White;

// make sure we respond to systemcolorchanges
            mainForm.SystemColorsChanged += new EventHandler(MenuItemEx.UpdateMenuColors); Application.Run(mainForm); } #region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
// 
// Form1
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(596, 542);
this.Name = "Form1";
this.Text = "VS .NET Menu Style"; }
#endregion }
}