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
 | |
| 	}
 | |
| }
 |