/// <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(); } }
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); } } }
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(); }
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(); } }
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(); }
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(); }