/// <summary>
        /// Change data item parent
        /// </summary>
        /// <param name="parent">new parent</param>
        /// <param name="item">data item</param>
        public void ChangeParent(object parent, object item)
        {
            if (IsDropInProgress)
            {
                return;
            }

            ItemContainerData dragItem = GetItemContainerData(item);

            if (dragItem == null)
            {
                return;
            }

            ItemContainerData dropTarget = GetItemContainerData(parent);

            if (dropTarget == null)
            {
                DestroyItems(new[] { item }, false);
                return;
            }
            ItemContainerData[] dragItems = new[] { dragItem };
            if (CanDrop(dragItems, dropTarget))
            {
                Drop(dragItems, dropTarget, ItemDropAction.SetLastChild);
            }
        }
        protected override void SetNextSiblingInternal(ItemContainerData sibling, ItemContainerData nextSibling)
        {
            TreeViewItemContainerData tvSibling      = (TreeViewItemContainerData)sibling;
            TreeViewItemContainerData lastDescendant = tvSibling.LastDescendant(this);

            if (lastDescendant == null)
            {
                lastDescendant = tvSibling;
            }
            TreeViewItemContainerData tvItemData    = (TreeViewItemContainerData)nextSibling;
            TreeViewItemContainerData dragItemChild = tvItemData.FirstChild(this);

            base.SetNextSiblingInternal(lastDescendant, nextSibling);
            if (dragItemChild != null)
            {
                MoveSubtree(tvItemData, dragItemChild);
            }

            SetParent(tvSibling.Parent, tvItemData);

            VirtualizingTreeViewItem tvItem = (VirtualizingTreeViewItem)GetItemContainer(tvItemData.Item);

            if (tvItem != null)
            {
                tvItem.UpdateIndent();
            }
        }
Exemple #3
0
        public void ChangeParent(object parent, object item)
        {
            if (this.IsDropInProgress)
            {
                return;
            }
            ItemContainerData itemContainerData1 = this.GetItemContainerData(item);

            if (parent == null)
            {
                if (itemContainerData1 == null)
                {
                    this.Add(item);
                }
                else
                {
                    ItemContainerData[] dragItems = new ItemContainerData[1]
                    {
                        itemContainerData1
                    };
                    if (!this.CanDrop(dragItems, (ItemContainerData)null))
                    {
                        return;
                    }
                    this.Drop(dragItems, (ItemContainerData)null, ItemDropAction.SetLastChild);
                }
            }
            else
            {
                ItemContainerData itemContainerData2 = this.GetItemContainerData(parent);
                if (itemContainerData2 == null)
                {
                    this.DestroyItems(new object[1] {
                        item
                    }, false);
                }
                else
                {
                    ItemContainerData[] dragItems = new ItemContainerData[1]
                    {
                        itemContainerData1
                    };
                    if (!this.CanDrop(dragItems, itemContainerData2))
                    {
                        return;
                    }
                    this.Drop(dragItems, itemContainerData2, ItemDropAction.SetLastChild);
                }
            }
        }
