コード例 #1
0
            TreeViewItem EnsureFolderPath(string folderPath, Dictionary <string, TreeViewItem> treeViewFolders, bool initExpandedState)
            {
                //We're in the root folder, so just return the root item as the parent.
                if (folderPath == "")
                {
                    return(m_RootItem);
                }

                // Does folder path exist?
                int          id   = folderPath.GetHashCode();
                TreeViewItem item = TreeViewUtility.FindItem(id, m_RootItem);

                if (item != null)
                {
                    return(item);
                }

                // Add folders as needed
                string[]     splitPath   = folderPath.Split('/');
                string       currentPath = "";
                TreeViewItem currentItem = m_RootItem;
                int          folderDepth = -1; // Will be incremented to the right depth in the loop.

                for (int depth = 0; depth < splitPath.Length; ++depth)
                {
                    string folder = splitPath[depth];
                    if (currentPath != "")
                    {
                        currentPath += '/';
                    }

                    currentPath += folder;

                    // Dont create a 'Assets' folder (we already have that as a hidden root)
                    if (depth == 0 && currentPath == "Assets")
                    {
                        continue;
                    }

                    // Only increment the folder depth if we are past the root "Assets" folder.
                    ++folderDepth;

                    id = currentPath.GetHashCode();

                    TreeViewItem foundItem;
                    if (treeViewFolders.TryGetValue(currentPath, out foundItem))
                    {
                        currentItem = foundItem;
                    }
                    else
                    {
                        // If we do not have a tree view item for this folder we create one
                        var folderItem = new PackageImportTreeViewItem(null, id, folderDepth, currentItem, folder);

                        // Add to children array of the parent
                        currentItem.AddChild(folderItem);
                        currentItem = folderItem;

                        // Auto expand all folder items
                        if (initExpandedState)
                        {
                            m_TreeView.state.expandedIDs.Add(id);
                        }

                        // For faster finding of folders
                        treeViewFolders[currentPath] = folderItem;
                    }
                }

                return(currentItem);
            }
コード例 #2
0
            public override void FetchData()
            {
                int rootDepth = -1; // -1 so its children will have 0 depth

                m_RootItem = new PackageImportTreeViewItem(null, "Assets".GetHashCode(), rootDepth, null, "InvisibleAssetsFolder");

                bool initExpandedState = true;

                if (initExpandedState)
                {
                    m_TreeView.state.expandedIDs.Add(m_RootItem.id);
                }

                ImportPackageItem[] items = m_PackageImportView.packageItems;

                Dictionary <string, TreeViewItem> treeViewFolders = new Dictionary <string, TreeViewItem>();

                for (int i = 0; i < items.Length; i++)
                {
                    var item = items[i];

                    if (PackageImport.HasInvalidCharInFilePath(item.destinationAssetPath))
                    {
                        continue; // Do not add invalid paths (we already warn the user with a dialog in PackageImport.cs)
                    }
                    string filename   = Path.GetFileName(item.destinationAssetPath).ConvertSeparatorsToUnity();
                    string folderPath = Path.GetDirectoryName(item.destinationAssetPath).ConvertSeparatorsToUnity();

                    // Ensure folders. This is for when installed packages have been moved to other folders.

                    TreeViewItem targetFolder;
                    treeViewFolders.TryGetValue(folderPath, out targetFolder);

                    if (targetFolder == null)
                    {
                        targetFolder = EnsureFolderPath(folderPath, treeViewFolders, initExpandedState);
                    }

                    // Add file to folder
                    if (targetFolder != null)
                    {
                        int id      = item.destinationAssetPath.GetHashCode();
                        var newItem = new PackageImportTreeViewItem(item, id, targetFolder.depth + 1, targetFolder, filename);
                        targetFolder.AddChild(newItem);

                        if (initExpandedState)
                        {
                            m_TreeView.state.expandedIDs.Add(id);
                        }

                        // We need to ensure that the folder is available for
                        // EnsureFolderPath on subsequent iterations.
                        if (item.isFolder)
                        {
                            treeViewFolders[item.destinationAssetPath] = newItem;
                        }
                    }
                }

                if (initExpandedState)
                {
                    m_TreeView.state.expandedIDs.Sort();
                }
            }