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();
        }
Пример #2
0
        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);
                }
            }
        }