Ejemplo n.º 1
0
 private void DuplicateItems()
 {
     if (m_TreeView.state.selectedIDs != null &&
         m_TreeView.state.selectedIDs.Count > 0)
     {
         if (needUndo)
         {
             Undo.RecordObject(m_TreeItemContainer, "Duplicate Items");
         }
         m_TreeView.EndNameEditing(true);
         var idList = new List <int>();
         foreach (var id in m_TreeView.state.selectedIDs)
         {
             var item    = m_TreeView.data.FindItem(id);
             var newItem =
                 JsonReader.Deserialize(
                     JsonWriter.Serialize(item, new JsonWriterSettings {
                 MaxDepth = int.MaxValue
             }),
                     true) as TreeViewItem;
             item.parent.AddChild(newItem);
             UpdateItemInfo(newItem, idList, true);
         }
         m_TreeView.SetSelection(idList.ToArray(), true);
         m_TreeView.data.RefreshData();
         SetDirty();
     }
 }
Ejemplo n.º 2
0
        private void DuplicateItems()
        {
            if (m_TreeView.state.selectedIDs != null &&
                m_TreeView.state.selectedIDs.Count > 0)
            {
                List <int> idList = new List <int>();
                try
                {
                    m_TreeView.EndNameEditing(true);
                    foreach (var id in m_TreeView.state.selectedIDs)
                    {
                        if (id == m_TreeView.data.root.id)
                        {
                            continue;
                        }

                        var item    = m_TreeView.data.FindItem(id);
                        var newItem = JsonReader.Deserialize(JsonWriter.Serialize(item, new JsonWriterSettings()
                        {
                            MaxDepth = Int32.MaxValue
                        }), true) as FolderTreeViewItem;
                        var newPath = EditorFileUtility.GetNewFolder(newItem.Path);

                        FileUtil.CopyFileOrDirectory(newItem.Path, newPath);
                        newItem.id = m_TreeItemContainer.GetAutoID();
                        idList.Add(newItem.id);
                        newItem.Path        = newPath;
                        newItem.displayName = new DirectoryInfo(newPath).Name;
                        item.parent.AddChild(newItem);

                        newItem.FileList = null;
                        newItem.children = null;

                        var comparator = new AlphanumComparator.AlphanumComparator();
                        item.parent.children.Sort((viewItem, treeViewItem) =>
                        {
                            return(comparator.Compare(viewItem.displayName, treeViewItem.displayName));
                        });
                    }
                }
                catch (Exception e)
                {
                    Debug.LogError("复制item出错:" + e);
                }
                finally
                {
                    m_TreeItemContainer.UpdateValidItems();
                    m_TreeView.SetSelection(idList.ToArray(), true);
                    m_TreeView.data.RefreshData();
                    SetDirty();

                    if (DuplicateItemsDone != null)
                    {
                        DuplicateItemsDone();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void ContextClickItemCallback(int itemId)
        {
            GenericMenu g = new GenericMenu();

            g.AddItem(new GUIContent("Create Item"), false, () =>
            {
                var item    = m_TreeView.data.FindItem(itemId);
                var id      = m_DataContainer.GetAutoID();
                var newItem = new GMCategoryItem(id, 0, item, "New Item");
                newItem.SetConfigSource(WindowConfigSource);

                item.AddChild(newItem);
                m_TreeView.SetSelection(new int[] { newItem.id }, true);
                m_TreeView.data.RefreshData();

                TreeViewSelectionChanged(new int[] { newItem.id });
                WindowConfigSource.SetConfigDirty();
            });

            g.ShowAsContext();
            Event.current.Use();
        }
        private void ContextClickItemCallback(int itemId)
        {
            GenericMenu g = new GenericMenu();

            g.AddItem(new GUIContent("Create Item"), false, () =>
            {
                Undo.RecordObject(m_DataContainer, "Create Item");
                var item    = m_TreeView.data.FindItem(itemId);
                var id      = m_DataContainer.GetAutoID();
                var newItem = new TreeViewItem(id, item.depth + 1, item, "New Item");
                newItem.SetConfigSource(WindowConfigSource);
                item.AddChild(newItem);
                m_TreeView.SetSelection(new int[] { newItem.id }, true);
                m_TreeView.data.RefreshData();
            });

            g.AddItem(new GUIContent("Ping Item"), false, () =>
            {
                var item = m_TreeView.data.FindItem(m_TreeView.state.selectedIDs[0]);
                m_TreeView.Frame(item.id, true, true);
            });
            g.ShowAsContext();
            Event.current.Use();
        }
        public FolderGridViewGroup(ViewGroupManager owner, EditorWindowConfigSource configSource, string stateConfigName, string containerConfigName, string dragId = null) : base(owner)
        {
            m_ConfigSource = configSource;

            m_ItemDataSource = new ItemDataSource();
            m_SearchBar      = new SearchBar(owner);
            m_SearchBar.UpOrDownArrowPressedAction += SearchBarUpOrDownArrowPressedAction;
            m_SearchBar.OnTextChangedAction        += (str) => UpdateItemsBySearchText();

            dragId = dragId != null ? dragId : GetHashCode().ToString();
            m_FolderTreeViewGroup = new FolderTreeViewGroup(owner, configSource, stateConfigName, containerConfigName, dragId);

            m_GridViewDataSource = new GridViewDataSource();
            var layout      = new GenericGridLayouter(m_GridViewDataSource);
            var viewHandler = new FolderGridViewHandler(layout.DataSource);

            viewHandler.TreeViewDragging = m_FolderTreeViewGroup.GetTreeViewDragging();
            m_GridView = new GridView(owner, layout, viewHandler);
            m_GridView.KeyboardCallback         += ListAreaKeyboardCallback;
            m_GridView.ItemExpandedAction       += ItemExpandedAction;
            m_GridView.BeginRenameAction        += ItemBeginRenameAction;
            m_GridView.RenameEndAction          += ItemRenameEndAction;
            m_GridView.ItemDoubleClickAction    += ItemDoubleClick;
            m_GridView.ItemSelectedAction       += GridViewItemSelected;
            m_GridView.ViewHandler.GenericDragId = dragId;
            m_GridView.GridSizeChangedAction    += (size) =>
            {
                m_BottomBar.Value = size;
            };

            m_BreadcrumbBar = new BreadcrumbBar(owner);
            m_BreadcrumbBar.ShowFolderContentsAction += (id) =>
            {
                m_TreeView.SetSelection(new int[] { id }, false);
                UpdateBreadcrumbBarContents();
                UpdateGridViewContent();
            };

            m_BottomBar                       = new BottomBar(owner);
            m_BottomBar.Value                 = m_GridView.GridSize;
            m_BottomBar.MinValue              = m_GridView.ViewLayouter.LayoutParams.MinGridSize;
            m_BottomBar.MaxValue              = m_GridView.ViewLayouter.LayoutParams.MaxGridSize;
            m_BottomBar.OnValueChangedAction += (size) =>
            {
                m_GridView.GridSize = size;
            };

            GridViewDeleteAction += DeleteGridItems;

            m_TreeView = m_FolderTreeViewGroup.GetTreeView();
            m_BreadcrumbBar.FolderTreeView = m_TreeView;
            m_FolderTreeViewGroup.GetFolderTreeViewGUI().RenameEndAction += (item, name) =>
            {
                UpdateBreadcrumbBarContents();
            };

            m_HorizontalSplitLine = new HorizontalSplitLine(m_SplitLineStartPosX, HorizontalSplitLineMinX);
            m_HorizontalSplitLine.PositionChangedAction += RefreshSplittedSelectedPath;
            m_HorizontalSplitLine.ConfigSource           = configSource;
            m_ItemDataSource.SetConfigSource(configSource);

            m_TreeView.selectionChangedCallback += FolderTreeViewSelectionChanged;
            m_FolderTreeViewGroup.GetTreeViewDragging().EndDragAction += (hasError) =>
            {
                UpdateGridViewContent();
            };
            m_FolderTreeViewGroup.DuplicateItemsDone += UpdateGridViewContent;

            GetDataContainer().UpdateItemChangedAction += () =>
            {
                UpdateGridViewContent();
                CheckBottomBarItemValidity();
                UpdateBreadcrumbBarContents();
            };

            DuplicateItemsAction += DuplicateItemGridView;
        }