private void ContextClickOutsideItemsCallback() { GenericMenu g = new GenericMenu(); g.AddItem(new GUIContent("Create Item"), false, () => { TreeViewItem item = m_TreeView.data.root;; var id = m_DataContainer.GetAutoID(); var newItem = new GMCategoryItem(id, 0, item, "New Item"); newItem.SetConfigSource(m_WindowConfigSource); item.AddChild(newItem); m_TreeView.SetSelection(new int[] { newItem.id }, true); m_TreeView.data.RefreshData(); TreeViewSelectionChanged(new int[] { newItem.id }); m_WindowConfigSource.SetConfigDirty(); }); g.ShowAsContext(); }
public void ReparentSelection(TreeViewItem parentItem, TreeViewItem insertAfterItem, List <TreeViewItem> draggedItems, bool aboveFirstItem = false) { if (PrepareDoDrag != null) { PrepareDoDrag(); } //如果insertAfterItem在draggedItems中,剔除draggedItems中insertAfterItem以及之后的item if (aboveFirstItem) { insertAfterItem = m_TreeView.data.root; } int i = draggedItems.IndexOf(insertAfterItem); if (i >= 0) { for (var j = draggedItems.Count - 1; j >= 0; --j) { if (j >= i) { draggedItems.RemoveAt(j); } else { break; } } ReparentSelection(parentItem, insertAfterItem, draggedItems, aboveFirstItem); return; } try { foreach (var item in draggedItems) { var folderItem = item as FolderTreeViewItem; if (folderItem != null) { folderItem.Reparent(parentItem as FolderTreeViewItem); } } foreach (var item in draggedItems) { var folderItem = item as FolderTreeViewItem; if (folderItem != null) { if (folderItem.parent != null) { if (folderItem.IsFolder) { folderItem.parent.children.Remove(item); } else { var parentFolderItem = folderItem.parent as FolderTreeViewItem; parentFolderItem.FileList.Remove(folderItem); } } item.parent = parentItem; } } var folderParentItem = parentItem as FolderTreeViewItem; if (folderParentItem.FileList == null) { folderParentItem.FileList = new List <FolderTreeViewItem>(); } for (int j = 0; j < draggedItems.Count; j++) { var item = draggedItems[j] as FolderTreeViewItem; if (item != null && item.IsFolder) { parentItem.AddChild(item); } else if (item != null && !item.IsFolder) { item.parent = parentItem; folderParentItem.FileList.Add(item); } } var comparator = new AlphanumComparator.AlphanumComparator(); if (folderParentItem.hasChildren) { folderParentItem.children.Sort((obj1, obj2) => { return(comparator.Compare(obj1.displayName, obj2.displayName)); }); } folderParentItem.FileList.Sort((obj1, obj2) => { return(comparator.Compare(obj1.displayName, obj2.displayName)); }); if (EndDragAction != null) { EndDragAction(false); } } catch (Exception e) { Debug.LogError("拖拽操作出错:" + e); if (EndDragAction != null) { EndDragAction(true); } } }