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); }
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); }
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); }
//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); }
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); }
private MotionFolderItem ToFolderItem(ITreeFolder item) { return(((MotionFolderItemView)item).Data); }