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 SortGridViewItem() { var comparator = new AlphanumComparator.AlphanumComparator(); var gridViewDataSource = m_FolderGridViewGroup.GetGridViewDataSource(); gridViewDataSource.ItemList.Sort((item, gridItem) => { var folderItem1 = item as FolderGridItem; var folderItem2 = gridItem as FolderGridItem; if (folderItem1.IsFolder != folderItem2.IsFolder) { return(folderItem2.IsFolder.CompareTo(folderItem1.IsFolder)); } return(comparator.Compare(item.DisplayName, gridItem.DisplayName)); }); }
public void RenameItem(TreeViewItem item, string name) { var result = (item as FolderTreeViewItem).Rename(name); if (!result) { return; } item.displayName = name; if (item.parent != null && item.parent.hasChildren) { var comparator = new AlphanumComparator.AlphanumComparator(); item.parent.children.Sort((viewItem, treeViewItem) => { return(comparator.Compare(viewItem.displayName, treeViewItem.displayName)); }); m_TreeView.data.RefreshData(); } }
private void DuplicateItemGridView() { var selectedIdList = m_GridView.GetSelection(); if (selectedIdList.Length == 0) { return; } List <int> idList = new List <int>(); try { m_TreeView.EndNameEditing(true); m_GridView.EndRename(false); foreach (var id in selectedIdList) { var item = m_GridViewDataSource.GetItemByIndex(m_GridViewDataSource.GetItemIndexByItemId(id)) as FolderGridItem; FolderTreeViewItem treeItem = null; FolderTreeViewItem parentTreeItem = null; if (item.IsFolder) { treeItem = m_TreeView.FindItem(item.Id) as FolderTreeViewItem; parentTreeItem = treeItem.parent as FolderTreeViewItem; } else { parentTreeItem = m_TreeView.FindItem(item.ParentId) as FolderTreeViewItem; foreach (var child in parentTreeItem.FileList) { if (child.id == item.Id) { treeItem = child; break; } } } if (item.IsFolder) { var newPath = EditorFileUtility.GetNewFolder(item.Path); FileUtil.CopyFileOrDirectory(item.Path, newPath); var newItem = JsonReader.Deserialize(JsonWriter.Serialize(treeItem, new JsonWriterSettings() { MaxDepth = Int32.MaxValue }), true) as FolderTreeViewItem; newItem.id = m_FolderTreeViewGroup.GetDataContainer().GetAutoID(); newItem.FileList = null; newItem.children = null; idList.Add(newItem.id); newItem.Path = newPath; newItem.displayName = new DirectoryInfo(newPath).Name; var newGridItem = JsonReader.Deserialize(JsonWriter.Serialize(item, new JsonWriterSettings() { MaxDepth = Int32.MaxValue }), item.GetType(), true) as FolderGridItem; newGridItem.Id = newItem.id; newGridItem.Path = newItem.Path; newGridItem.DisplayName = newItem.displayName; m_GridViewDataSource.ItemList.Add(newGridItem); parentTreeItem.AddChild(newItem); var comparator = new AlphanumComparator.AlphanumComparator(); parentTreeItem.children.Sort((viewItem, treeViewItem) => { return(comparator.Compare(viewItem.displayName, treeViewItem.displayName)); }); } else { var newPath = EditorFileUtility.GetNewFile(item.Path); FileUtil.CopyFileOrDirectory(item.Path, newPath); var newItem = JsonReader.Deserialize(JsonWriter.Serialize(treeItem, new JsonWriterSettings() { MaxDepth = Int32.MaxValue }), true) as FolderTreeViewItem; newItem.id = m_FolderTreeViewGroup.GetDataContainer().GetAutoID(); idList.Add(newItem.id); newItem.Path = newPath; newItem.displayName = Path.GetFileNameWithoutExtension(newPath); parentTreeItem.FileList.Add(newItem); var newGridItem = JsonReader.Deserialize(JsonWriter.Serialize(item, new JsonWriterSettings() { MaxDepth = Int32.MaxValue }), item.GetType(), true) as FolderGridItem; newGridItem.Id = newItem.id; newGridItem.Path = newItem.Path; newGridItem.DisplayName = newItem.displayName; m_GridViewDataSource.ItemList.Add(newGridItem); } } m_GridView.SetSelection(idList.ToArray(), false); } catch (Exception e) { Debug.LogError("复制item出错:" + e); } finally { m_FolderTreeViewGroup.GetDataContainer().UpdateValidItems(); m_TreeView.data.RefreshData(); UpdateGridViewContent(); if (m_ConfigSource != null) { m_ConfigSource.SetConfigDirty(); } } }
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); } } }
protected void UpdateItemInfo(FolderTreeViewItem item, ref bool change) { if (item.hasChildren) { for (int i = item.children.Count - 1; i >= 0; --i) { var child = item.children[i] as FolderTreeViewItem; if (child == null || !Directory.Exists(child.Path) || !child.Path.StartsWith(item.Path)) { change = true; item.children.RemoveAt(i); } } } if (item.FileList != null) { for (int i = item.FileList.Count - 1; i >= 0; --i) { var child = item.FileList[i]; if (!File.Exists(child.Path)) { change = true; item.FileList.RemoveAt(i); } } } DirectoryInfo dirInfo = new DirectoryInfo(item.Path); foreach (var di in dirInfo.GetDirectories()) { if ((di.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } if (item.hasChildren) { bool exist = false; foreach (var childItem in item.children) { var folderItem = childItem as FolderTreeViewItem; if (folderItem != null && folderItem.Path == di.FullName) { exist = true; break; } } if (exist) { continue; } } var child = new FolderTreeViewItem(); child.Path = di.FullName.Replace("/", "\\");; child.IsFolder = true; child.id = GetAutoID(); child.displayName = di.Name; child.parent = item; child.SetConfigSource(ConfigSource); item.AddChild(child); change = true; } foreach (var fi in dirInfo.GetFiles()) { if ((fi.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } foreach (var extName in ExtNames) { if (extName.ToLower() == fi.Extension.ToLower()) { if (item.FileList != null) { bool exist = false; foreach (var childItem in item.FileList) { var fileItem = childItem as FolderTreeViewItem; if (fileItem != null && fileItem.Path == fi.FullName) { exist = true; break; } } if (exist) { break; } } var child = new FolderTreeViewItem(); child.Path = fi.FullName.Replace("/", "\\");; child.IsFolder = false; child.id = GetAutoID(); child.displayName = Path.GetFileNameWithoutExtension(fi.Name); child.parent = item; child.SetConfigSource(ConfigSource); if (item.FileList == null) { item.FileList = new List <FolderTreeViewItem>(); } item.FileList.Add(child); change = true; break; } } } if (item.hasChildren) { var comparator = new AlphanumComparator.AlphanumComparator(); item.children.Sort((viewItem, treeViewItem) => { return(comparator.Compare(viewItem.displayName, treeViewItem.displayName)); }); } if (item.hasChildren) { foreach (var child in item.children) { UpdateItemInfo(child as FolderTreeViewItem, ref change); } } }
public static void GetCurrentFolderInfo(List <string> pathList, List <object> infoList, string prefix, string folderPath, string extName) { List <ItemDirInfo> dirList = new List <ItemDirInfo>(); DirectoryInfo dirInfo = new DirectoryInfo(folderPath); foreach (var di in dirInfo.GetDirectories()) { if ((di.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } dirList.Add(new ItemDirInfo() { fullPath = di.FullName, prefix = string.IsNullOrEmpty(prefix) ? di.Name : prefix + "/" + di.Name, }); } var comparator = new AlphanumComparator.AlphanumComparator(); dirList.Sort((obj1, obj2) => { return(comparator.Compare(obj1.prefix, obj2.prefix)); }); foreach (var dir in dirList) { GetCurrentFolderInfo(pathList, infoList, dir.prefix, dir.fullPath, extName); } List <ItemFileInfo> fileList = new List <ItemFileInfo>(); foreach (var fi in dirInfo.GetFiles()) { if ((fi.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } if (extName.ToLower() == fi.Extension.ToLower()) { var path = string.IsNullOrEmpty(prefix) ? Path.GetFileNameWithoutExtension(fi.Name) : prefix + "/" + Path.GetFileNameWithoutExtension(fi.Name); var pathWithExt = string.IsNullOrEmpty(prefix) ? Path.GetFileName(fi.Name) : prefix + "/" + Path.GetFileName(fi.Name); fileList.Add(new ItemFileInfo() { path = path, pathWithExt = pathWithExt }); break; } } fileList.Sort((obj1, obj2) => { return(comparator.Compare(obj1.path, obj2.path)); }); foreach (var file in fileList) { pathList.Add(file.path); infoList.Add(file.pathWithExt); } }