260 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.ComponentModel;
 | |
| using System.ComponentModel.Design;
 | |
| using System.Windows.Forms;
 | |
| using System.ComponentModel.Design.Serialization;
 | |
| using System.CodeDom;
 | |
| using System.Drawing;
 | |
| using System.Collections;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Design
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Summary description for ExplorerBarDesigner.
 | |
| 	/// </summary>
 | |
| 	public class ExplorerBarDesigner:BarBaseControlDesigner
 | |
| 	{
 | |
| 		#region Internal Implementation
 | |
| 		public ExplorerBarDesigner():base()
 | |
| 		{
 | |
| 			this.EnableItemDragDrop=true;
 | |
| 		}
 | |
| 
 | |
| 		public override void Initialize(IComponent component) 
 | |
| 		{
 | |
| 			base.Initialize(component);
 | |
| 			if(!component.Site.DesignMode)
 | |
| 				return;
 | |
| 			ExplorerBar bar=this.Control as ExplorerBar;
 | |
| 			if(bar!=null)
 | |
| 				bar.SetDesignMode();
 | |
| 		}
 | |
| 
 | |
| 		public override DesignerVerbCollection Verbs 
 | |
| 		{
 | |
| 			get 
 | |
| 			{
 | |
| 				DesignerVerb[] verbs = new DesignerVerb[]
 | |
| 					{
 | |
| 						new DesignerVerb("Create Group", new EventHandler(OnAddGroup)),
 | |
| 						new DesignerVerb("Create Button", new EventHandler(OnAddButton))
 | |
| 					};
 | |
| 				return new DesignerVerbCollection(verbs);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| #if FRAMEWORK20
 | |
|         public override void InitializeNewComponent(IDictionary defaultValues)
 | |
|         {
 | |
|             base.InitializeNewComponent(defaultValues);
 | |
|             SetDesignTimeDefaults();
 | |
|         }
 | |
| #else
 | |
| 		public override void OnSetComponentDefaults()
 | |
| 		{
 | |
| 			base.OnSetComponentDefaults();
 | |
| 			SetDesignTimeDefaults();
 | |
| 		}
 | |
| #endif
 | |
|         private void SetDesignTimeDefaults()
 | |
|         {
 | |
|             if (this.Control is ExplorerBar)
 | |
|             {
 | |
|                 ExplorerBar eb = this.Control as ExplorerBar;
 | |
|                 eb.ApplyDefaultSettings();
 | |
|                 //eb.ThemeAware = true;
 | |
|                 eb.StockStyle = eExplorerBarStockStyle.SystemColors;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 		protected override BaseItem GetItemContainer()
 | |
| 		{
 | |
| 			ExplorerBar bar=this.Control as ExplorerBar;
 | |
| 			if(bar!=null)
 | |
| 				return bar.ItemsContainer;
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		protected override void RecalcLayout()
 | |
| 		{
 | |
| 			ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar;
 | |
| 			if(bar!=null)
 | |
| 				bar.RecalcLayout();
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnSubItemsChanging()
 | |
| 		{
 | |
| 			base.OnSubItemsChanging();
 | |
| 			IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
| 			if(change!=null)
 | |
| 			{
 | |
| 				ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar;
 | |
| 				change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(bar).Find("Groups",true));
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		protected override void OnSubItemsChanged()
 | |
| 		{
 | |
| 			base.OnSubItemsChanged();
 | |
| 			IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
| 			if(change!=null)
 | |
| 			{
 | |
| 				ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar;
 | |
| 				change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(bar).Find("Groups",true),null,null);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| //		/// <summary>
 | |
| //		/// Triggered when some other component on the form is removed.
 | |
| //		/// </summary>
 | |
| //		protected override void ComponentRemoved(object sender, ComponentEventArgs e)
 | |
| //		{
 | |
| //			base.ComponentRemoved(sender,e);
 | |
| //			if(e.Component is ExplorerBarGroupItem)
 | |
| //			{
 | |
| //				ExplorerBar bar=this.GetItemContainerControl() as ExplorerBar;
 | |
| //				if(bar.Groups.Contains(e.Component as BaseItem))
 | |
| //					bar.Groups.Remove(e.Component as BaseItem);
 | |
| //				DestroySubItems(e.Component as BaseItem);
 | |
| //				bar.RecalcLayout();
 | |
| //			}
 | |
| //		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Design-Time Item Creation
 | |
| 		private void OnAddGroup(object sender, EventArgs e)
 | |
| 		{
 | |
|             IDesignerHost dh = (IDesignerHost)GetService(typeof(IDesignerHost));
 | |
|             DesignerTransaction dt = dh.CreateTransaction();
 | |
|             try
 | |
|             {
 | |
|                 CreateGroup();
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 dt.Cancel();
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if(!dt.Canceled)
 | |
|                     dt.Commit();
 | |
|             }
 | |
| 		}
 | |
| 
 | |
| 		private ExplorerBarGroupItem CreateGroup()
 | |
| 		{
 | |
| 			ExplorerBar bar=this.Component as ExplorerBar;
 | |
| 			ExplorerBarGroupItem item=null;
 | |
| 			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | |
| 
 | |
| 			if(bar!=null && dh!=null)
 | |
| 			{
 | |
| 				OnSubItemsChanging();
 | |
|                 try
 | |
|                 {
 | |
|                     m_CreatingItem = true;
 | |
|                     item = dh.CreateComponent(typeof(ExplorerBarGroupItem)) as ExplorerBarGroupItem;
 | |
|                     if (item == null)
 | |
|                         return null;
 | |
|                     item.SetDefaultAppearance();
 | |
|                     item.Text = "New Group";
 | |
|                     item.Expanded = true;
 | |
|                     bar.Groups.Add(item);
 | |
|                     OnSubItemsChanged();
 | |
|                 }
 | |
|                 finally
 | |
|                 {
 | |
|                     m_CreatingItem = false;
 | |
|                 }
 | |
| 			}
 | |
| 
 | |
| 			return item;
 | |
| 		}
 | |
| 
 | |
| 		private void OnAddButton(object sender, EventArgs e)
 | |
| 		{
 | |
| 			ExplorerBar bar=this.Component as ExplorerBar;
 | |
| 			ExplorerBarGroupItem group=null;
 | |
| 
 | |
| 			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | |
| 			ISelectionService selection = (ISelectionService) this.GetService(typeof(ISelectionService));
 | |
| 
 | |
|             DesignerTransaction dt = dh.CreateTransaction();
 | |
|             try
 | |
|             {
 | |
|                 if (selection != null && selection.PrimarySelection is ExplorerBarGroupItem)
 | |
|                 {
 | |
|                     group = selection.PrimarySelection as ExplorerBarGroupItem;
 | |
|                 }
 | |
|                 else if (bar.Groups.Count > 0)
 | |
|                 {
 | |
|                     System.Drawing.Point point = bar.PointToClient(Form.MousePosition);
 | |
|                     if (bar.Bounds.Contains(point))
 | |
|                     {
 | |
|                         foreach (BaseItem item in bar.Groups)
 | |
|                         {
 | |
|                             if (item.DisplayRectangle.Contains(point))
 | |
|                             {
 | |
|                                 group = item as ExplorerBarGroupItem;
 | |
|                                 break;
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                     if (group == null)
 | |
|                     {
 | |
|                         foreach (BaseItem item in bar.Groups)
 | |
|                         {
 | |
|                             if (item.Visible)
 | |
|                             {
 | |
|                                 group = item as ExplorerBarGroupItem;
 | |
|                                 break;
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
| 
 | |
|                 if (group == null)
 | |
|                     group = CreateGroup();
 | |
| 
 | |
|                 IComponentChangeService change = this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
|                 if (change != null)
 | |
|                     change.OnComponentChanging(this.Component, TypeDescriptor.GetProperties(group).Find("SubItems", true));
 | |
|                 try
 | |
|                 {
 | |
|                     m_CreatingItem = true;
 | |
|                     ButtonItem button = dh.CreateComponent(typeof(ButtonItem)) as ButtonItem;
 | |
|                     if (button == null)
 | |
|                         return;
 | |
|                     ExplorerBarGroupItem.SetDesignTimeDefaults(button, group.StockStyle);
 | |
|                     group.SubItems.Add(button);
 | |
|                     if (change != null)
 | |
|                         change.OnComponentChanged(this.Component, TypeDescriptor.GetProperties(group).Find("SubItems", true), null, null);
 | |
|                 }
 | |
|                 finally
 | |
|                 {
 | |
|                     m_CreatingItem = false;
 | |
|                 }
 | |
| 
 | |
|                 this.RecalcLayout();
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 dt.Cancel();
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if(!dt.Canceled)
 | |
|                     dt.Commit();
 | |
|             }
 | |
| 		}
 | |
| 
 | |
| 		protected override bool CanDragItem(BaseItem item)
 | |
| 		{
 | |
| 			if(item is ExplorerBarGroupItem)
 | |
| 				return false;
 | |
| 			return base.CanDragItem(item);
 | |
| 		}
 | |
| 		#endregion
 | |
| 	}
 | |
| }
 |