117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.ComponentModel.Design;
 | 
						|
 | 
						|
namespace DevComponents.Tree
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Represents Windows Forms designer for Node object.
 | 
						|
	/// </summary>
 | 
						|
	public class NodeDesigner:ComponentDesigner
 | 
						|
	{
 | 
						|
		/// <summary>
 | 
						|
		/// Creates news instance of the class.
 | 
						|
		/// </summary>
 | 
						|
		public NodeDesigner()
 | 
						|
		{
 | 
						|
		}
 | 
						|
		
 | 
						|
		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);
 | 
						|
		}
 | 
						|
		private void OnSelectionChanged(object sender, EventArgs e) 
 | 
						|
		{
 | 
						|
			ISelectionService ss = (ISelectionService)sender;
 | 
						|
			if(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
 | 
						|
                    node.TreeControl.SelectedNode=null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		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)
 | 
						|
		{
 | 
						|
			CreateNode(this.Component as 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();
 | 
						|
					}
 | 
						|
					
 | 
						|
					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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |