using System; using System.ComponentModel; using System.ComponentModel.Design; namespace DevComponents.Tree { /// /// Represents Windows Forms designer for Node object. /// public class NodeDesigner:ComponentDesigner { /// /// Creates news instance of the class. /// 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; } } }