Beispiel #1
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();
                    }
                }
            }
        }
Beispiel #2
0
        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));
            });
        }
Beispiel #3
0
        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();
                }
            }
        }
Beispiel #5
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);
                }
            }
        }
Beispiel #6
0
        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);
                }
            }
        }
Beispiel #7
0
        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);
            }
        }