/// <summary> /// /// </summary> /// <param name="first"></param> /// <param name="second"></param> private void SwapNodes(TreeNode first, TreeNode second) { // First index will always greater than the second index. // So when removing we remove the item at first index then second index, // but when inserting just do the reverse. int firstIndex = first.Index; int secondIndex = second.Index; DockableItem firstItem = (first.Tag as DockableItem); DockableItem secondItem = (second.Tag as DockableItem); // assumes both are in same level if (first.Parent != null) { TreeNode parentNode = first.Parent; DockableItemCollection itemCollection = (parentNode.Tag as DockableItem).Items; itemCollection.RemoveAt(firstIndex); itemCollection.RemoveAt(secondIndex); itemCollection.Insert(secondIndex, firstItem); itemCollection.Insert(firstIndex, secondItem); parentNode.Nodes.RemoveAt(firstIndex); parentNode.Nodes.RemoveAt(secondIndex); parentNode.Nodes.Insert(secondIndex, first); parentNode.Nodes.Insert(firstIndex, second); } else { this.Items.RemoveAt(firstIndex); this.Items.RemoveAt(secondIndex); this.Items.Insert(secondIndex, firstItem); this.Items.Insert(firstIndex, secondItem); trvDockableItems.Nodes.RemoveAt(firstIndex); trvDockableItems.Nodes.RemoveAt(secondIndex); trvDockableItems.Nodes.Insert(secondIndex, first); trvDockableItems.Nodes.Insert(firstIndex, second); } }
/// <summary> /// /// </summary> /// <param name="context"></param> /// <param name="provider"></param> /// <param name="value"></param> /// <returns></returns> public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value) { if (provider != null) { editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; } if (editorService != null) { DockableItemCollection items = value as DockableItemCollection; if (items == null) { items = new DockableItemCollection(); } DockableCollectionEditor itemEditor = new DockableCollectionEditor(items, editorService); editorService.ShowDialog(itemEditor); value = itemEditor.Items; context.OnComponentChanged(); } return(value); }
/// <summary> /// /// </summary> /// <param name="items"></param> /// <param name="editorService"></param> public DockableCollectionEditor(DockableItemCollection items, IWindowsFormsEditorService editorService) : this() { this.items = items; this.editorService = editorService; }