259 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			259 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
using System.Drawing;
 | 
						|
using System.Windows.Forms;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Represents designer for BaseItem objects and derived classes.
 | 
						|
	/// </summary>
 | 
						|
	public class BaseItemDesigner:System.ComponentModel.Design.ComponentDesigner,IDesignerServices
 | 
						|
	{
 | 
						|
		#region Internal Implementation
 | 
						|
		/// <summary>
 | 
						|
		/// Creates new instance of the class.
 | 
						|
		/// </summary>
 | 
						|
		public BaseItemDesigner()
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		public override void Initialize(IComponent component) 
 | 
						|
		{
 | 
						|
			base.Initialize(component);
 | 
						|
			if(!component.Site.DesignMode)
 | 
						|
				return;
 | 
						|
 | 
						|
			ISelectionService ss =(ISelectionService)GetService(typeof(ISelectionService));
 | 
						|
			if(ss!=null)
 | 
						|
				ss.SelectionChanged+=new EventHandler(OnSelectionChanged);
 | 
						|
 | 
						|
			BaseItem c=component as BaseItem;
 | 
						|
			if(c!=null)
 | 
						|
				this.Visible=c.Visible;
 | 
						|
 | 
						|
			// If our component is removed we need to clean-up
 | 
						|
			IComponentChangeService cc=(IComponentChangeService)GetService(typeof(IComponentChangeService));
 | 
						|
			if(cc!=null)
 | 
						|
			{
 | 
						|
				cc.ComponentRemoved+=new ComponentEventHandler(this.OnComponentRemoved);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		protected override void Dispose(bool disposing)
 | 
						|
		{
 | 
						|
			ISelectionService ss =(ISelectionService)GetService(typeof(ISelectionService));
 | 
						|
			if(ss!=null)
 | 
						|
				ss.SelectionChanged-=new EventHandler(OnSelectionChanged);
 | 
						|
 | 
						|
			IComponentChangeService cc=(IComponentChangeService)GetService(typeof(IComponentChangeService));
 | 
						|
			if(cc!=null)
 | 
						|
			{
 | 
						|
				cc.ComponentRemoved-=new ComponentEventHandler(this.OnComponentRemoved);
 | 
						|
			}
 | 
						|
 | 
						|
			base.Dispose(disposing);
 | 
						|
		}
 | 
						|
 | 
						|
		private void OnComponentRemoved(object sender,ComponentEventArgs e)
 | 
						|
		{
 | 
						|
			if(e.Component is BaseItem)
 | 
						|
			{
 | 
						|
				BaseItem parent=this.Component as BaseItem;
 | 
						|
				BaseItem item=e.Component as BaseItem;
 | 
						|
				if(item!=null && parent!=null && parent.SubItems.Contains(item))
 | 
						|
				{
 | 
						|
					IComponentChangeService cc=(IComponentChangeService)GetService(typeof(IComponentChangeService));
 | 
						|
					if(cc!=null)
 | 
						|
						cc.OnComponentChanging(parent,TypeDescriptor.GetProperties(parent)["SubItems"]);
 | 
						|
					parent.SubItems.Remove(item);
 | 
						|
					if(cc!=null)
 | 
						|
						cc.OnComponentChanged(parent,TypeDescriptor.GetProperties(parent)["SubItems"],null,null);
 | 
						|
					this.RecalcLayout();
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void OnSelectionChanged(object sender, EventArgs e) 
 | 
						|
		{
 | 
						|
			ISelectionService ss = (ISelectionService)sender;
 | 
						|
			if(ss!=null && ss.PrimarySelection!=this.Component && ss.PrimarySelection is BaseItem)
 | 
						|
			{
 | 
						|
				BaseItem item=this.Component as BaseItem;
 | 
						|
				if(item!=null)
 | 
						|
				{
 | 
						|
					BaseItem selected=ss.PrimarySelection as BaseItem;
 | 
						|
					IOwner owner=item.GetOwner() as IOwner;
 | 
						|
					if(owner!=null)
 | 
						|
					{
 | 
						|
						if(owner.GetItem(selected.Name)!=selected)
 | 
						|
							owner.SetFocusItem(null);
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public override DesignerVerbCollection Verbs 
 | 
						|
		{
 | 
						|
			get 
 | 
						|
			{
 | 
						|
				DesignerVerb[] verbs = new DesignerVerb[]
 | 
						|
					{
 | 
						|
						new DesignerVerb("Create Button", new EventHandler(CreateButton)),
 | 
						|
						new DesignerVerb("Create Text Box", new EventHandler(CreateTextBox)),
 | 
						|
						new DesignerVerb("Create Combo Box", new EventHandler(CreateComboBox)),
 | 
						|
						new DesignerVerb("Create Label", new EventHandler(CreateLabel)),
 | 
						|
				};
 | 
						|
				return new DesignerVerbCollection(verbs);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void CreateButton(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			CreateNewItem(typeof(ButtonItem));
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void CreateComboBox(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			CreateNewItem(typeof(ComboBoxItem));
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void CreateLabel(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			CreateNewItem(typeof(LabelItem));
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void CreateTextBox(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			CreateNewItem(typeof(TextBoxItem));
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void CreateNewItem(Type itemType)
 | 
						|
		{
 | 
						|
			BaseItem parent=this.Component as BaseItem;
 | 
						|
			System.ComponentModel.Design.IDesignerHost dh=(System.ComponentModel.Design.IDesignerHost)GetService(typeof(System.ComponentModel.Design.IDesignerHost));
 | 
						|
			System.ComponentModel.Design.IComponentChangeService change=this.GetService(typeof(System.ComponentModel.Design.IComponentChangeService)) as IComponentChangeService;
 | 
						|
			if(change!=null)
 | 
						|
				change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(parent).Find("SubItems",true));
 | 
						|
			BaseItem item=dh.CreateComponent(itemType) as BaseItem;
 | 
						|
			if(item==null)
 | 
						|
				return;
 | 
						|
			item.Text=item.Name;
 | 
						|
			BeforeNewItemAdded(item);
 | 
						|
			parent.SubItems.Add(item);
 | 
						|
			AfterNewItemAdded(item);
 | 
						|
			if(change!=null)
 | 
						|
				change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(parent).Find("SubItems",true),null,null);
 | 
						|
			
 | 
						|
			this.RecalcLayout();
 | 
						|
		}
 | 
						|
 | 
						|
		protected virtual void BeforeNewItemAdded(BaseItem item) {}
 | 
						|
 | 
						|
		protected virtual void AfterNewItemAdded(BaseItem item) {}
 | 
						|
 | 
						|
		protected virtual void RecalcLayout()
 | 
						|
		{
 | 
						|
			BaseItem item=this.Component as BaseItem;
 | 
						|
			System.Windows.Forms.Control control=item.ContainerControl as System.Windows.Forms.Control;
 | 
						|
			
 | 
						|
			if(control is Bar)
 | 
						|
				((Bar)control).RecalcLayout();
 | 
						|
			else if(control is ExplorerBar)
 | 
						|
				((ExplorerBar)control).RecalcLayout();
 | 
						|
			else if(control is BarBaseControl)
 | 
						|
				((BarBaseControl)control).RecalcLayout();
 | 
						|
			else if(control is SideBar)
 | 
						|
				((SideBar)control).RecalcLayout();
 | 
						|
		}
 | 
						|
 | 
						|
		public override System.Collections.ICollection AssociatedComponents
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				System.Collections.ArrayList components=new System.Collections.ArrayList();
 | 
						|
				BaseItem parent=this.Component as BaseItem;
 | 
						|
				if(parent==null)
 | 
						|
					return base.AssociatedComponents;
 | 
						|
				parent.SubItems.CopyTo(components);
 | 
						|
				return components;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		protected override void PreFilterProperties(IDictionary properties)
 | 
						|
		{
 | 
						|
			base.PreFilterProperties(properties);
 | 
						|
			properties["Visible"] = TypeDescriptor.CreateProperty(typeof(BaseItemDesigner),(PropertyDescriptor)properties["Visible"], new Attribute[]
 | 
						|
				{
 | 
						|
					new DefaultValueAttribute(true),
 | 
						|
					new BrowsableAttribute(true),
 | 
						|
					new CategoryAttribute("Layout")});
 | 
						|
			properties["CanCustomize"] = TypeDescriptor.CreateProperty(typeof(BaseItemDesigner),(PropertyDescriptor)properties["CanCustomize"], new Attribute[]
 | 
						|
				{
 | 
						|
					new DefaultValueAttribute(true),
 | 
						|
					new BrowsableAttribute(true),
 | 
						|
					new CategoryAttribute("Behavior"),
 | 
						|
					new DescriptionAttribute("Indicates whether item can be customized by user.")});
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether item can be customized by end user.
 | 
						|
		/// </summary>
 | 
						|
		[System.ComponentModel.Browsable(true),DevCoBrowsable(true),System.ComponentModel.DefaultValue(true),System.ComponentModel.Category("Behavior"),System.ComponentModel.Description("Indicates whether item can be customized by user.")]
 | 
						|
		public virtual bool CanCustomize
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return (bool)ShadowProperties["CanCustomize"];
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				// this value is not passed to the actual control
 | 
						|
				this.ShadowProperties["CanCustomize"] = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		/// <summary>
 | 
						|
		/// Gets or sets whether item is visible.
 | 
						|
		/// </summary>
 | 
						|
		[DefaultValue(true),Browsable(true),DevCoBrowsable(true),Category("Layout"),Description("Gets or sets whether item is visible.")]
 | 
						|
		public bool Visible 
 | 
						|
		{
 | 
						|
			get 
 | 
						|
			{
 | 
						|
				return (bool)ShadowProperties["Visible"];
 | 
						|
			}
 | 
						|
			set 
 | 
						|
			{
 | 
						|
				// this value is not passed to the actual control
 | 
						|
				this.ShadowProperties["Visible"] = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
 | 
						|
		#region IDesignerServices Implementation
 | 
						|
		object IDesignerServices.CreateComponent(System.Type componentClass)
 | 
						|
		{
 | 
						|
			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
			if(dh==null)
 | 
						|
				return null;
 | 
						|
			return dh.CreateComponent(componentClass);
 | 
						|
		}
 | 
						|
 | 
						|
		void IDesignerServices.DestroyComponent(IComponent c)
 | 
						|
		{
 | 
						|
			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | 
						|
			if(dh==null)
 | 
						|
				return;
 | 
						|
			dh.DestroyComponent(c);
 | 
						|
		}
 | 
						|
 | 
						|
		object IDesignerServices.GetService(Type serviceType)
 | 
						|
		{
 | 
						|
			return this.GetService(serviceType);
 | 
						|
		}
 | 
						|
		#endregion
 | 
						|
	}
 | 
						|
}
 |