196 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.ComponentModel;
 | |
| using System.ComponentModel.Design;
 | |
| using System.Windows.Forms;
 | |
| using System.Windows.Forms.Design;
 | |
| 
 | |
| namespace DevComponents.Tree.Design
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Represents Windows Forms designer for Node object.
 | |
| 	/// </summary>
 | |
| 	public class NodeDesigner:ComponentDesigner
 | |
| 	{
 | |
| 		/// <summary>
 | |
| 		/// Initializes designer with given component.
 | |
| 		/// </summary>
 | |
| 		/// <param name="component">Component to initalize designer with.</param>
 | |
| 		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);
 | |
| 			
 | |
| 			Node n=component as Node;
 | |
| 			if(n!=null)
 | |
| 				this.Visible=n.Visible;
 | |
| 		}
 | |
| 		private void OnSelectionChanged(object sender, EventArgs e) 
 | |
| 		{
 | |
| 			ISelectionService ss = (ISelectionService)sender;
 | |
|             if (this.Component != null && ss.PrimarySelection != this.Component)
 | |
|             {
 | |
|                 Node node = this.Component as Node;
 | |
|                 if (ss.PrimarySelection is Node)
 | |
|                 {
 | |
|                     Node selected = ss.PrimarySelection as Node;
 | |
| 
 | |
|                     if (selected.TreeControl != node.TreeControl)
 | |
|                     {
 | |
|                         node.TreeControl.SelectedNode = null;
 | |
|                     }
 | |
|                 }
 | |
|                 else if (node != null && node.TreeControl != null)
 | |
|                     node.TreeControl.SelectedNode = null;
 | |
|             }
 | |
| 		}
 | |
| 
 | |
| 		protected override void PreFilterProperties(System.Collections.IDictionary properties)
 | |
| 		{
 | |
| 			base.PreFilterProperties(properties);
 | |
| 			properties["Visible"] = TypeDescriptor.CreateProperty(typeof(NodeDesigner),(PropertyDescriptor)properties["Visible"], new Attribute[]
 | |
| 				{
 | |
| 					new DefaultValueAttribute(true),
 | |
| 					new BrowsableAttribute(true),
 | |
| 					new CategoryAttribute("Layout")});
 | |
| //			properties["HostedControl"] = TypeDescriptor.CreateProperty(typeof(NodeDesigner),(PropertyDescriptor)properties["HostedControl"], new Attribute[]
 | |
| //				{
 | |
| //					new DefaultValueAttribute(null),
 | |
| //					new BrowsableAttribute(true),
 | |
| //					new CategoryAttribute("Behavior"),
 | |
| //					new DescriptionAttribute("Indicates control hosted inside of the cell.")});
 | |
| 
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// Gets or sets whether item is visible.
 | |
| 		/// </summary>
 | |
| 		[DefaultValue(true),Browsable(true),Category("Layout"),Description("Gets or sets whether node is visible.")]
 | |
| 		public bool Visible 
 | |
| 		{
 | |
| 			get 
 | |
| 			{
 | |
| 				return (bool)ShadowProperties["Visible"];
 | |
| 			}
 | |
| 			set 
 | |
| 			{
 | |
| 				// this value is not passed to the actual control
 | |
| 				this.ShadowProperties["Visible"] = value;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| //		/// <summary>
 | |
| //		/// Gets or sets whether item is visible.
 | |
| //		/// </summary>
 | |
| //		[DefaultValue(null),Browsable(true),Category("Behavior"),Description("Indicates control hosted inside of the cell.")]
 | |
| //		public Control HostedControl 
 | |
| //		{
 | |
| //			get 
 | |
| //			{
 | |
| //				Node node = this.Component as Node;
 | |
| //				return node.HostedControl;
 | |
| //			}
 | |
| //			set 
 | |
| //			{
 | |
| //				Node node = this.Component as Node;
 | |
| //				node.HostedControl = value;
 | |
| //				if(value!=null)
 | |
| //				{
 | |
| //					IDesignerHost dh = this.GetService(typeof (IDesignerHost)) as IDesignerHost;
 | |
| //					if(dh!=null)
 | |
| //					{
 | |
| //						TreeGXDesigner ds = dh.GetDesigner(node.TreeControl) as TreeGXDesigner;
 | |
| //						if(ds!=null)
 | |
| //							ds.HookControl(value);
 | |
| //					}
 | |
| //				}
 | |
| //			}
 | |
| //		}
 | |
| 		
 | |
| 		/// <summary>Returns design-time commands applicable to this designer.</summary>
 | |
| 		public override DesignerVerbCollection Verbs 
 | |
| 		{
 | |
| 			get 
 | |
| 			{
 | |
| 				DesignerVerb[] verbs = new DesignerVerb[]
 | |
| 					{
 | |
| 						new DesignerVerb("Create Child Node", new EventHandler(CreateNode))
 | |
| 				};
 | |
| 				return new DesignerVerbCollection(verbs);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private void CreateNode(object sender, EventArgs e)
 | |
| 		{
 | |
| 			Node node=CreateNode(this.Component as Node);
 | |
| 			if(node!=null)
 | |
| 			{
 | |
| 				ISelectionService sel = this.GetService(typeof (ISelectionService)) as ISelectionService;
 | |
| 				ArrayList list=new ArrayList(1);
 | |
| 				list.Add(node);
 | |
| 				if(sel!=null)
 | |
| 				{
 | |
| 					sel.SetSelectedComponents(list, SelectionTypes.Primary);
 | |
| 					node.TreeControl.SelectedNode = node;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 		private Node CreateNode(Node parentNode)
 | |
| 		{
 | |
| 			IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
 | |
| 			if(dh==null)
 | |
| 				return null;
 | |
|             
 | |
| 			Node node=null;
 | |
| 			TreeGX tree=((Node)this.Component).TreeControl;
 | |
| 			tree.BeginUpdate();
 | |
| 			try
 | |
| 			{
 | |
| 				IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
| 				if(change!=null)
 | |
| 				{
 | |
| 					if(parentNode!=null)
 | |
| 						change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(parentNode).Find("Nodes",true));
 | |
| 					else
 | |
| 						change.OnComponentChanging(this.Component,TypeDescriptor.GetProperties(tree).Find("Nodes",true));
 | |
| 				}
 | |
| 
 | |
| 				node=dh.CreateComponent(typeof(Node)) as Node;
 | |
| 				if(node!=null)
 | |
| 				{
 | |
| 					node.Text=node.Name;
 | |
| 					node.Expanded = true;
 | |
| 					if(parentNode==null)
 | |
| 						tree.Nodes.Add(node);
 | |
| 					else
 | |
| 					{
 | |
| 						parentNode.Nodes.Add(node);
 | |
| 						parentNode.Expand();
 | |
| 						TypeDescriptor.GetProperties(node)["Style"].SetValue(node,parentNode.Style);
 | |
| 					}
 | |
| 					
 | |
| 					if(change!=null)
 | |
| 					{
 | |
| 						if(parentNode!=null)
 | |
| 							change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(parentNode).Find("Nodes",true),null,null);
 | |
| 						else
 | |
| 							change.OnComponentChanged(this.Component,TypeDescriptor.GetProperties(tree).Find("Nodes",true),null,null);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			finally
 | |
| 			{
 | |
| 				tree.EndUpdate();
 | |
| 			}
 | |
| 
 | |
| 			return node;
 | |
| 		}
 | |
| 	}
 | |
| }
 |