Ejemplo n.º 1
0
        private void StoryBlockListView_ItemMoved(ITreeItem itemView, ITreeFolder oldParentView, ITreeFolder newParentView, int index)
        {
            //Data에 적용하기
            StoryBlockBase item = ((StoryBlockItemView)itemView).Data;

            EditingClip.RemoveChildItem(item);
            EditingClip.InsertChildItem(index, item);
        }
Ejemplo n.º 2
0
        private void MotionListView_ItemMoved(ITreeItem item, ITreeFolder oldParent, ITreeFolder newParent, int index)
        {
            MotionItemBase       itemData            = ((MotionItemBaseView)item).Data;
            MotionFolderItemView newParentFolderView = (MotionFolderItemView)newParent;

            if (oldParent != null)
            {
                MotionFolderItemView oldParentFolderView = (MotionFolderItemView)oldParent;
                oldParentFolderView.Data.RemoveChild(itemData);
            }
            newParentFolderView.Data.InsertChild(index, itemData);
        }
Ejemplo n.º 3
0
        private void UiTreeView_ItemMoved(ITreeItem itemView, ITreeFolder oldParentView, ITreeFolder newParentView, int index)
        {
            //Data에 적용하기
            UiItem     item              = ((UiItemView)itemView).Data;
            UiItem     newParentItem     = ((UiItemView)newParentView).Data;
            UiItemView oldParentItemView = (oldParentView as UiItemView);

            if (oldParentItemView != null)
            {
                oldParentItemView.Data.RemoveChildItem(item);
            }
            newParentItem.InsertChildItem(index, item);

            ItemMoved?.Invoke(item, newParentItem, oldParentItemView.Data);
        }
Ejemplo n.º 4
0
 //Utility
 private bool IsContainsChildRecursive(ITreeFolder folder, ITreeItem target)
 {
     foreach (ITreeItem childItem in folder.ChildItemCollection)
     {
         if (childItem == target)
         {
             return(true);
         }
         else if (childItem is ITreeFolder)
         {
             //Recursion
             if (IsContainsChildRecursive(childItem as ITreeFolder, target))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Ejemplo n.º 5
0
        private bool MoveSelectedItems(SelectedListItemSet selectedItemSet, NodeTarget target)
        {
            if (target == null)
            {
                return(false);
            }

            ITreeFolder[] selectedFolders = selectedItemSet
                                            .Where(item => item is ITreeFolder)
                                            .Select(item => item as ITreeFolder).ToArray();

            //자신 내부에 이동시도시 Reject
            foreach (ITreeFolder folder in selectedFolders)
            {
                if (folder == target.node)
                {
                    return(false);
                }

                if (IsContainsChildRecursive(folder, target.node))
                {
                    MessageOccured?.Invoke("자신의 하위 폴더로 이동할 수 없습니다.");
                    return(false);
                }
            }

            //정렬
            ITreeItem[] sortedSelectedItems = CollectSelectedItems();

            //이동
            if (target.node is ITreeFolder && target.direction == NodeDirection.Bottom && ((ITreeFolder)target.node).ChildItemCollection.Count > 0)
            {
                target.direction = NodeDirection.InnerTop;
            }
            if (target.direction == NodeDirection.Bottom || target.direction == NodeDirection.InnerTop)
            {
                sortedSelectedItems = sortedSelectedItems.Reverse().ToArray();
            }
            foreach (ITreeItem item in sortedSelectedItems)
            {
                ITreeFolder oldParent = item.ParentItem;
                ITreeFolder newParent = null;
                int         index     = -1;

                FrameworkElement uiItem = (FrameworkElement)item;

                if (oldParent != null)
                {
                    oldParent.ChildItemCollection.Remove(item as UIElement);
                }
                else if (uiItem.Parent != null)
                {
                    ((Panel)uiItem.Parent).Children.Remove(uiItem);
                }

                if (target.direction == NodeDirection.InnerTop)
                {
                    //폴더 내부로
                    newParent = target.node as ITreeFolder;
                    index     = 0;
                }
                else if (target.direction == NodeDirection.InnerBottom)
                {
                    //폴더 내부로
                    newParent = target.node as ITreeFolder;
                    index     = newParent.ChildItemCollection.Count;
                }
                else
                {
                    //아이템 위아래로
                    newParent = target.node.ParentItem;
                    index     = newParent.ChildItemCollection.IndexOf(target.node as UIElement) +
                                (target.direction == NodeDirection.Bottom ? 1 : 0);
                }
                if (AutoApplyItemMove)
                {
                    newParent.ChildItemCollection.Insert(index, item as UIElement);
                }

                item.ParentItem = newParent;

                ItemMoved?.Invoke(item, oldParent, newParent, index);
            }
            return(true);
        }
Ejemplo n.º 6
0
 private MotionFolderItem ToFolderItem(ITreeFolder item)
 {
     return(((MotionFolderItemView)item).Data);
 }