Beispiel #1
0
        /// <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);
        }
Beispiel #3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="items"></param>
 /// <param name="editorService"></param>
 public DockableCollectionEditor(DockableItemCollection items, IWindowsFormsEditorService editorService) : this()
 {
     this.items         = items;
     this.editorService = editorService;
 }