Exemple #1
0
        private void SetIndent(TreeViewItem parent, ref int siblingIndex)
        {
            while(true)
            {   
                TreeViewItem child = (TreeViewItem)m_treeView.GetItemContainer(siblingIndex + 1);
                if(child == null)
                {
                    return;
                }

                if(child.Parent != parent)
                {
                    return;
                }

                child.m_indent = parent.m_indent + m_treeView.Indent;
                child.m_itemLayout.padding.left = child.m_indent;

                siblingIndex++;
                SetIndent(child, ref siblingIndex);
            }
        }
Exemple #2
0
        /// <summary>
        /// Get Next Child Of TreeViewItem
        /// </summary>
        /// <param name="currentChild"></param>
        /// <returns>next treeview item after current child</returns>
        public TreeViewItem NextChild(TreeViewItem currentChild)
        {
            if(currentChild == null)
            {
                throw new ArgumentNullException("currentChild");
            }

            int siblingIndex = currentChild.transform.GetSiblingIndex();
            siblingIndex++;
            TreeViewItem nextChild = (TreeViewItem)m_treeView.GetItemContainer(siblingIndex);
            while(nextChild != null && nextChild.IsDescendantOf(this))
            {
                if(nextChild.Parent == this)
                {
                    return nextChild;
                }

                siblingIndex++;
                nextChild = (TreeViewItem)m_treeView.GetItemContainer(siblingIndex);
            }

            return null;
        }
Exemple #3
0
        /// <summary>
        /// Is treeviewitem is descendant of another element
        /// </summary>
        /// <param name="ancestor">treeview item to test</param>
        /// <returns>true if treeview item is descendant of ancestor</returns>
        public bool IsDescendantOf(TreeViewItem ancestor)
        {
            if (ancestor == null)
            {
                return true;
            }

            if(ancestor == this)
            {
                return false;
            }

            TreeViewItem testItem = this;
            while (testItem != null)
            {
                if (ancestor == testItem)
                {
                    return true;
                }

                testItem = testItem.Parent;
            }

            return false;
        }
Exemple #4
0
 public ParentChangedEventArgs(TreeViewItem oldParent, TreeViewItem newParent)
 {
     OldParent = oldParent;
     NewParent = newParent;
 }
Exemple #5
0
 public ParentChangedEventArgs(TreeViewItem oldParent, TreeViewItem newParent)
 {
     OldParent = oldParent;
     NewParent = newParent;
 }
        private void OnTreeViewItemParentChanged(object sender, ParentChangedEventArgs e)
        {
            TreeViewItem tvItem = (TreeViewItem)sender;

            if (!CanHandleEvent(tvItem))
            {
                return;
            }

            TreeViewItem oldParent = e.OldParent;

            if (DropMarker.Action != ItemDropAction.SetLastChild && DropMarker.Action != ItemDropAction.None)
            {
                if (oldParent != null && !oldParent.HasChildren)
                {
                    oldParent.CanExpand = false;
                }
                return;
            }

            TreeViewItem tvDropTarget = e.NewParent;

            if (tvDropTarget != null)
            {
                if (tvDropTarget.CanExpand)
                {
                    tvDropTarget.IsExpanded = true;
                }
                else
                {
                    tvDropTarget.CanExpand  = true;
                    m_expandSilently        = true;
                    tvDropTarget.IsExpanded = true;
                    m_expandSilently        = false;
                }
            }

            TreeViewItem dragItemChild = tvItem.FirstChild();
            TreeViewItem lastChild     = null;

            if (tvDropTarget != null)
            {
                lastChild = tvDropTarget.LastChild();
                if (lastChild == null)
                {
                    lastChild = tvDropTarget;
                }
            }
            else
            {
                lastChild = (TreeViewItem)LastItemContainer();
            }

            if (lastChild != tvItem)
            {
                TreeViewItem lastDescendant = lastChild.LastDescendant();
                if (lastDescendant != null)
                {
                    lastChild = lastDescendant;
                }

                if (!lastChild.IsDescendantOf(tvItem))
                {
                    DropItemAfter(lastChild, tvItem);
                }
            }

            if (dragItemChild != null)
            {
                MoveSubtree(tvItem, dragItemChild);
            }

            if (oldParent != null && !oldParent.HasChildren)
            {
                oldParent.CanExpand = false;
            }
        }