示例#1
0
		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;
				}
			}
		}