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(); } }
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(); } } } }
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; }