using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace DevComponents.DotNetBar.Design
{
	/// 
	/// Summary description for Form1.
	/// 
	public class DotNetBarDesigner : System.Windows.Forms.Form
	{
		#region Private variables
		private IDesignerServices m_Designer=null;
		internal DevComponents.DotNetBar.NavigationPane navigationPane1;
		internal DevComponents.DotNetBar.NavigationPanePanel navigationPanePanel1;
		internal DevComponents.DotNetBar.NavigationPanePanel navigationPanePanel2;
		internal DevComponents.DotNetBar.ButtonItem buttonBars;
		internal DevComponents.DotNetBar.ButtonItem buttonContext;
		private DevComponents.DotNetBar.NavigationPanePanel navigationPanePanel3;
		private DevComponents.DotNetBar.ButtonItem buttonCategories;
		private ExpandableSplitter splitter1;
		private DevComponents.DotNetBar.PanelEx panelEx1;
		private ExpandableSplitter splitter2;
		private DevComponents.DotNetBar.DotNetBarManager dotNetBarManager1;
		private DevComponents.DotNetBar.DockSite barLeftDockSite;
		private DevComponents.DotNetBar.DockSite barRightDockSite;
		private DevComponents.DotNetBar.DockSite barTopDockSite;
		private DevComponents.DotNetBar.DockSite barBottomDockSite;
		private System.Windows.Forms.PropertyGrid propertyBars;
		private System.Windows.Forms.TreeView treeBars;
		private DevComponents.DotNetBar.Design.DefinitionPreviewControl definitionPreview;
		private System.ComponentModel.IContainer components;
		private System.Windows.Forms.PropertyGrid propertyCategories;
		private DevComponents.DotNetBar.ExpandableSplitter splitterOffice20031;
		private System.Windows.Forms.TreeView treeCategories;
		private bool m_DataChanged=false;
		private bool m_ShowItemText=true;
		private System.Windows.Forms.OpenFileDialog m_OpenFileDialog;
		private string m_DefinitionFileName="";
		private System.Windows.Forms.ImageList imageList;
		private System.Windows.Forms.PropertyGrid propertyMenus;
		private DevComponents.DotNetBar.ExpandableSplitter splitterOffice20032;
		private System.Windows.Forms.TreeView treeMenus;
		private Bar m_DesignBar=null;
		private Hashtable m_catTable;
		private HTMLHelp m_HtmlHelp=null;
		private GridViewSubclass m_GridSubclassBars=null;
		private GridViewSubclass m_GridSubclassMenus=null;
		private GridViewSubclass m_GridSubclassCategories=null;
		private System.Windows.Forms.SaveFileDialog m_SaveFileDialog;
		private DotNetBarManager m_ExternalManager=null;
		private Bar m_ExternalBar=null;
		private Timer m_LoadTimer=null;
		private bool m_Loaded=false;
        private ArrayList m_CommandLinksDeleted = new ArrayList();
        private ArrayList m_CommandLinksCreated = new ArrayList();
		#endregion
		#region Command Constants
		const string NEW_BUTTON="buttonNewButton";
		const string NEW_LABEL="buttonNewLabel";
		const string NEW_COLORPICKER="buttonNewColorPicker";
		const string NEW_COMBO="buttonNewCombo";
		const string NEW_PROGRESS="buttonNewProgress";
		const string NEW_TEXTBOX="buttonNewTextBox";
		const string NEW_DOCK="buttonNewDock";
		const string NEW_CUSTOMIZE="buttonNewCustomize";
		const string NEW_MDILIST="buttonNewMdiList";
		const string NEW_CONTROLCONT="buttonNewControlCont";
        const string SAVE_CLOSE = "buttonSaveAndClose";
             
		const string CONTEXT_MENU="popup";
		const string MOVE_TO="buttonMoveTo";
		const string COPY_TO="buttonCopyTo";
		const string MOVE_LEFT="buttonMoveLeft";
		const string MOVE_RIGHT="buttonMoveRight";
		const string MOVE_UP="buttonMoveUp";
		const string MOVE_DOWN="buttonMoveDown";
		const string DELETE="buttonDelete";
		const string SAVE_DEFINITION_AS="buttonSaveAs";
		const string SAVE_DEFINITION="buttonSave";
		const string SAVE_BAR_AS="buttonSaveBar";
		const string LOAD_BAR="buttonLoadBar";
		const string SYNC_CATEGORIES="buttonSyncCategories";
		const string TO_CATEGORIES="buttonToCategories";
		const string TO_CONTEXTMENUS="buttonToContextMenus";
		const string RESET_IMAGE_POPUP="resetimagepopup";
		const string RESET_IMAGE="buttonResetImage";
		const string NEW_DEFINITION="buttonNewDefinition";
		const string OPEN_DEFINITION="buttonOpen";
		const string CLOSE_DESIGNER="buttonClose";
		const string SHOW_HELP="buttonHelpContents";
		const string SHOW_HELP_SEARCH="buttonHelpSearch";
		const string NEW_TOOLBAR="buttonNewToolbar";
		const string NEW_MENUBAR="buttonNewMenubar";
		const string NEW_STATUSBAR="buttonNewStatusbar";
		const string NEW_DOCKBAR="buttonNewDockWindow";
		const string NEW_TASKBAR="buttonNewTaskPane";
		const string CREATE_BARS_PARENT="buttonCreateBar";
		#endregion
		#region Constructor, load, unload  and dispose
		public DotNetBarDesigner()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();
			InitializeInternal();
            this.GetDesignManager().MouseDown += new MouseEventHandler(PreviewManagerMouseDown);
		}
        private void PreviewManagerMouseDown(object sender, MouseEventArgs e)
        {
            if (sender is BaseItem)
            {
                if (!((BaseItem)sender).SystemItem && !(sender is GenericItemContainer && ((GenericItemContainer)sender).SystemContainer))
                    SelectObjectInPropertyGrid(sender);
                else
                {
                    Bar bar = ((BaseItem)sender).ContainerControl as Bar;
                    if (bar != null)
                        SelectObjectInPropertyGrid(bar);
                    else
                        SelectObjectInPropertyGrid(null);
                }
            }
            else if (sender is Bar)
                SelectObjectInPropertyGrid(sender);
            else
                SelectObjectInPropertyGrid(null);
        }
		private void InitializeInternal()
		{
			propertyBars.CommandsVisibleIfAvailable=false;
			propertyMenus.CommandsVisibleIfAvailable=false;
			propertyCategories.CommandsVisibleIfAvailable=false;
			m_catTable=new Hashtable(20);
			
			m_GridSubclassBars=new GridViewSubclass();
			m_GridSubclassBars.ParentGrid=propertyBars;
			m_GridSubclassBars.OnRightMouseDown+=new EventHandler(this.GridViewMouseDown);
			m_GridSubclassMenus=new GridViewSubclass();
			m_GridSubclassMenus.ParentGrid=propertyMenus;
			m_GridSubclassMenus.OnRightMouseDown+=new EventHandler(this.GridViewMouseDown);
			m_GridSubclassCategories=new GridViewSubclass();
			m_GridSubclassCategories.ParentGrid=propertyCategories;
			m_GridSubclassCategories.OnRightMouseDown+=new EventHandler(this.GridViewMouseDown);
			
			foreach(Control ctrl in propertyBars.Controls)
			{
				if(ctrl.GetType().ToString().IndexOf("PropertyGridView")>=0)
				{
					m_GridSubclassBars.AssignHandle(ctrl.Handle);
					break;
				}
			}
			foreach(Control ctrl in propertyMenus.Controls)
			{
				if(ctrl.GetType().ToString().IndexOf("PropertyGridView")>=0)
				{
					m_GridSubclassMenus.AssignHandle(ctrl.Handle);
					break;
				}
			}
			foreach(Control ctrl in propertyCategories.Controls)
			{
				if(ctrl.GetType().ToString().IndexOf("PropertyGridView")>=0)
				{
					m_GridSubclassCategories.AssignHandle(ctrl.Handle);
					break;
				}
			}
		}
		private void DotNetBarDesigner_Load(object sender, System.EventArgs e)
		{
            dotNetBarManager1.Style = eDotNetBarStyle.Office2003;
			try
			{
				Microsoft.Win32.RegistryKey key=Microsoft.Win32.Registry.LocalMachine;
				string helpfile="";
				try
				{
					if(key!=null)
						key=key.OpenSubKey("Software\\DevComponents\\DotNetBar");
					if(key!=null)
						helpfile=key.GetValue("InstallationFolder","").ToString();
				}
				finally{if(key!=null) key.Close();}
				if(helpfile!="")
				{
					if(helpfile.Substring(helpfile.Length-1,1)!="\\")
						helpfile+="\\";
					if(System.IO.File.Exists(helpfile+"dotnetbar.chm"))
						helpfile+="dotnetbar.chm";
					else
						helpfile="";
				}
				if(helpfile!="")
					m_HtmlHelp=new HTMLHelp(this,helpfile);
			}
			catch(Exception)
			{
			}
			LoadFormLayout();
			
			SetupProperties();
			this.RefreshView();
			SetupToolbars();
			if(m_LoadTimer!=null)
				m_LoadTimer.Enabled=true;
			m_Loaded=true;
		}
		private void CheckColorSchemeDataChanged()
		{
			if(m_DataChanged)
				return;
			if(this.GetDesignManager()!=null)
			{
				foreach(Bar bar in this.GetDesignManager().Bars)
				{
					if(bar.ColorScheme!=null && bar.ColorScheme.SchemeChanged)
					{
						m_DataChanged=true;
						break;
					}
				}
			}
			else if(this.GetDesignBar()!=null)
			{
				if(this.GetDesignBar().ColorScheme!=null && this.GetDesignBar().ColorScheme.SchemeChanged)
					m_DataChanged=true;
			}
		}
		private void DotNetBarDesigner_Closing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			CheckColorSchemeDataChanged();
			if(m_DataChanged)
			{
				DialogResult result=DialogResult.No;
				if(m_ExternalManager!=null)
				{
					result=MessageBox.Show("Definition has changed. Would you like to keep changes?","DotNetBar Designer",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1);
				}
				else if(m_ExternalBar==null)
				{
					// Stand-alone editing
					result=MessageBox.Show("Definition has changed. Would you like to save changes?","DotNetBar Desinger",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1);
				}
				if(result==DialogResult.Cancel)
				{
					e.Cancel=true;
					return;
				}
				if(result==DialogResult.Yes)
				{
					if(m_ExternalManager!=null)
						m_ExternalManager.Definition=this.GetDesignManager().Definition;
					else
					{
						if(SaveDefinition(false)==DialogResult.Cancel)
						{
							e.Cancel=true;
							return;
						}
					}
					this.DialogResult=DialogResult.Yes;
				}
				else
					this.DialogResult=DialogResult.No;
			}
			SaveFormLayout();
		}
        private void DotNetBarDesigner_Closed(object sender, EventArgs e)
        {
            //ProcessCommandLinks((this.DialogResult == DialogResult.Yes));
        }
        private void ProcessCommandLinks(bool saveDefinition)
        {
            //if (m_Designer == null)
            //    return;
            //if (saveDefinition)
            //{
            //    // Delete removed CommandLinks when definition is saved
            //    foreach (CommandLink link in m_CommandLinksDeleted)
            //    {
            //        link.Manager = null;
            //        m_Designer.DestroyComponent(link);
            //    }
            //}
            //else
            //{
            //    // Delete created CommandLinks when definition is saved
            //    foreach (CommandLink link in m_CommandLinksCreated)
            //    {
            //        link.Manager = null;
            //        m_Designer.DestroyComponent(link);
            //    }
            //}
        }
		private void LoadFormLayout()
		{
			// Load position if any
			try
			{
				Microsoft.Win32.RegistryKey key=Microsoft.Win32.Registry.CurrentUser;
				key=key.OpenSubKey("Software\\DevComponents\\DotNetBar");
				if(key!=null)
				{
					try
					{
						string s=key.GetValue("Designer2Position","").ToString();
						if(s!="")
						{
							if(s=="1")
							{
								this.WindowState=FormWindowState.Maximized;
							}
							else
							{
								string[] arr=s.Split(',');
								if(arr.Length==4)
								{
									Rectangle r=new Rectangle(System.Xml.XmlConvert.ToInt32(arr[0]),System.Xml.XmlConvert.ToInt32(arr[1]),System.Xml.XmlConvert.ToInt32(arr[2]),System.Xml.XmlConvert.ToInt32(arr[3]));
									foreach(Screen screen in Screen.AllScreens)
									{
										if(screen.Bounds.IntersectsWith(r))
										{
											this.StartPosition=FormStartPosition.Manual;
											this.DesktopLocation=r.Location;
											this.Size=r.Size;
											break;
										}
									}
								}
							}
						}
						s=key.GetValue("Designer2PanelSize","").ToString();
						navigationPane1.Width=System.Xml.XmlConvert.ToInt32(s);
						s=key.GetValue("Designer2TreeHeight","").ToString();
						treeBars.Height=System.Xml.XmlConvert.ToInt32(s);
						treeMenus.Height=System.Xml.XmlConvert.ToInt32(s);
						treeCategories.Height=System.Xml.XmlConvert.ToInt32(s);
						s=key.GetValue("Designer2PropSortBars","").ToString();
						if(s=="1")
							propertyBars.PropertySort=PropertySort.Alphabetical;
						s=key.GetValue("Designer2PropSortCat","").ToString();
						if(s=="1")
							propertyCategories.PropertySort=PropertySort.Alphabetical;
						s=key.GetValue("Designer2PropSortMenus","").ToString();
						if(s=="1")
							propertyMenus.PropertySort=PropertySort.Alphabetical;
					}
					finally
					{
						key.Close();
					}
				}
			}
			catch(Exception)
			{
			}
		}
		private void SaveFormLayout()
		{
			// Save form position
			if(this.WindowState!=FormWindowState.Minimized)
			{
				string s="";
				if(this.WindowState==FormWindowState.Maximized)
				{
					s="1";
				}
				else
				{
					s=this.DesktopLocation.X+","+this.DesktopLocation.Y+","+this.Width+","+this.Height;
				}
				try
				{
					Microsoft.Win32.RegistryKey key=Microsoft.Win32.Registry.CurrentUser;
					key=key.CreateSubKey("Software\\DevComponents\\DotNetBar");
					key.SetValue("Designer2Position",s);
					// Save Panel size
					key.SetValue("Designer2PanelSize",navigationPane1.Width);
					key.SetValue("Designer2TreeHeight",treeBars.Height);
					key.SetValue("Designer2PropSortBars",(propertyBars.PropertySort==PropertySort.Alphabetical?"1":"0"));
					key.SetValue("Designer2PropSortCat",(propertyCategories.PropertySort==PropertySort.Alphabetical?"1":"0"));
					key.SetValue("Designer2PropSortMenus",(propertyMenus.PropertySort==PropertySort.Alphabetical?"1":"0"));
					key.Close();
				}
				catch(Exception)
				{
				}
			}
		}
		/// 
		/// Clean up any resources being used.
		/// 
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}
		#endregion
		#region Preview Support
		private DotNetBarManager GetDesignManager()
		{
			if(m_ExternalBar!=null)
				return null;
			return definitionPreview.previewManager;
		}
		private Bar GetDesignBar()
		{
			return m_ExternalBar;
		}
		#endregion
		#region Categories Support
		public void RescanCategories()
		{
			DotNetBarManager manager=GetDesignManager();
			if(manager==null)
				return;
			if(manager.Bars.Count==0)
				return;
			manager.Items.Clear();
			treeCategories.Nodes.Clear();
			foreach(Bar bar in manager.Bars)
			{
				foreach(BaseItem item in bar.Items)
					AutoCategorizeItem(item);
			}
			m_DataChanged=true;
			RefreshCategories();
		}
		private void AutoCategorizeItem(BaseItem item)
		{
			DotNetBarManager manager=GetDesignManager();
			if(item.Category!="" && item.Name!="" && !manager.Items.Contains(item.Name))
				manager.Items.Add(item.Copy());
			foreach(BaseItem i in item.SubItems)
				AutoCategorizeItem(i);
		}
		private void RefreshCategories()
		{
			DotNetBarManager manager=this.GetDesignManager();
			if(manager==null)
				return;
			// Load nodes from items
			m_catTable.Clear();
			foreach(DictionaryEntry o in manager.Items)
			{
				BaseItem objItem=o.Value as BaseItem;
				TreeNode itemNode=CategorizeItem(objItem);
				itemNode.Tag=objItem;
				itemNode.ImageIndex=GetItemImageIndex(objItem);
				itemNode.SelectedImageIndex=itemNode.ImageIndex;
				AddSubItems(objItem,itemNode);
			}
		}
		private TreeNode CategorizeItem(BaseItem newItem)
		{
			// Assign item to category
			if(newItem.Category=="")
				newItem.Category="(Untitled)";
			TreeNode parentNode=null;
			if(m_catTable.ContainsKey(newItem.Category))
				parentNode=m_catTable[newItem.Category] as TreeNode;
			else
			{
				parentNode=treeCategories.Nodes.Add(newItem.Category);
				parentNode.ImageIndex=5;
				parentNode.SelectedImageIndex=5;
				m_catTable.Add(newItem.Category,parentNode);
			}
			
			TreeNode newNode=parentNode.Nodes.Add(GetTreeItemText(newItem));
			newNode.ImageIndex=GetItemImageIndex(newItem);
			newNode.SelectedImageIndex=newNode.ImageIndex;
			newNode.Tag=newItem;
			return newNode;
		}
		#endregion
		#region Bars Support
		private void RefreshBars()
		{
			treeBars.Nodes.Clear();
			if(GetDesignBar()!=null)
			{
				try
				{
					Bar bar=this.GetDesignBar();
					this.Cursor=Cursors.WaitCursor;
					
					TreeNode barNode=treeBars.Nodes.Add(bar.Text);
					barNode.Tag=bar;
					barNode.ImageIndex=1;
					barNode.SelectedImageIndex=1;
					foreach(BaseItem objItem in bar.Items)
					{
						TreeNode itemNode=barNode.Nodes.Add(GetTreeItemText(objItem));
						itemNode.Tag=objItem;
						itemNode.ImageIndex=GetItemImageIndex(objItem);
						itemNode.SelectedImageIndex=itemNode.ImageIndex;
						AddSubItems(objItem,itemNode);
					}
					barNode.Expand();
				}
				finally
				{
					this.Cursor=Cursors.Arrow;
				}
				return;
			}
			if(this.GetDesignManager()==null)
				return;
			this.Cursor=Cursors.WaitCursor;
			DotNetBarManager manager=this.GetDesignManager();
			if(manager.TopDockSite==null && manager.BottomDockSite==null && manager.LeftDockSite==null && manager.RightDockSite==null)
			{
				// Context Menu editing ONLY
			}
			else
			{
			}
			foreach(Bar bar in manager.Bars)
			{
				DisplayTreeBar(bar);
			}
			this.Cursor=Cursors.Arrow;
		}
		private void DisplayTreeBar(Bar bar)
		{
			TreeNode barNode=treeBars.Nodes.Add(bar.Text);
			barNode.Tag=bar;
			barNode.ImageIndex=1;
			barNode.SelectedImageIndex=1;
			foreach(BaseItem objItem in bar.Items)
			{
				TreeNode itemNode=barNode.Nodes.Add(GetTreeItemText(objItem));
				itemNode.Tag=objItem;
				itemNode.ImageIndex=GetItemImageIndex(objItem);
				itemNode.SelectedImageIndex=itemNode.ImageIndex;
				AddSubItems(objItem,itemNode);
			}
		}
		#endregion
		#region Context Menus Support
		private void RefreshContextMenus()
		{
			treeMenus.Nodes.Clear();
			DotNetBarManager manager=this.GetDesignManager();
			if(manager==null)
				return;
			this.Cursor=Cursors.WaitCursor;
			try
			{
				// Load all popups
				foreach(BaseItem objItem in manager.ContextMenus)
				{
					TreeNode itemNode=treeMenus.Nodes.Add(GetTreeItemText(objItem));
					itemNode.Tag=objItem;
					itemNode.ImageIndex=GetItemImageIndex(objItem);
					itemNode.SelectedImageIndex=itemNode.ImageIndex;
					AddSubItems(objItem,itemNode);
				}
			}
			finally
			{
				this.Cursor=Cursors.Arrow;
			}
		}
		#endregion
		#region Item Tree Loading
		private void AddSubItems(BaseItem objItem, TreeNode parentNode)
		{
			if(objItem.SubItems.Count==0)
				return;
			foreach(BaseItem objChild in objItem.SubItems)
			{
				TreeNode itemNode=parentNode.Nodes.Add(GetTreeItemText(objChild));
				itemNode.Tag=objChild;
				itemNode.ImageIndex=GetItemImageIndex(objChild);
				itemNode.SelectedImageIndex=itemNode.ImageIndex;
				AddSubItems(objChild,itemNode);
			}
		}
		private string GetTreeItemText(BaseItem objItem)
		{
			if(objItem==null)
				return "";
			if(m_ShowItemText)
				return objItem.Text;
			else
				return objItem.Name;
		}
		private int GetItemImageIndex(BaseItem objItem)
		{
			int index=0;
			if(objItem is ButtonItem)
			{
				index=7;
			}
			else if(objItem is ComboBoxItem)
			{
				index=8;
			}
			else if(objItem is TextBoxItem)
			{
				index=9;
			}
			else if(objItem is CustomizeItem)
			{
				index=10;
			}
			else if(objItem is LabelItem)
			{
				index=11;
			}
			return index;
		}
		private void RefreshView()
		{
			this.RefreshBars();
			this.RefreshContextMenus();
			this.RefreshCategories();
			propertyBars.SelectedObject=null;
			propertyCategories.SelectedObject=null;
			propertyMenus.SelectedObject=null;
		}
		private void SetupToolbars()
		{
			if(!dotNetBarManager1.IsDefinitionLoaded)
				return;
			bool bVisible=true;
			if(m_ExternalBar!=null)
				bVisible=false;
			dotNetBarManager1.GetItem(CREATE_BARS_PARENT,true).Visible=bVisible;
			dotNetBarManager1.GetItem(SYNC_CATEGORIES,true).Visible=bVisible;
			dotNetBarManager1.GetItem(NEW_DOCK,true).Visible=bVisible;
			dotNetBarManager1.GetItem(NEW_DEFINITION,true).Visible=bVisible;
			dotNetBarManager1.GetItem(OPEN_DEFINITION,true).Visible=bVisible;
			dotNetBarManager1.GetItem(SAVE_DEFINITION,true).Visible=bVisible;
			dotNetBarManager1.GetItem(SAVE_DEFINITION_AS,true).Visible=bVisible;
			dotNetBarManager1.GetItem(LOAD_BAR,true).Visible=bVisible;
		}
		private void OnExternalManagerChanged()
		{
			if(m_ExternalManager!=null)
			{
				if(!dotNetBarManager1.IsDefinitionLoaded)
					dotNetBarManager1.ForceDefinitionLoad();
				this.GetDesignManager().Style=m_ExternalManager.Style;
				this.GetDesignManager().ThemeAware=m_ExternalManager.ThemeAware;
				this.GetDesignManager().UseGlobalColorScheme=m_ExternalManager.UseGlobalColorScheme;
				this.GetDesignManager().ColorScheme=m_ExternalManager.ColorScheme;
				this.GetDesignManager().ShowCustomizeContextMenu=m_ExternalManager.ShowCustomizeContextMenu;
				this.GetDesignManager().ShowResetButton=m_ExternalManager.ShowResetButton;
				this.GetDesignManager().ShowToolTips=m_ExternalManager.ShowToolTips;
				this.GetDesignManager().Images=m_ExternalManager.Images;
				this.GetDesignManager().ImagesLarge=m_ExternalManager.ImagesLarge;
				this.GetDesignManager().ImagesMedium=m_ExternalManager.ImagesMedium;
				if(this.Visible || !this.HasFloatingBars(m_ExternalManager))
					this.GetDesignManager().Definition=m_ExternalManager.Definition;
				else
					this.CreateLoadTimer();
			}
			SetupNavigationPane();
			SetupProperties();
			m_DataChanged=false;
		}
		private void CreateLoadTimer()
		{
			m_LoadTimer=new Timer();
			m_LoadTimer.Enabled=false;
			m_LoadTimer.Interval=100;
			m_LoadTimer.Tick+=new EventHandler(LoadTimerTick);
			if(m_Loaded)
				m_LoadTimer.Enabled=true;
		}
		private void LoadTimerTick(object sender, EventArgs e)
		{
			if(m_Loaded)
			{
				m_LoadTimer.Enabled=false;
				this.GetDesignManager().Definition=m_ExternalManager.Definition;
				m_LoadTimer.Dispose();
				m_LoadTimer=null;
				m_DataChanged=false;
				this.RefreshView();
			}
		}
		private bool HasFloatingBars(DotNetBarManager manager)
		{
			bool bRet=false;
			foreach(Bar bar in manager.Bars)
			{
				if(bar.DockSide==eDockSide.None && !bar.AutoHide)
				{
					bRet=true;
					break;
				}
			}
			return bRet;
		}
		private void OnExternalBarChanged()
		{
			if(m_ExternalBar!=null)
			{
				DotNetBarManager manager=definitionPreview.previewManager;
				manager.SuspendLayout=true;
				manager.Bars.ClearNonDocumentBars();
				manager.Items.Clear();
				manager.ContextMenus.Clear();
				manager.Images=m_ExternalBar.Images;
				manager.ImagesLarge=m_ExternalBar.ImagesLarge;
				manager.ImagesMedium=m_ExternalBar.ImagesMedium;
				manager.SuspendLayout=false;
				manager.Bars.Add(new Bar(m_ExternalBar.Text));
				manager.Bars[0].DockSide=eDockSide.Top;
				m_DesignBar=manager.Bars[0];
				RefreshDesignBar();
			}
			else
			{
				m_DesignBar=null;
			}
			SetupNavigationPane();
			SetupProperties();
			m_DataChanged=false;
		}
		private void RefreshDesignBar()
		{
			if(m_DesignBar!=null && m_ExternalBar!=null)
			{
				m_DesignBar.Definition=m_ExternalBar.Definition;
				m_DesignBar.DockSide=eDockSide.Top;
			}
		}
		private void SetupNavigationPane()
		{
			if(m_ExternalBar!=null)
			{
				buttonContext.Visible=false;
				buttonCategories.Visible=false;
				buttonBars.Checked=true;
			}
			else
			{
				if(m_ExternalManager.TopDockSite==null && 
					m_ExternalManager.BottomDockSite==null &&
					m_ExternalManager.LeftDockSite==null &&
					m_ExternalManager.RightDockSite==null)
				{
					// Manager provides popups only
					buttonContext.Visible=true;
					buttonContext.Checked=true;
					buttonCategories.Visible=false;
					buttonBars.Visible=false;
				}
				else
				{
					buttonContext.Visible=true;
					buttonCategories.Visible=true;
					buttonBars.Checked=true;
				}
			}
			navigationPane1.RecalcLayout();
		}
		private void SetupProperties()
		{
			if(m_ExternalBar!=null)
			{
				propertyBars.BrowsableAttributes=new AttributeCollection(new Attribute[] {BrowsableAttribute.Yes});
				propertyMenus.BrowsableAttributes=new AttributeCollection(new Attribute[] {BrowsableAttribute.Yes});
				propertyCategories.BrowsableAttributes=new AttributeCollection(new Attribute[] {BrowsableAttribute.Yes});
			}
			else
			{
                propertyBars.BrowsableAttributes = new AttributeCollection(new Attribute[] { DevCoBrowsable.Yes });
                propertyMenus.BrowsableAttributes = new AttributeCollection(new Attribute[] { DevCoBrowsable.Yes });
                propertyCategories.BrowsableAttributes = new AttributeCollection(new Attribute[] { DevCoBrowsable.Yes });
			}
		}
		#endregion
		#region Windows Form Designer generated code
		/// 
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// 
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(DotNetBarDesigner));
			this.navigationPane1 = new DevComponents.DotNetBar.NavigationPane();
			this.navigationPanePanel1 = new DevComponents.DotNetBar.NavigationPanePanel();
			this.propertyBars = new System.Windows.Forms.PropertyGrid();
			this.splitter1 = new DevComponents.DotNetBar.ExpandableSplitter();
			this.treeBars = new System.Windows.Forms.TreeView();
			this.imageList = new System.Windows.Forms.ImageList(this.components);
			this.buttonBars = new DevComponents.DotNetBar.ButtonItem();
			this.navigationPanePanel3 = new DevComponents.DotNetBar.NavigationPanePanel();
			this.propertyCategories = new System.Windows.Forms.PropertyGrid();
			this.splitterOffice20031 = new DevComponents.DotNetBar.ExpandableSplitter();
			this.treeCategories = new System.Windows.Forms.TreeView();
			this.buttonCategories = new DevComponents.DotNetBar.ButtonItem();
			this.navigationPanePanel2 = new DevComponents.DotNetBar.NavigationPanePanel();
			this.propertyMenus = new System.Windows.Forms.PropertyGrid();
			this.splitterOffice20032 = new DevComponents.DotNetBar.ExpandableSplitter();
			this.treeMenus = new System.Windows.Forms.TreeView();
			this.buttonContext = new DevComponents.DotNetBar.ButtonItem();
			this.panelEx1 = new DevComponents.DotNetBar.PanelEx();
			this.definitionPreview = new DevComponents.DotNetBar.Design.DefinitionPreviewControl();
			this.splitter2 = new DevComponents.DotNetBar.ExpandableSplitter();
			#if !TRIAL
			this.dotNetBarManager1 = new DevComponents.DotNetBar.DotNetBarManager(this.components,true);
			#else
			this.dotNetBarManager1 = new DevComponents.DotNetBar.DotNetBarManager(this.components);
			#endif
			
			this.barBottomDockSite = new DevComponents.DotNetBar.DockSite();
			this.barLeftDockSite = new DevComponents.DotNetBar.DockSite();
			this.barRightDockSite = new DevComponents.DotNetBar.DockSite();
			this.barTopDockSite = new DevComponents.DotNetBar.DockSite();
			this.m_OpenFileDialog = new System.Windows.Forms.OpenFileDialog();
			this.m_SaveFileDialog = new System.Windows.Forms.SaveFileDialog();
			this.navigationPane1.SuspendLayout();
			this.navigationPanePanel1.SuspendLayout();
			this.navigationPanePanel3.SuspendLayout();
			this.navigationPanePanel2.SuspendLayout();
			this.SuspendLayout();
			// 
			// navigationPane1
			// 
			this.navigationPane1.ConfigureAddRemoveVisible = false;
			this.navigationPane1.ConfigureNavOptionsVisible = false;
			this.navigationPane1.Controls.AddRange(new System.Windows.Forms.Control[] {
																						  this.navigationPanePanel1,
																						  this.navigationPanePanel3,
																						  this.navigationPanePanel2,
																						  this.navigationPane1.TitlePanel});
			this.navigationPane1.Dock = System.Windows.Forms.DockStyle.Left;
			this.navigationPane1.ItemPaddingBottom = 2;
			this.navigationPane1.ItemPaddingTop = 2;
			this.navigationPane1.Items.AddRange(new DevComponents.DotNetBar.BaseItem[] {
																						   this.buttonBars,
																						   this.buttonContext,
																						   this.buttonCategories});
			this.navigationPane1.Location = new System.Drawing.Point(0, 48);
			this.navigationPane1.Name = "navigationPane1";
			this.navigationPane1.NavigationBarHeight = 88;
			this.navigationPane1.Size = new System.Drawing.Size(304, 468);
			this.navigationPane1.TabIndex = 1;
			// 
			// navigationPane1.TitlePanel
			// 
			this.navigationPane1.TitlePanel.Dock = System.Windows.Forms.DockStyle.Top;
			this.navigationPane1.TitlePanel.Font = new System.Drawing.Font("Tahoma", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.navigationPane1.TitlePanel.Name = "panelEx1";
			this.navigationPane1.TitlePanel.Size = new System.Drawing.Size(304, 24);
			this.navigationPane1.TitlePanel.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground;
			this.navigationPane1.TitlePanel.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2;
			this.navigationPane1.TitlePanel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
			this.navigationPane1.TitlePanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
			this.navigationPane1.TitlePanel.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
			this.navigationPane1.TitlePanel.Style.GradientAngle = 90;
			this.navigationPane1.TitlePanel.Style.MarginLeft = 4;
			this.navigationPane1.TitlePanel.TabIndex = 0;
			this.navigationPane1.TitlePanel.Text = "Bars";
			this.navigationPane1.PanelChanging += new DevComponents.DotNetBar.PanelChangingEventHandler(this.navigationPane1_PanelChanging);
			// 
			// navigationPanePanel1
			// 
			this.navigationPanePanel1.Controls.AddRange(new System.Windows.Forms.Control[] {
																							   this.propertyBars,
																							   this.splitter1,
																							   this.treeBars});
			this.navigationPanePanel1.Dock = System.Windows.Forms.DockStyle.Fill;
			this.navigationPanePanel1.DockPadding.Left = 1;
			this.navigationPanePanel1.DockPadding.Right = 1;
			this.navigationPanePanel1.DockPadding.Top = 1;
			this.navigationPanePanel1.Location = new System.Drawing.Point(0, 24);
			this.navigationPanePanel1.Name = "navigationPanePanel1";
			this.navigationPanePanel1.ParentItem = this.buttonBars;
			this.navigationPanePanel1.Size = new System.Drawing.Size(304, 356);
			this.navigationPanePanel1.Style.Alignment = System.Drawing.StringAlignment.Center;
			this.navigationPanePanel1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
			this.navigationPanePanel1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2;
			this.navigationPanePanel1.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile;
			this.navigationPanePanel1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
			this.navigationPanePanel1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
			this.navigationPanePanel1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
			this.navigationPanePanel1.Style.GradientAngle = 90;
			this.navigationPanePanel1.TabIndex = 2;
			// 
			// propertyBars
			// 
			this.propertyBars.BackColor = System.Drawing.SystemColors.Control;
			this.propertyBars.CommandsBackColor = System.Drawing.SystemColors.Window;
			this.propertyBars.CommandsVisibleIfAvailable = true;
			this.propertyBars.Dock = System.Windows.Forms.DockStyle.Fill;
			this.propertyBars.HelpBackColor = System.Drawing.SystemColors.ControlLight;
			this.propertyBars.LargeButtons = false;
			this.propertyBars.LineColor = System.Drawing.SystemColors.ControlLight;
			this.propertyBars.Location = new System.Drawing.Point(1, 150);
			this.propertyBars.Name = "propertyBars";
			this.propertyBars.Size = new System.Drawing.Size(302, 206);
			this.propertyBars.TabIndex = 3;
			this.propertyBars.Text = "propertyGrid1";
			this.propertyBars.ViewBackColor = System.Drawing.SystemColors.Window;
			this.propertyBars.ViewForeColor = System.Drawing.SystemColors.WindowText;
			this.propertyBars.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.GridPropertyValueChanged);
			// 
			// splitter1
			// 
			this.splitter1.Expandable = false;
			this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
			this.splitter1.Location = new System.Drawing.Point(1, 144);
			this.splitter1.Name = "splitter1";
			this.splitter1.Size = new System.Drawing.Size(302, 6);
			this.splitter1.TabIndex = 4;
			this.splitter1.TabStop = false;
			// 
			// treeBars
			// 
			this.treeBars.BorderStyle = System.Windows.Forms.BorderStyle.None;
			this.treeBars.Dock = System.Windows.Forms.DockStyle.Top;
			this.treeBars.ImageList = this.imageList;
			this.treeBars.Location = new System.Drawing.Point(1, 1);
			this.treeBars.Name = "treeBars";
			this.treeBars.Size = new System.Drawing.Size(302, 143);
			this.treeBars.TabIndex = 2;
			this.treeBars.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TreeKeyDown);
			this.treeBars.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TreeMouseDown);
			this.treeBars.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeAfterSelect);
			this.treeBars.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeSelect);
			this.treeBars.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.TreeAfterLabelEdit);
			this.treeBars.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeCollapse);
			this.treeBars.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeExpand);
			this.treeBars.HideSelection=false;
			// 
			// imageList
			// 
			this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
			this.imageList.ImageSize = new System.Drawing.Size(16, 16);
			this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
			this.imageList.TransparentColor = System.Drawing.Color.Magenta;
			// 
			// buttonBars
			// 
			this.buttonBars.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText;
			this.buttonBars.Checked = true;
			this.buttonBars.Image = ((System.Drawing.Bitmap)(resources.GetObject("buttonBars.Image")));
			this.buttonBars.Name = "buttonBars";
			this.buttonBars.OptionGroup = "navBar";
			this.buttonBars.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
			this.buttonBars.Text = "Bars";
			this.buttonBars.Tooltip = "View Toolbars, Menu bars and dockable windows";
			// 
			// navigationPanePanel3
			// 
			this.navigationPanePanel3.Controls.AddRange(new System.Windows.Forms.Control[] {
																							   this.propertyCategories,
																							   this.splitterOffice20031,
																							   this.treeCategories});
			this.navigationPanePanel3.Dock = System.Windows.Forms.DockStyle.Fill;
			this.navigationPanePanel3.DockPadding.Left = 1;
			this.navigationPanePanel3.DockPadding.Right = 1;
			this.navigationPanePanel3.DockPadding.Top = 1;
			this.navigationPanePanel3.Location = new System.Drawing.Point(0, 24);
			this.navigationPanePanel3.Name = "navigationPanePanel3";
			this.navigationPanePanel3.ParentItem = this.buttonCategories;
			this.navigationPanePanel3.Size = new System.Drawing.Size(304, 356);
			this.navigationPanePanel3.Style.Alignment = System.Drawing.StringAlignment.Center;
			this.navigationPanePanel3.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
			this.navigationPanePanel3.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2;
			this.navigationPanePanel3.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile;
			this.navigationPanePanel3.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
			this.navigationPanePanel3.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
			this.navigationPanePanel3.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
			this.navigationPanePanel3.Style.GradientAngle = 90;
			this.navigationPanePanel3.TabIndex = 4;
			// 
			// propertyCategories
			// 
			this.propertyCategories.BackColor = System.Drawing.SystemColors.Control;
			this.propertyCategories.CommandsBackColor = System.Drawing.SystemColors.Window;
			this.propertyCategories.CommandsVisibleIfAvailable = true;
			this.propertyCategories.Dock = System.Windows.Forms.DockStyle.Fill;
			this.propertyCategories.HelpBackColor = System.Drawing.SystemColors.ControlLight;
			this.propertyCategories.HelpVisible = false;
			this.propertyCategories.LargeButtons = false;
			this.propertyCategories.LineColor = System.Drawing.SystemColors.ControlLight;
			this.propertyCategories.Location = new System.Drawing.Point(1, 150);
			this.propertyCategories.Name = "propertyCategories";
			this.propertyCategories.Size = new System.Drawing.Size(302, 206);
			this.propertyCategories.TabIndex = 6;
			this.propertyCategories.Text = "propertyGrid1";
			this.propertyCategories.ToolbarVisible = false;
			this.propertyCategories.ViewBackColor = System.Drawing.SystemColors.Window;
			this.propertyCategories.ViewForeColor = System.Drawing.SystemColors.WindowText;
			this.propertyCategories.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.GridPropertyValueChanged);
			// 
			// splitterOffice20031
			// 
			this.splitterOffice20031.Dock = System.Windows.Forms.DockStyle.Top;
			this.splitterOffice20031.Location = new System.Drawing.Point(1, 144);
			this.splitterOffice20031.Name = "splitterOffice20031";
			this.splitterOffice20031.Size = new System.Drawing.Size(302, 6);
			this.splitterOffice20031.Expandable=false;
			this.splitterOffice20031.TabIndex = 7;
			this.splitterOffice20031.TabStop = false;
			// 
			// treeCategories
			// 
			this.treeCategories.BorderStyle = System.Windows.Forms.BorderStyle.None;
			this.treeCategories.Dock = System.Windows.Forms.DockStyle.Top;
			this.treeCategories.ImageList = this.imageList;
			this.treeCategories.Location = new System.Drawing.Point(1, 1);
			this.treeCategories.Name = "treeCategories";
			this.treeCategories.Size = new System.Drawing.Size(302, 143);
			this.treeCategories.TabIndex = 5;
			this.treeCategories.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TreeKeyDown);
			this.treeCategories.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TreeMouseDown);
			this.treeCategories.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeAfterSelect);
			this.treeCategories.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeSelect);
			this.treeCategories.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.TreeAfterLabelEdit);
			this.treeCategories.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeCollapse);
			this.treeCategories.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeExpand);
			this.treeCategories.HideSelection=false;
			// 
			// buttonCategories
			// 
			this.buttonCategories.Image = ((System.Drawing.Bitmap)(resources.GetObject("buttonCategories.Image")));
			this.buttonCategories.Name = "buttonCategories";
			this.buttonCategories.OptionGroup = "navBar";
			this.buttonCategories.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
			this.buttonCategories.Text = "Categories";
			this.buttonCategories.Tooltip = "View Command Categories";
			// 
			// navigationPanePanel2
			// 
			this.navigationPanePanel2.Controls.AddRange(new System.Windows.Forms.Control[] {
																							   this.propertyMenus,
																							   this.splitterOffice20032,
																							   this.treeMenus});
			this.navigationPanePanel2.Dock = System.Windows.Forms.DockStyle.Fill;
			this.navigationPanePanel2.DockPadding.Left = 1;
			this.navigationPanePanel2.DockPadding.Right = 1;
			this.navigationPanePanel2.DockPadding.Top = 1;
			this.navigationPanePanel2.Location = new System.Drawing.Point(0, 24);
			this.navigationPanePanel2.Name = "navigationPanePanel2";
			this.navigationPanePanel2.ParentItem = this.buttonContext;
			this.navigationPanePanel2.Size = new System.Drawing.Size(304, 356);
			this.navigationPanePanel2.Style.Alignment = System.Drawing.StringAlignment.Center;
			this.navigationPanePanel2.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground;
			this.navigationPanePanel2.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.BarBackground2;
			this.navigationPanePanel2.Style.BackgroundImagePosition = DevComponents.DotNetBar.eBackgroundImagePosition.Tile;
			this.navigationPanePanel2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
			this.navigationPanePanel2.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
			this.navigationPanePanel2.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.ItemText;
			this.navigationPanePanel2.Style.GradientAngle = 90;
			this.navigationPanePanel2.TabIndex = 3;
			// 
			// propertyMenus
			// 
			this.propertyMenus.BackColor = System.Drawing.SystemColors.Control;
			this.propertyMenus.CommandsBackColor = System.Drawing.SystemColors.Window;
			this.propertyMenus.CommandsVisibleIfAvailable = true;
			this.propertyMenus.Dock = System.Windows.Forms.DockStyle.Fill;
			this.propertyMenus.HelpBackColor = System.Drawing.SystemColors.ControlLight;
			this.propertyMenus.HelpVisible = false;
			this.propertyMenus.LargeButtons = false;
			this.propertyMenus.LineColor = System.Drawing.SystemColors.ControlLight;
			this.propertyMenus.Location = new System.Drawing.Point(1, 150);
			this.propertyMenus.Name = "propertyMenus";
			this.propertyMenus.Size = new System.Drawing.Size(302, 206);
			this.propertyMenus.TabIndex = 6;
			this.propertyMenus.Text = "propertyGrid1";
			this.propertyMenus.ToolbarVisible = false;
			this.propertyMenus.ViewBackColor = System.Drawing.SystemColors.Window;
			this.propertyMenus.ViewForeColor = System.Drawing.SystemColors.WindowText;
			this.propertyMenus.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.GridPropertyValueChanged);
			// 
			// splitterOffice20032
			// 
			this.splitterOffice20032.Expandable = false;
			this.splitterOffice20032.Dock = System.Windows.Forms.DockStyle.Top;
			this.splitterOffice20032.Location = new System.Drawing.Point(1, 144);
			this.splitterOffice20032.Name = "splitterOffice20032";
			this.splitterOffice20032.Size = new System.Drawing.Size(302, 6);
			this.splitterOffice20032.TabIndex = 7;
			this.splitterOffice20032.TabStop = false;
			// 
			// treeMenus
			// 
			this.treeMenus.BorderStyle = System.Windows.Forms.BorderStyle.None;
			this.treeMenus.Dock = System.Windows.Forms.DockStyle.Top;
			this.treeMenus.ImageList = this.imageList;
			this.treeMenus.Location = new System.Drawing.Point(1, 1);
			this.treeMenus.Name = "treeMenus";
			this.treeMenus.Size = new System.Drawing.Size(302, 143);
			this.treeMenus.TabIndex = 5;
			this.treeMenus.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TreeKeyDown);
			this.treeMenus.MouseDown += new System.Windows.Forms.MouseEventHandler(this.TreeMouseDown);
			this.treeMenus.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeAfterSelect);
			this.treeMenus.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeSelect);
			this.treeMenus.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.TreeAfterLabelEdit);
			this.treeMenus.BeforeCollapse += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeCollapse);
			this.treeMenus.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.TreeBeforeExpand);
			this.treeMenus.HideSelection=false;
			// 
			// buttonContext
			// 
			this.buttonContext.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.ImageAndText;
			this.buttonContext.Image = ((System.Drawing.Bitmap)(resources.GetObject("buttonContext.Image")));
			this.buttonContext.Name = "buttonContext";
			this.buttonContext.OptionGroup = "navBar";
			this.buttonContext.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
			this.buttonContext.Text = "Context Menus";
			this.buttonContext.Tooltip = "View Context Menus";
			// 
			// panelEx1
			// 
			this.panelEx1.Dock = System.Windows.Forms.DockStyle.Top;
			this.panelEx1.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.panelEx1.Location = new System.Drawing.Point(310, 48);
			this.panelEx1.Name = "panelEx1";
			this.panelEx1.Size = new System.Drawing.Size(432, 25);
			this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center;
			this.panelEx1.Style.BackColor1.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground;
			this.panelEx1.Style.BackColor2.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2;
			this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine;
			this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder;
			this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText;
			this.panelEx1.Style.GradientAngle = 90;
			this.panelEx1.TabIndex = 2;
			this.panelEx1.Text = "Layout Preview";
			// 
			// definitionPreview
			// 
			this.definitionPreview.BackColor = System.Drawing.SystemColors.Control;
			this.definitionPreview.Dock = System.Windows.Forms.DockStyle.Fill;
			this.definitionPreview.Location = new System.Drawing.Point(310, 73);
			this.definitionPreview.Name = "definitionPreview";
			this.definitionPreview.Size = new System.Drawing.Size(432, 443);
			this.definitionPreview.TabIndex = 3;
			this.definitionPreview.DataChanged+=new EventHandler(this.PreviewDataChanged);
			// 
			// splitter2
			// 
			this.splitter2.Location = new System.Drawing.Point(304, 48);
			this.splitter2.Name = "splitter2";
			this.splitter2.Size = new System.Drawing.Size(8, 468);
			this.splitter2.TabIndex = 4;
			this.splitter2.TabStop = false;
			this.splitter2.Dock=DockStyle.Left;
			this.splitter2.ExpandableControl=navigationPane1;
			// 
			// dotNetBarManager1
			// 
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.F1);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlC);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlA);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlV);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlX);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.CtrlZ);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.Del);
			this.dotNetBarManager1.AutoDispatchShortcuts.Add(DevComponents.DotNetBar.eShortcut.Ins);
			this.dotNetBarManager1.BottomDockSite = this.barBottomDockSite;
			this.dotNetBarManager1.DefinitionName = "DotNetBarDesigner.dotNetBarManager1.xml";
			this.dotNetBarManager1.LeftDockSite = this.barLeftDockSite;
			this.dotNetBarManager1.ParentForm = this;
			this.dotNetBarManager1.RightDockSite = this.barRightDockSite;
			this.dotNetBarManager1.Style = DevComponents.DotNetBar.eDotNetBarStyle.Office2003;
			this.dotNetBarManager1.TopDockSite = this.barTopDockSite;
			this.dotNetBarManager1.ItemClick += new System.EventHandler(this.dotNetBarManager1_ItemClick);
			this.dotNetBarManager1.UseHook=true;
			// 
			// barBottomDockSite
			// 
			this.barBottomDockSite.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
			this.barBottomDockSite.BackgroundImageAlpha = ((System.Byte)(255));
			this.barBottomDockSite.Dock = System.Windows.Forms.DockStyle.Bottom;
			this.barBottomDockSite.Location = new System.Drawing.Point(0, 516);
			this.barBottomDockSite.Name = "barBottomDockSite";
			this.barBottomDockSite.Size = new System.Drawing.Size(742, 0);
			this.barBottomDockSite.TabIndex = 8;
			this.barBottomDockSite.TabStop = false;
			// 
			// barLeftDockSite
			// 
			this.barLeftDockSite.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
			this.barLeftDockSite.BackgroundImageAlpha = ((System.Byte)(255));
			this.barLeftDockSite.Dock = System.Windows.Forms.DockStyle.Left;
			this.barLeftDockSite.Location = new System.Drawing.Point(0, 48);
			this.barLeftDockSite.Name = "barLeftDockSite";
			this.barLeftDockSite.Size = new System.Drawing.Size(0, 468);
			this.barLeftDockSite.TabIndex = 5;
			this.barLeftDockSite.TabStop = false;
			// 
			// barRightDockSite
			// 
			this.barRightDockSite.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
			this.barRightDockSite.BackgroundImageAlpha = ((System.Byte)(255));
			this.barRightDockSite.Dock = System.Windows.Forms.DockStyle.Right;
			this.barRightDockSite.Location = new System.Drawing.Point(742, 48);
			this.barRightDockSite.Name = "barRightDockSite";
			this.barRightDockSite.Size = new System.Drawing.Size(0, 468);
			this.barRightDockSite.TabIndex = 6;
			this.barRightDockSite.TabStop = false;
			// 
			// barTopDockSite
			// 
			this.barTopDockSite.AccessibleRole = System.Windows.Forms.AccessibleRole.Window;
			this.barTopDockSite.BackgroundImageAlpha = ((System.Byte)(255));
			this.barTopDockSite.Dock = System.Windows.Forms.DockStyle.Top;
			this.barTopDockSite.Name = "barTopDockSite";
			this.barTopDockSite.Size = new System.Drawing.Size(742, 48);
			this.barTopDockSite.TabIndex = 7;
			this.barTopDockSite.TabStop = false;
			// 
			// m_OpenFileDialog
			// 
			this.m_OpenFileDialog.Filter = "DotNetBar Files (*.dnb, *.xml)|*.dnb;*.xml|All Files (*.*)|*.*";
			this.m_OpenFileDialog.ShowReadOnly = true;
			this.m_OpenFileDialog.Title = "Open DotNetBar Definition File";
			// 
			// m_SaveFileDialog
			// 
			this.m_SaveFileDialog.DefaultExt = "dnb";
			this.m_SaveFileDialog.FileName = "dotnetbardefinition";
			this.m_SaveFileDialog.Filter = "DotNetBar Files (*.dnb)|*.dnb|XML Files (*.xml)|*.xml|All Files (*.*)|*.*";
			this.m_SaveFileDialog.Title = "Save DotNetBar Definition";
			// 
			// DotNetBarDesigner
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(742, 516);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.definitionPreview,
																		  this.panelEx1,
																		  this.splitter2,
																		  this.navigationPane1,
																		  this.barLeftDockSite,
																		  this.barRightDockSite,
																		  this.barTopDockSite,
																		  this.barBottomDockSite});
			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
			this.Name = "DotNetBarDesigner";
			this.Text = "DotNetBar Designer";
			this.Closing += new System.ComponentModel.CancelEventHandler(this.DotNetBarDesigner_Closing);
            this.Closed += new EventHandler(DotNetBarDesigner_Closed);
			this.Load += new System.EventHandler(this.DotNetBarDesigner_Load);
			this.navigationPane1.ResumeLayout(false);
			this.navigationPanePanel1.ResumeLayout(false);
			this.navigationPanePanel3.ResumeLayout(false);
			this.navigationPanePanel2.ResumeLayout(false);
			this.ResumeLayout(false);
		}
		#endregion
		#region Toolbar and menu bar support
		private void dotNetBarManager1_ItemClick(object sender, System.EventArgs e)
		{
			BaseItem item=sender as BaseItem;
			if(item==null)
				return;
			PropertyGrid grid=propertyBars;
			if(navigationPane1.SelectedPanel==navigationPanePanel2)
				grid=propertyMenus;
			if(navigationPane1.SelectedPanel==navigationPanePanel3)
				grid=propertyCategories;
			switch(item.Name)
			{
				case CREATE_BARS_PARENT:
				{
                    if (!item.Expanded)
                        item.Expanded = true;
					break;
				}
				case OPEN_DEFINITION:
				{
					if(m_OpenFileDialog.ShowDialog()==DialogResult.OK && System.IO.File.Exists(m_OpenFileDialog.FileName))
					{
						DotNetBarManager manager=this.GetDesignManager();
						manager.LoadDefinition(m_OpenFileDialog.FileName);
						m_DefinitionFileName=m_OpenFileDialog.FileName;
						SetupProperties();
						RefreshView();
						m_DataChanged=true;
					}
					break;
				}
				case RESET_IMAGE:
				{
					m_DataChanged=true;
					if(grid.SelectedGridItem!=null && (grid.SelectedGridItem.PropertyDescriptor.PropertyType==typeof(System.Drawing.Image) || grid.SelectedGridItem.PropertyDescriptor.PropertyType==typeof(System.Drawing.Icon)))
					{
						grid.SelectedGridItem.PropertyDescriptor.SetValue(grid.SelectedObject,null);
					}
					grid.Refresh();
					break;
				}
				case CLOSE_DESIGNER:
				{
					this.DialogResult=DialogResult.OK;
					this.Close();
					break;
				}
				case SHOW_HELP:
				{
					if(m_HtmlHelp!=null)
						m_HtmlHelp.ShowContents();
					break;
				}
				case SHOW_HELP_SEARCH:
				{
					if(m_HtmlHelp!=null)
						m_HtmlHelp.ShowSearch();
					break;
				}
				case NEW_TOOLBAR:
				case NEW_MENUBAR:
				case NEW_STATUSBAR:
				case NEW_TASKBAR:
				{
					m_DataChanged=true;
					Bar bar;
					if(item.Name==NEW_MENUBAR)
					{
						bar=CreateObject(typeof(Bar)) as Bar;
						bar.Text="Main Menu";
						bar.MenuBar=true;
						bar.Stretch=true;
						bar.Name="mainmenu";
					}
					else if(item.Name==NEW_STATUSBAR)
					{
						bar=CreateObject(typeof(Bar)) as Bar;
						bar.Text="Status";
						bar.Stretch=true;
						bar.Name="statusBar"+((int)this.GetDesignManager().Bars.Count+1).ToString();
						bar.LayoutType=eLayoutType.Toolbar;
						bar.GrabHandleStyle=eGrabHandleStyle.ResizeHandle;
						bar.ItemSpacing=2;
					}
					else if(item.Name==NEW_TASKBAR)
					{
						bar=CreateObject(typeof(Bar)) as Bar;
						bar.Text="Task Pane";
						bar.Stretch=true;
						bar.Name="taskbar"+((int)this.GetDesignManager().Bars.Count+1).ToString();
						bar.LayoutType=eLayoutType.TaskList;
						bar.GrabHandleStyle=eGrabHandleStyle.Caption;
					}
					else
					{
						bar=CreateObject(typeof(Bar)) as Bar;
						bar.Text="My Bar";
						bar.Name="bar"+((int)this.GetDesignManager().Bars.Count+1).ToString();
					}
                
					//bar.SetDesignMode(true);
					TreeNode barNode=treeBars.Nodes.Add(bar.Text);
					barNode.Tag=bar;
					barNode.ImageIndex=3;
					barNode.SelectedImageIndex=3;
					bar.DockLine=this.GetDesignManager().Bars.Count;
					this.GetDesignManager().Bars.Add(bar);
					if(item.Name==NEW_TASKBAR)
						bar.DockSide=eDockSide.Right;
					else if(item.Name==NEW_STATUSBAR)
						bar.DockSide=eDockSide.Bottom;
					else
						bar.DockSide=eDockSide.Top;
					if(item.Name==NEW_MENUBAR || item.Name==NEW_TOOLBAR)
					{
						ButtonItem button=CreateObject(typeof(ButtonItem)) as ButtonItem;
						AssignItemName(button);
						button.Text=button.Name;
                        //button.GenerateCommandLink = true;
                        //UpdateCommandLink(button);
						bar.Items.Add(button);
						bar.RecalcLayout();
						TreeNode itemTreeNode=barNode.Nodes.Add(GetTreeItemText(button));
						itemTreeNode.Tag=button;
						itemTreeNode.ImageIndex=GetItemImageIndex(button);
						itemTreeNode.SelectedImageIndex=itemTreeNode.ImageIndex;
						itemTreeNode.EnsureVisible();
						treeBars.SelectedNode=barNode;
						barNode.EnsureVisible();
					}
					else if(item.Name==NEW_STATUSBAR)
					{
						LabelItem status=CreateObject(typeof(LabelItem)) as LabelItem;
						AssignItemName(status);
						status.Text="Status Ready...";
						status.BorderType=eBorderType.SingleLine;
						status.Width=136;
						bar.Items.Add(status);
						bar.RecalcLayout();
						TreeNode itemTreeNode=barNode.Nodes.Add(GetTreeItemText(status));
						itemTreeNode.Tag=status;
						itemTreeNode.ImageIndex=GetItemImageIndex(status);
						itemTreeNode.SelectedImageIndex=itemTreeNode.ImageIndex;
						itemTreeNode.EnsureVisible();
						treeBars.SelectedNode=barNode;
						barNode.EnsureVisible();
					}
					else
					{
						treeBars.SelectedNode=barNode;
						barNode.EnsureVisible();
					}
					break;
				}
				case NEW_DOCKBAR:
				{
					m_DataChanged=true;
					Bar bar=CreateObject(typeof(Bar)) as Bar;;
					bar.Text="Dockable Window";
					bar.Stretch=true;
					bar.LayoutType=eLayoutType.DockContainer;
					bar.GrabHandleStyle=eGrabHandleStyle.Caption;
					bar.Name="dockwindow"+this.GetDesignManager().Bars.Count.ToString();
					DockContainerItem dockItem=CreateObject(typeof(DockContainerItem)) as DockContainerItem;
					AssignItemName(dockItem);
					dockItem.Text="Dock Container";
					bar.Items.Add(dockItem);
					TreeNode barNode=treeBars.Nodes.Add(bar.Text);
					barNode.Tag=bar;
					barNode.ImageIndex=3;
					barNode.SelectedImageIndex=3;
					bar.DockLine=this.GetDesignManager().Bars.Count;
					this.GetDesignManager().Bars.Add(bar);
					bar.DockSide=eDockSide.Left;
					TreeNode itemTreeNode=barNode.Nodes.Add(GetTreeItemText(dockItem));
					itemTreeNode.Tag=dockItem;
					itemTreeNode.ImageIndex=GetItemImageIndex(dockItem);
					itemTreeNode.SelectedImageIndex=itemTreeNode.ImageIndex;
					itemTreeNode.EnsureVisible();
					treeBars.SelectedNode=barNode;
					barNode.EnsureVisible();
					break;
				}
				case DELETE:
				{
					TreeView tree=GetSelectedTreeView();
					DotNetBarManager manager=this.GetDesignManager();
					if(tree.SelectedNode==null)
						break;
					m_DataChanged=true;
					if(tree.SelectedNode.Nodes.Count>0)
					{
						if(MessageBox.Show(this,"Are you sure you want to delete selected item?","DotNetBar Editor",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.No)
							break;
					}
					TreeNode nextNode=tree.SelectedNode.NextVisibleNode;
					if(tree.SelectedNode.Tag is BaseItem)
					{
						BaseItem selectedItem=tree.SelectedNode.Tag as BaseItem;
						Bar cont=selectedItem.ContainerControl as Bar;
						TreeNode topParentNode=tree.SelectedNode;
						while(topParentNode.Parent!=null)
							topParentNode=topParentNode.Parent;
					
						if(selectedItem.Parent!=null)
							selectedItem.Parent.SubItems.Remove(selectedItem);
						else if(tree==treeCategories)
							manager.Items.Remove(selectedItem);
						else if(tree==treeMenus)
							manager.ContextMenus.Remove(selectedItem);
					
						DeleteComponent(selectedItem);
						tree.SelectedNode.Tag=null;
						TreeNode parentNode=tree.SelectedNode.Parent;
						tree.Nodes.Remove(tree.SelectedNode);
						// If it is last node under one of the categories remove parent too
						if(parentNode!=null && parentNode.Parent==null && parentNode.Nodes.Count==0 && tree==treeCategories)
							tree.Nodes.Remove(parentNode);
						if(cont!=null)
							cont.RecalcLayout();
					
					}
					else if(tree.SelectedNode.Tag is Bar)
					{
						Bar bar=tree.SelectedNode.Tag as Bar;
						manager.Bars.Remove(bar);
						DeleteComponent(bar);
						tree.SelectedNode.Tag=null;
						tree.Nodes.Remove(tree.SelectedNode);
					}
					else if(tree==treeCategories && tree.SelectedNode.Parent==null)
					{
						// Delete all items within this category
						foreach(TreeNode node in tree.SelectedNode.Nodes)
						{
							BaseItem childItem=node.Tag as BaseItem;
							if(childItem!=null)
							{
								manager.Items.Remove(childItem);
								DeleteComponent(childItem);
							}
							node.Tag=null;
						}
						tree.SelectedNode.Remove();
					}
					if(tree.Nodes.Count==0)
					{
						propertyBars.SelectedObject=null;
						propertyMenus.SelectedObject=null;
						propertyCategories.SelectedObject=null;
					}
					
					RefreshDesignBar();
                    EnableCommands(tree, tree.SelectedNode);
					break;
				}
				case NEW_DEFINITION:
				{
					DotNetBarManager manager=this.GetDesignManager();
					if(manager!=null)
					{
						manager.SuspendLayout=true;
						manager.Bars.ClearNonDocumentBars();
						manager.Items.Clear();
						manager.ContextMenus.Clear();
						manager.SuspendLayout=false;
						SetupProperties();
						this.RefreshView();
					}
					break;
				}
				case SAVE_DEFINITION:
				case SAVE_DEFINITION_AS:
				{
					SaveDefinition((item.Name==SAVE_DEFINITION_AS));
					break;
				}
                case SAVE_CLOSE:
                {
                    if (m_ExternalManager != null)
                        m_ExternalManager.Definition = this.GetDesignManager().Definition;
                    else
                    {
                        if (SaveDefinition(false) == DialogResult.Cancel)
                            return;
                    }
                    m_DataChanged = false;
                    this.DialogResult = DialogResult.Yes;
                    this.Close();
                    break;
                }
				case SAVE_BAR_AS:
				{
					TreeView tree=GetSelectedTreeView();
					// Save currently selected bar
					if(tree.SelectedNode==null || !(tree.SelectedNode.Tag is Bar))
						return;
				
					Bar bar=tree.SelectedNode.Tag as Bar;
					string stitle=m_SaveFileDialog.Title;
					string defaultExt=m_SaveFileDialog.DefaultExt;
					string fileName=m_SaveFileDialog.FileName;
					string filter=m_SaveFileDialog.Filter;
					m_SaveFileDialog.Title="Save Bar Definition";
					m_SaveFileDialog.DefaultExt = "xml";
					m_SaveFileDialog.FileName = (bar.Name!=""?bar.Name:"MyBar");
					m_SaveFileDialog.Filter = "DotNetBar Bar Files (*.xml)|*.xml|All Files (*.*)|*.*";
				
					if(m_SaveFileDialog.ShowDialog()==DialogResult.OK)
					{
						bar.SaveDefinition(m_SaveFileDialog.FileName);
					}
					m_SaveFileDialog.Title=stitle;
					m_SaveFileDialog.DefaultExt=defaultExt;
					m_SaveFileDialog.FileName=fileName;
					m_SaveFileDialog.Filter=filter;
					break;
				}
				case LOAD_BAR:
				{
					string defaultExt=m_OpenFileDialog.DefaultExt;
					string filter=m_OpenFileDialog.Filter;
					m_OpenFileDialog.DefaultExt="xml";
					m_OpenFileDialog.Filter = "DotNetBar Bar Files (*.xml)|*.xml|All Files (*.*)|*.*";
					if(m_OpenFileDialog.ShowDialog()==DialogResult.OK && System.IO.File.Exists(m_OpenFileDialog.FileName))
					{
						Bar bar=new Bar();
						try
						{
							bar.LoadDefinition(m_OpenFileDialog.FileName);
						}
						catch(Exception ex)
						{
							MessageBox.Show("File '"+m_OpenFileDialog.FileName+"' does not appear to be valid Bar file.\n\rException has been generated while loading: "+ex.Source+": "+ex.Message+"\n\r"+ex.StackTrace);
							return;
						}
						bar.Dispose();
						bar=new Bar();
						this.GetDesignManager().SuspendLayout=true;
						this.GetDesignManager().Bars.Add(bar);
						bar.LoadDefinition(m_OpenFileDialog.FileName);
						this.GetDesignManager().SuspendLayout=false;
						this.DisplayTreeBar(bar);
					}
					m_OpenFileDialog.DefaultExt=defaultExt;
					m_OpenFileDialog.Filter=filter;
					break;
				}
				case MOVE_LEFT:
				case MOVE_RIGHT:
				case MOVE_UP:
				case MOVE_DOWN:
				{
					MoveSelectedItem(item.Name);
					RefreshDesignBar();
					break;
				}
				case SYNC_CATEGORIES:
				{
					RescanCategories();
					break;
				}
				case NEW_BUTTON:
				{
					ButtonItem btn=CreateObject(typeof(ButtonItem)) as ButtonItem;
					AssignItemName(btn);
					btn.Text=btn.Name;
					AddNewItem(btn);
					RefreshDesignBar();
                    //if ((btn.ContainerControl is Bar || btn.Parent != null) && navigationPane1.CheckedButton != buttonCategories)
                    //{
                    //    btn.GenerateCommandLink = true;
                    //    UpdateCommandLink(btn);
                    //}
					break;
				}
				case NEW_TEXTBOX:
				{
					TextBoxItem tb=CreateObject(typeof(TextBoxItem)) as TextBoxItem;
					AssignItemName(tb);
					tb.Text=tb.Name;
					AddNewItem(tb);
					RefreshDesignBar();
					break;
				}
				case NEW_COMBO:
				{
					ComboBoxItem cb=CreateObject(typeof(ComboBoxItem)) as ComboBoxItem;
                    TypeDescriptor.GetProperties(cb)["DisplayMember"].SetValue(cb, "Text");
					AssignItemName(cb);
					cb.Text=cb.Name;
					AddNewItem(cb);
					RefreshDesignBar();
					break;
				}
				case NEW_CUSTOMIZE:
				{
					CustomizeItem cust=CreateObject(typeof(CustomizeItem)) as CustomizeItem;
					AssignItemName(cust);
					AddNewItem(cust);
					RefreshDesignBar();
					break;
				}
				case NEW_LABEL:
				{
					LabelItem li=CreateObject(typeof(LabelItem)) as LabelItem;
					li.BorderType=eBorderType.SingleLine;
					AssignItemName(li);
					li.Text=li.Name;
					AddNewItem(li);
					RefreshDesignBar();
					break;
				}
				case NEW_COLORPICKER:
				{
					ColorPickerDropDown cp=CreateObject(typeof(ColorPickerDropDown)) as ColorPickerDropDown;
					AssignItemName(cp);
					cp.Text=cp.Name;
					AddNewItem(cp);
					RefreshDesignBar();
					break;
				}
				case NEW_MDILIST:
				{
					MdiWindowListItem mdi=CreateObject(typeof(MdiWindowListItem)) as MdiWindowListItem;
					mdi.Text="MDI Window List";
					AssignItemName(mdi);
					AddNewItem(mdi);
					RefreshDesignBar();
					break;
				}
				case NEW_CONTROLCONT:
				{
					ControlContainerItem cci=CreateObject(typeof(ControlContainerItem)) as ControlContainerItem;
					AssignItemName(cci);
					AddNewItem(cci);
					RefreshDesignBar();
					break;
				}
				case NEW_DOCK:
				{
					DockContainerItem dci=CreateObject(typeof(DockContainerItem)) as DockContainerItem;
					dci.Text="Dockable Window";
					AssignItemName(dci);
					AddNewItem(dci);
					RefreshDesignBar();
					break;
				}
				case NEW_PROGRESS:
				{
					ProgressBarItem pb=CreateObject(typeof(ProgressBarItem)) as ProgressBarItem;
					pb.SetDesignMode(true);
					if(this.GetDesignManager()!=null)
						pb.Style=this.GetDesignManager().Style;
					else if(this.GetDesignBar()!=null)
						pb.Style=this.GetDesignBar().Style;
					pb.ResetBackgroundStyle();
					pb.SetDesignMode(false);
					AssignItemName(pb);
					pb.Text=pb.Name;
					AddNewItem(pb);
					RefreshDesignBar();
					break;
				}
			}
		}
		private DialogResult SaveDefinition(bool saveAs)
		{
			DialogResult result=DialogResult.OK;
			if(m_DefinitionFileName!="" && !saveAs)
				this.GetDesignManager().SaveDefinition(m_DefinitionFileName);
			else
			{
				result=m_SaveFileDialog.ShowDialog();
				// Save definition as...
				if(result==DialogResult.OK)
				{
					this.GetDesignManager().SaveDefinition(m_SaveFileDialog.FileName);
					m_DefinitionFileName=m_SaveFileDialog.FileName;
				}
			}
            return result;
		}
		private void AssignItemName(BaseItem newItem)
		{
			DotNetBarManager manager=this.GetDesignManager();
			Bar bar=this.GetDesignBar();
			if(m_Designer==null || bar==null)
			{
				string name=newItem.GetType().Name;
				long id=1;
				if(manager!=null)
				{
					while(manager.GetItem(name+id,true)!=null)
						id++;
				}
				else if(bar!=null)
				{
					while(bar.GetItem(name+id)!=null)
						id++;
				}
				newItem.Name=name+id;
			}
		}
		private void AddNewItem(BaseItem newItem)
		{
			m_DataChanged=true;
			TreeView tree=GetSelectedTreeView();
			DotNetBarManager manager=this.GetDesignManager();
			if(tree.SelectedNode!=null && tree.SelectedNode.Tag is BaseItem)
			{
				newItem.Style=((BaseItem)tree.SelectedNode.Tag).Style;
				if(tree.SelectedNode.Tag is PopupItem && newItem is PopupItem)
					((PopupItem)newItem).PopupType=((PopupItem)tree.SelectedNode.Tag).PopupType;
			}
			else if(tree.SelectedNode!=null && tree.SelectedNode.Tag is Bar)
			{
				newItem.Style=((Bar)tree.SelectedNode.Tag).Style;
				if(newItem is PopupItem && ((Bar)tree.SelectedNode.Tag).MenuBar)
					((PopupItem)newItem).PopupType=ePopupType.Menu;
			}
			// We need to determine is new item being added to the Categories
			TreeNode itemNode=null;
			if(tree==treeCategories)
			{
				// Assign category to new item
				if(tree.SelectedNode==null)
					newItem.Category="(Untitled)";
				else if(tree.SelectedNode.Parent==null)
					newItem.Category=tree.SelectedNode.Text;
				else
					newItem.Category=((BaseItem)tree.SelectedNode.Tag).Category;
				manager.Items.Add(newItem);                
				itemNode=CategorizeItem(newItem);
			}
			else if(tree==treeMenus)
			{
				if(tree.SelectedNode!=null && tree.SelectedNode.Tag is BaseItem)
				{
					itemNode=tree.SelectedNode.Nodes.Add(GetTreeItemText(newItem));
					BaseItem objParent=(BaseItem)tree.SelectedNode.Tag;
					int iPos=-1;
					// New Items are always added before any system items which are by default kept at the end
					if(objParent.SubItems.Count>0 && !newItem.SystemItem)
					{
						iPos=GetAppendPosition(objParent);
					}
					objParent.SubItems.Add(newItem,iPos);
				}
				else
				{
					itemNode=tree.Nodes.Add(GetTreeItemText(newItem));
					manager.ContextMenus.Add(newItem);
				}
			}
			else if(tree.SelectedNode!=null)
			{
				Control cont=null;
				if(tree.SelectedNode.Tag is BaseItem)
				{
					BaseItem objParent=(BaseItem)tree.SelectedNode.Tag;
					int iPos=-1;
					// New Items are always added before any system items which are by default kept at the end
					if(objParent.SubItems.Count>0 && !newItem.SystemItem)
					{
						iPos=GetAppendPosition(objParent);
					}
					objParent.SubItems.Add(newItem,iPos);
					itemNode=new TreeNode(GetTreeItemText(newItem));
					if(iPos!=-1)
						tree.SelectedNode.Nodes.Insert(iPos,itemNode);
					else
                        tree.SelectedNode.Nodes.Add(itemNode);
					cont=newItem.ContainerControl as Control;
					if(cont==null)
						((BaseItem)tree.SelectedNode.Tag).Refresh();
				}
				else if(tree.SelectedNode.Tag is Bar)
				{
					Bar bar=(Bar)tree.SelectedNode.Tag;
					int iPos=-1;
					// New Items are always added before any system items which are by default kept at the end
					if(bar.Items.Count>0 && !newItem.SystemItem)
					{
						iPos=GetAppendPosition(bar.ItemsContainer);
					}
					bar.Items.Add(newItem,iPos);
					itemNode=new TreeNode(GetTreeItemText(newItem));
					if(iPos!=-1)
						tree.SelectedNode.Nodes.Insert(iPos,itemNode);
					else
						tree.SelectedNode.Nodes.Add(itemNode);
					cont=bar;
				}
				if(cont!=null && cont is Bar)
					((Bar)cont).RecalcLayout();
			}
			itemNode.Tag=newItem;
			itemNode.ImageIndex=GetItemImageIndex(newItem);
			itemNode.SelectedImageIndex=itemNode.ImageIndex;
			itemNode.EnsureVisible();
			tree.SelectedNode=itemNode;
		}
		private TreeView GetPanelTreeView(NavigationPanePanel panel)
		{
			TreeView tree=treeBars;
			if(panel==navigationPanePanel2)
				tree=treeMenus;
			else if(panel==navigationPanePanel3)
				tree=treeCategories;
			return tree;
		}
		private TreeView GetSelectedTreeView()
		{
			TreeView tree=treeBars;
			if(navigationPane1.SelectedPanel==navigationPanePanel2)
				tree=treeMenus;
			else if(navigationPane1.SelectedPanel==navigationPanePanel3)
				tree=treeCategories;
			return tree;
		}
		private void MoveSelectedItem(string Direction)
		{
			TreeView tree=GetSelectedTreeView();
			if(tree.SelectedNode==null)
				return;
			BaseItem objItem=tree.SelectedNode.Tag as BaseItem;
			if(objItem==null)
				return;
			m_DataChanged=true;
			DotNetBarManager manager=this.GetDesignManager();
			bool bCategoryItem=false;
			if(tree==treeCategories)
				bCategoryItem=true;
			
			bool bPopupsItem=false;
			if(tree==treeMenus)
				bPopupsItem=true;
			TreeNode selNode=tree.SelectedNode;
			TreeNodeCollection parentCollection=null;
			if(selNode.Parent==null)
				parentCollection=tree.Nodes;
			else
				parentCollection=selNode.Parent.Nodes;
		
			BaseItem objParent=objItem.Parent;
			int i=0;
			if(objParent!=null)
				i=objParent.SubItems.IndexOf(objItem);
			else
				i=selNode.Index;
			if(Direction==MOVE_UP && i>0)
			{
				if(objParent!=null)
				{
					objParent.SubItems.Remove(objItem);
					objParent.SubItems.Add(objItem,i-1);
					if(objParent.ContainerControl is Bar)
						((Bar)objParent.ContainerControl).RecalcLayout();
				}
				
				i=selNode.Index;
				selNode.Remove();
				parentCollection.Insert(i-1,selNode);
				tree.SelectedNode=selNode;
				selNode.EnsureVisible();
			}
			else if(Direction==MOVE_RIGHT && i>0)
			{
				BaseItem objNewParent=null;
				
				if(bCategoryItem)
					manager.Items.Remove(objItem);
				else if(bPopupsItem)
					manager.ContextMenus.Remove(objItem);
				if(objParent!=null)
				{
					objNewParent=objParent.SubItems[i-1];
					objParent.SubItems.Remove(objItem);
					if(objParent.ContainerControl is Bar)
						((Bar)objParent.ContainerControl).RecalcLayout();
				}
				else
				{
					objNewParent=selNode.PrevNode.Tag as BaseItem;
				}
				objNewParent.SubItems.Add(objItem,GetAppendPosition(objNewParent));
				objNewParent.Refresh();
				if(objNewParent.ContainerControl is Bar)
					((Bar)objNewParent.ContainerControl).RecalcLayout();
				i=selNode.Index;
				TreeNode newParent=selNode.PrevNode;
				selNode.Remove();
				newParent.Nodes.Add(selNode);
				tree.SelectedNode=selNode;
				selNode.EnsureVisible();
			}
			else if(Direction==MOVE_DOWN && ((objParent!=null && i=0;i--)
			{
				if(objParent.SubItems[i].SystemItem)
					iPos=i;
				else
					break;
			}
			return iPos;
		}
		private object CreateObject(Type type)
		{
			if(m_Designer!=null && m_ExternalBar!=null)
				return m_Designer.CreateComponent(type);
			else
				return type.Assembly.CreateInstance(type.FullName);
		}
        private object CreateObject(Type type, string name)
        {
            if (m_Designer != null)
            {
                return m_Designer.CreateComponent(type, name);
            }
            return null;
        }
		private void DeleteComponent(IComponent o)
		{
            if (m_Designer != null)
            {
                if (o is BaseItem)
                {
                    RemoveCommandLinks(o as BaseItem);
                }
                else if (o is Bar)
                {
                    Bar bar = o as Bar;
                    foreach (BaseItem item in bar.Items)
                        RemoveCommandLinks(item);
                }
            }
			if(m_Designer!=null && m_ExternalBar!=null)
				m_Designer.DestroyComponent(o);
			else
				o.Dispose();
		}
        private void RemoveCommandLinks(BaseItem item)
        {
            //CommandLink link = GetCommandLink(GetCommandLinkName(item));
            //if (link != null && !m_CommandLinksDeleted.Contains(link))
            //    m_CommandLinksDeleted.Add(link);
            //foreach (BaseItem sub in item.SubItems)
            //{
            //    RemoveCommandLinks(sub);
            //}
        }
		#endregion
		#region Grid and Tree support
		private void PreviewDataChanged(object sender, EventArgs e)
		{
			m_DataChanged=true;
		}
		private void GridViewMouseDown(object sender, EventArgs e)
		{
			PropertyGrid grid=sender as PropertyGrid;
			if(grid.SelectedGridItem==null)
				return;
			if(!(grid.SelectedGridItem.PropertyDescriptor.PropertyType==typeof(System.Drawing.Image)) && !(grid.SelectedGridItem.PropertyDescriptor.PropertyType==typeof(System.Drawing.Icon)))
				return;
			PopupItem popup=dotNetBarManager1.ContextMenus[RESET_IMAGE_POPUP] as PopupItem;
			popup.PopupMenu(Control.MousePosition);		
		}
		private void GridPropertyValueChanged(object s, System.Windows.Forms.PropertyValueChangedEventArgs e)
		{
			m_DataChanged=true;
			// If user changes the category of the item that is in categories we need to
			// reflect that change and move item to the right category
			TreeNode node=null;
			if(s==propertyBars)
				node=treeBars.SelectedNode;
			else if(s==propertyCategories)
				node=treeCategories.SelectedNode;
			else if(s==propertyMenus)
				node=treeMenus.SelectedNode;
            if (node == null)
                return;
			BaseItem item=node.Tag as BaseItem;
            if (e.ChangedItem.PropertyDescriptor.Name == "Name" && e.ChangedItem.Value != e.OldValue && item!=null)
            {
                //if (item.GenerateCommandLink)
                //{
                //    CommandLink link = GetCommandLink(GetCommandLinkName(e.OldValue.ToString()));
                //    if (link != null)
                //        m_CommandLinksDeleted.Add(link);
                //    UpdateCommandLink(item);
                //}
            }
			if(e.ChangedItem.PropertyDescriptor.Name=="Category" && e.ChangedItem.Value!=e.OldValue && s==propertyCategories)
			{
				if(node.Tag==null || !(node.Tag is BaseItem))
					return;
	            
				BaseItem objItem=node.Tag as BaseItem;
				node.Remove();
				node=CategorizeItem(objItem);
				node.ImageIndex=GetItemImageIndex(objItem);
				node.SelectedImageIndex=node.ImageIndex;
				AddSubItems(objItem,node);
				node.EnsureVisible();
				treeCategories.SelectedNode=node;
			}
			else if(e.ChangedItem.PropertyDescriptor.Name=="Name" && e.ChangedItem.Value!=e.OldValue && !m_ShowItemText)
			{
				node.Text=(string)e.ChangedItem.Value;
			}
			else if(e.ChangedItem.PropertyDescriptor.Name=="Text" && e.ChangedItem.Value!=e.OldValue && m_ShowItemText)
			{
				node.Text=(string)e.ChangedItem.Value;
			}
			else if(e.ChangedItem.PropertyDescriptor.Name=="DockLine" || e.ChangedItem.PropertyDescriptor.Name=="DockOffset")
			{
				Bar bar=node.Tag as Bar;
				if(bar!=null)
				{
					bar.DockLine=bar.DockLine;
					bar.RecalcLayout();
				}
			}
            else if (e.ChangedItem.PropertyDescriptor.Name == "GenerateCommandLink" && e.ChangedItem.Value != e.OldValue)
            {
                UpdateCommandLink(item);
            }
			DotNetBarManager manager=this.GetDesignManager();
			if(e.ChangedItem.PropertyDescriptor.Name=="Name" && manager!=null && s==propertyCategories)
			{
				if(manager.Items.Contains(e.ChangedItem.Value.ToString()))
				{
					item.Name=e.OldValue.ToString();
					((PropertyGrid)s).Refresh();
					MessageBox.Show("Item with that name already exists.");
				}
				else
				{
					manager.Items.Remove(e.OldValue.ToString());
					manager.Items.Add(item);						
				}
			}
			if(item!=null)
			{
				Bar barContainer=item.ContainerControl as Bar;
				if(barContainer!=null)
					barContainer.RecalcLayout();
			}
			RefreshDesignBar();
		}
        //private string GetCommandLinkName(string itemName)
        //{
        //    return CommandLink.GetCommandLinkName(itemName);
        //}
        //private string GetCommandLinkName(BaseItem item)
        //{
        //    return GetCommandLinkName(item.Name);
        //}
        //private Type GetCommandLinkType(BaseItem item)
        //{
        //    if (item is ButtonItem)
        //        return typeof(CommandLinkButtonItem);
        //    else if (item is LabelItem)
        //        return typeof(CommandLinkLabelItem);
        //    else if (item is TextBoxItem)
        //        return typeof(CommandLinkTextBoxItem);
        //    else if (item is ColorPickerDropDown)
        //        return typeof(CommandLinkColorPickerDropDown);
        //    else if (item is ControlContainerItem)
        //        return typeof(CommandLinkControlContainerItem);
        //    else if (item is DockContainerItem)
        //        return typeof(CommandLinkDockContainerItem);
        //    else if (item is ProgressBarItem)
        //        return typeof(CommandLinkProgressBarItem);
        //    else if (item is ComboBoxItem)
        //        return typeof(CommandLinkComboBoxItem);
        //    else
        //        return null;
        //}
        /// 
        /// Updates design-time command link for the item
        /// 
        /// 
        private void UpdateCommandLink(BaseItem item)
        {
            if (m_Designer == null)
            {
                MessageBox.Show("Designer for the DotNetBarManager not assigned. This could be becouse you are using design in stand-alone mode. To use command links open designer by double-clicking DotNetBarManager in VS.NET");
                return;
            }
            //if (item.GenerateCommandLink)
            //{
            //    CommandLink link = GetCommandLink(GetCommandLinkName(item));
            //    if (link != null)
            //    {
            //        if (m_CommandLinksDeleted.Contains(link))
            //            m_CommandLinksDeleted.Remove(link);
            //        else
            //        {
            //            if (GetCommandLinkType(item) != link.GetType())
            //            {
            //                item.GenerateCommandLink = false;
            //                MessageBox.Show("Command Link with this item name already exists and is of different type. Change your item name to generate correct Command Link.");
            //            }
            //        }
            //        return;
            //    }
            //    try
            //    {
            //        Type linkType = GetCommandLinkType(item);
            //        if(linkType!=null)
            //            link = CreateObject(linkType, GetCommandLinkName(item.Name)) as CommandLink;
            //        else
            //        {
            //            MessageBox.Show("Selected item does not support Command Links.");
            //            item.GenerateCommandLink = false;
            //        }
            //    }
            //    catch
            //    {
            //        MessageBox.Show("Cannot create command link with the name '" + GetCommandLinkName(item.Name) + "' becouse object with that name already exists on the form. Please change the name of the item.");
            //        link = null;
            //        item.GenerateCommandLink = false;
            //    }
            //    if (link != null)
            //    {
            //        m_CommandLinksCreated.Add(link);
            //        TypeDescriptor.GetProperties(link)["Manager"].SetValue(link, m_ExternalManager);
            //    }
            //}
            //else
            //{
            //    // Remove the CommandLink
            //    CommandLink link = GetCommandLink(GetCommandLinkName(item.Name));
            //    if (link != null)
            //    {
            //        m_CommandLinksDeleted.Add(link);
            //        if (m_CommandLinksCreated.Contains(link))
            //            m_CommandLinksCreated.Remove(link);
            //    }
            //}
        }
        //private CommandLink GetCommandLink(string name)
        //{
        //    foreach (CommandLink link in m_ExternalManager.CommandLinks)
        //    {
        //        if (link.Name == name)
        //            return link;
        //    }
        //    return null;
        //}
		private void TreeKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
		{
			TreeView tree=sender as TreeView;
			if(e.KeyCode==Keys.F2 && tree.SelectedNode!=null && tree.LabelEdit)
				tree.SelectedNode.BeginEdit();
		}
		private void TreeMouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
		{
			if(e.Button!=MouseButtons.Right)
				return;
			TreeView tree=sender as TreeView;
            
			TreeNode node=tree.GetNodeAt(e.X,e.Y);
			if(node!=null)
				tree.SelectedNode=node;
			else if(tree==treeMenus)
				tree.SelectedNode=null;
			// Popup menu
			ButtonItem popup=dotNetBarManager1.ContextMenus[CONTEXT_MENU] as ButtonItem;
			
			// If MoveTo and CopyTo are visible add items to them
			if(popup.SubItems[COPY_TO].Visible)
			{
				BaseItem itemCopyTo=popup.SubItems[COPY_TO];
				BaseItem itemMoveTo=popup.SubItems[MOVE_TO];
				
				itemCopyTo.SubItems.Clear();
				itemMoveTo.SubItems.Clear();
				bool bBars=true,bCategories=false, bPopups=false;
				// Don't show categories for category items...
				
				if(buttonContext.Visible)
					bPopups=true;
				if(buttonCategories.Visible)
					bCategories=true;
				if(bBars)
				{
					foreach(TreeNode barNode in treeBars.Nodes)
					{
						BaseItem newItem=new ButtonItem();
						newItem.Text=barNode.Text;
						newItem.Tag=barNode;
						newItem.Click+=new System.EventHandler(this.CopyMoveToClick);
						itemCopyTo.SubItems.Add(newItem);
						itemMoveTo.SubItems.Add(newItem.Copy());
					}
				}
				if(bCategories)
				{
					ButtonItem cat=new ButtonItem(TO_CATEGORIES);
					cat.Text="Categories";
					cat.BeginGroup=true;
					cat.Click+=new System.EventHandler(this.CopyMoveToClick);
					itemCopyTo.SubItems.Add(cat);
					itemMoveTo.SubItems.Add(cat.Copy());
					foreach(TreeNode catNode in treeCategories.Nodes)
					{
						BaseItem newItem=new ButtonItem();
						newItem.Text=catNode.Text;
						newItem.Click+=new System.EventHandler(this.CopyMoveToClick);
						newItem.Tag="cat";
						itemCopyTo.SubItems.Add(newItem);
						itemMoveTo.SubItems.Add(newItem.Copy());
					}
				}
				if(bPopups)
				{
					BaseItem pi=new ButtonItem(TO_CONTEXTMENUS);
					pi.BeginGroup=true;
					pi.Text="Popups";
					pi.Click+=new System.EventHandler(this.CopyMoveToClick);
					itemCopyTo.SubItems.Add(pi);
					itemMoveTo.SubItems.Add(pi.Copy());
					foreach(BaseItem objItem in this.GetDesignManager().ContextMenus)
					{
						BaseItem newItem=new ButtonItem();
						newItem.Text=(objItem.Text=="")?objItem.Name:objItem.Text;
						newItem.Tag=objItem;
						newItem.Click+=new System.EventHandler(this.CopyMoveToClick);
						itemCopyTo.SubItems.Add(newItem);
						itemMoveTo.SubItems.Add(newItem.Copy());						
					}
				}
			}
			Point pt=new Point(e.X,e.Y);
			pt=tree.PointToScreen(pt);
			popup.PopupMenu(pt);
		}
        private void SelectObjectInPropertyGrid(object obj)
        {
            PropertyGrid propertyGrid=null;
            TreeView tree = null;
            if (navigationPane1.CheckedButton == buttonBars)
            {
                propertyGrid = propertyBars;
                tree = treeBars;
            }
            else if (navigationPane1.CheckedButton == buttonCategories)
            {
                propertyGrid = propertyCategories;
                tree = treeCategories;
            }
            else if (navigationPane1.CheckedButton == buttonContext)
            {
                propertyGrid = propertyMenus;
                tree = treeMenus;
            }
            propertyGrid.SelectedObject = obj;
            // Find object in tree and select it
            if (tree.SelectedNode != null && tree.SelectedNode.Tag == obj)
                return;
            TreeNode node = FindObjectInNodes(tree.Nodes, obj);
            tree.SelectedNode = node;
            if (node != null)
                node.EnsureVisible();
        }
        private TreeNode FindObjectInNodes(TreeNodeCollection col, object obj)
        {
            foreach (TreeNode node in col)
            {
                if (node.Tag == obj)
                    return node;
                else if (node.Nodes.Count > 0)
                {
                    TreeNode tn = FindObjectInNodes(node.Nodes, obj);
                    if (tn != null)
                        return tn;
                }
            }
            return null;
        }
		private void TreeAfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
		{
			TreeView tree=sender as TreeView;
			PropertyGrid propertyGrid=null;
			if(tree==treeBars)
				propertyGrid=propertyBars;
			else if(tree==treeCategories)
				propertyGrid=propertyCategories;
			else if(tree==treeMenus)
				propertyGrid=propertyMenus;
			tree.LabelEdit=false;
			if(e.Node.Tag==null)
			{
				propertyGrid.SelectedObject=null;
				return;
			}
			if(e.Node.Tag is BaseItem)
			{
				propertyGrid.SelectedObject=e.Node.Tag;
				tree.LabelEdit=true;
				// Now way to detect when Items collection has changed, reset changed flag if combo box is selected...
				if(e.Node.Tag is ComboBoxItem)
					m_DataChanged=true;
			}
			else if(e.Node.Tag is Bar)
			{
				propertyGrid.SelectedObject=(Bar)e.Node.Tag;
			}
			else
			{
				propertyGrid.SelectedObject=null;
			}
		}
		private void TreeBeforeSelect(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
		{
			EnableCommands(sender as TreeView,e.Node);
		}
		private void EnableCommands(TreeView tree, TreeNode selectedNode)
		{
			// Disable/Enable toolbar items...
			bool bLeftEnabled=false, bRightEnabled=false, bUpEnabled=false, bDownEnabled=false;
			DotNetBarManager manager=this.GetDesignManager();
			BaseItem popupItem=dotNetBarManager1.ContextMenus[CONTEXT_MENU];
			if(selectedNode!=null && selectedNode.Tag is BaseItem)
			{
				BaseItem objItem=selectedNode.Tag as BaseItem;
				int i=0;
				if(objItem.Parent!=null)
					i=objItem.Parent.SubItems.IndexOf(objItem);
				else
					i=selectedNode.Index;
				if(i>0)
				{
					bUpEnabled=true;
					bRightEnabled=true;
				}
				int iCount=0;
				if(objItem.Parent!=null)
					iCount=objItem.Parent.SubItems.Count-1;
				else if(selectedNode.Parent!=null)
					iCount=selectedNode.Parent.Nodes.Count-1;
				else
					iCount=selectedNode.TreeView.Nodes.Count-1;
				if(i
		/// Gets or sets the DotNetBar manager that is being designed by this designer.
		/// 
		public DotNetBarManager ExternalManager
		{
			get {return m_ExternalManager;}
			set
			{
				m_ExternalManager=value;
				this.OnExternalManagerChanged();
			}
		}
		/// 
		/// Gets or sets the external bar that is designed by this designer.
		/// 
		public Bar ExternalBar
		{
			get {return m_ExternalBar;}
			set
			{
				m_ExternalBar=value;
				this.OnExternalBarChanged();
			}
		}
		/// 
		/// Gets or sets design-time designer services used to interact with design-time environment.
		/// 
		public DevComponents.DotNetBar.Design.IDesignerServices DesignerServices
		{
			get {return m_Designer;}
			set {m_Designer=value;}
		}
		#endregion
	}
}