Exemple #4
0
 protected override bool CanDrop(ItemContainerData[] dragItems, ItemContainerData dropTarget)
 {
     if (base.CanDrop(dragItems, dropTarget))
     {
         TreeViewItemContainerData itemContainerData = (TreeViewItemContainerData)dropTarget;
         for (int index = 0; index < dragItems.Length; ++index)
         {
             TreeViewItemContainerData dragItem = (TreeViewItemContainerData)dragItems[index];
             if (itemContainerData == dragItem || itemContainerData != null && itemContainerData.IsDescendantOf(dragItem))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
        protected override bool CanDrop(ItemContainerData[] dragItems, ItemContainerData dropTarget)
        {
            if (base.CanDrop(dragItems, dropTarget))
            {
                TreeViewItemContainerData tvDropTarget = (TreeViewItemContainerData)dropTarget;
                for (int i = 0; i < dragItems.Length; ++i)
                {
                    TreeViewItemContainerData dragItemData = (TreeViewItemContainerData)dragItems[i];
                    if (tvDropTarget == dragItemData || tvDropTarget != null && tvDropTarget.IsDescendantOf(dragItemData)) //disallow self parenting
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        public static void ExpandTo <T>(this VirtualizingTreeView treeView, T item, Func <T, T> getParent)
        {
            if (item == null)
            {
                return;
            }
            ItemContainerData containerData = treeView.GetItemContainerData(item);

            if (containerData == null)
            {
                treeView.ExpandTo(getParent(item), getParent);
                treeView.Expand(item);
            }
            else
            {
                treeView.Expand(item);
            }
        }
        public override void DataBindItem(object item, ItemContainerData containerData, VirtualizingItemContainer itemContainer)
        {
            itemContainer.Clear();

            VirtualizingTreeViewItemDataBindingArgs args = new VirtualizingTreeViewItemDataBindingArgs();

            args.Item            = item;
            args.ItemPresenter   = itemContainer.ItemPresenter == null ? gameObject : itemContainer.ItemPresenter;
            args.EditorPresenter = itemContainer.EditorPresenter == null ? gameObject : itemContainer.EditorPresenter;

            RaiseItemDataBinding(args);

            VirtualizingTreeViewItem treeViewItem = (VirtualizingTreeViewItem)itemContainer;

            treeViewItem.CanExpand = args.HasChildren;
            treeViewItem.CanEdit   = args.CanEdit;
            treeViewItem.CanDrag   = args.CanDrag;
            treeViewItem.UpdateIndent();
        }
Exemple #8
0
        protected override void Drop(
            ItemContainerData[] dragItems,
            ItemContainerData dropTarget,
            ItemDropAction action)
        {
            TreeViewItemContainerData parent = (TreeViewItemContainerData)dropTarget;

            switch (action)
            {
            case ItemDropAction.SetLastChild:
                for (int index = 0; index < dragItems.Length; ++index)
                {
                    TreeViewItemContainerData dragItem = (TreeViewItemContainerData)dragItems[index];
                    if (parent == null || parent != dragItem && !parent.IsDescendantOf(dragItem))
                    {
                        this.SetParent(parent, dragItem);
                    }
                    else
                    {
                        break;
                    }
                }
                break;

            case ItemDropAction.SetPrevSibling:
                for (int index = 0; index < dragItems.Length; ++index)
                {
                    this.SetPrevSiblingInternal((ItemContainerData)parent, dragItems[index]);
                }
                break;

            case ItemDropAction.SetNextSibling:
                for (int index = dragItems.Length - 1; index >= 0; --index)
                {
                    this.SetNextSiblingInternal((ItemContainerData)parent, dragItems[index]);
                }
                break;
            }
            this.UpdateSelectedItemIndex();
        }
        protected override void SetPrevSiblingInternal(ItemContainerData sibling, ItemContainerData prevSibling)
        {
            TreeViewItemContainerData tvSiblingData   = (TreeViewItemContainerData)sibling;
            TreeViewItemContainerData tvItemData      = (TreeViewItemContainerData)prevSibling;
            TreeViewItemContainerData tvDragItemChild = tvItemData.FirstChild(this);

            base.SetPrevSiblingInternal(sibling, prevSibling);

            if (tvDragItemChild != null)
            {
                MoveSubtree(tvItemData, tvDragItemChild);
            }

            SetParent(tvSiblingData.Parent, tvItemData);

            VirtualizingTreeViewItem tvItem = (VirtualizingTreeViewItem)GetItemContainer(tvItemData.Item);

            if (tvItem != null)
            {
                tvItem.UpdateIndent();
            }
        }
Exemple #10
0
        protected override void SetPrevSiblingInternal(
            ItemContainerData sibling,
            ItemContainerData prevSibling)
        {
            TreeViewItemContainerData itemContainerData1 = (TreeViewItemContainerData)sibling;
            TreeViewItemContainerData itemContainerData2 = (TreeViewItemContainerData)prevSibling;
            TreeViewItemContainerData child = itemContainerData2.FirstChild(this);

            base.SetPrevSiblingInternal(sibling, prevSibling);
            if (child != null)
            {
                this.MoveSubtree(itemContainerData2, child);
            }
            this.SetParent(itemContainerData1.Parent, itemContainerData2);
            VirtualizingTreeViewItem itemContainer = (VirtualizingTreeViewItem)this.GetItemContainer(itemContainerData2.Item);

            if (!Object.op_Inequality((Object)itemContainer, (Object)null))
            {
                return;
            }
            itemContainer.UpdateIndent();
        }
Exemple #11
0
        protected override void SetNextSiblingInternal(
            ItemContainerData sibling,
            ItemContainerData nextSibling)
        {
            TreeViewItemContainerData itemContainerData1 = (TreeViewItemContainerData)sibling;
            TreeViewItemContainerData itemContainerData2 = itemContainerData1.LastDescendant(this) ?? itemContainerData1;
            TreeViewItemContainerData itemContainerData3 = (TreeViewItemContainerData)nextSibling;
            TreeViewItemContainerData child = itemContainerData3.FirstChild(this);

            base.SetNextSiblingInternal((ItemContainerData)itemContainerData2, nextSibling);
            if (child != null)
            {
                this.MoveSubtree(itemContainerData3, child);
            }
            this.SetParent(itemContainerData1.Parent, itemContainerData3);
            VirtualizingTreeViewItem itemContainer = (VirtualizingTreeViewItem)this.GetItemContainer(itemContainerData3.Item);

            if (!Object.op_Inequality((Object)itemContainer, (Object)null))
            {
                return;
            }
            itemContainer.UpdateIndent();
        }
        protected override void Drop(ItemContainerData[] dragItems, ItemContainerData dropTarget, ItemDropAction action)
        {
            TreeViewItemContainerData tvDropTarget = (TreeViewItemContainerData)dropTarget;

            if (action == ItemDropAction.SetLastChild)
            {
                for (int i = 0; i < dragItems.Length; ++i)
                {
                    TreeViewItemContainerData dragItemData = (TreeViewItemContainerData)dragItems[i];
                    if (tvDropTarget == null || tvDropTarget != dragItemData && !tvDropTarget.IsDescendantOf(dragItemData)) //disallow self parenting
                    {
                        SetParent(tvDropTarget, dragItemData);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else if (action == ItemDropAction.SetPrevSibling)
            {
                for (int i = 0; i < dragItems.Length; ++i)
                {
                    SetPrevSiblingInternal(tvDropTarget, dragItems[i]);
                }
            }
            else if (action == ItemDropAction.SetNextSibling)
            {
                for (int i = dragItems.Length - 1; i >= 0; --i)
                {
                    SetNextSiblingInternal(tvDropTarget, dragItems[i]);
                }
            }

            UpdateSelectedItemIndex();
        }