コード例 #1
0
        //=====================================================================

        /// <summary>
        /// This can be called after all additional content has been added
        /// to create the <b>Folder</b> build items in the project.
        /// </summary>
        protected void CreateFolderItems()
        {
            List <string> buildActions = new List <string>(Enum.GetNames(
                                                               typeof(BuildAction)));
            HashSet <string> folderNames = new HashSet <string>();

            buildActions.Remove("Folder");

            foreach (ProjectItem item in project.MSBuildProject.AllEvaluatedItems)
            {
                if (buildActions.Contains(item.ItemType))
                {
                    string name = Path.GetDirectoryName(item.EvaluatedInclude);

                    if (name.Length > 0)
                    {
                        folderNames.Add(name);
                    }
                }
            }

            foreach (string folder in folderNames)
            {
                project.AddFolderToProject(folder);
            }
        }
コード例 #2
0
        //=====================================================================

        /// <summary>
        /// This can be called after all additional content has been added
        /// to create the <b>Folder</b> build items in the project.
        /// </summary>
        protected void CreateFolderItems()
        {
            List <string> buildActions = new List <string>(Enum.GetNames(typeof(BuildAction)));
            List <string> folderNames  = new List <string>();
            string        name;

            buildActions.Remove("Folder");

            foreach (ProjectItem item in project.MSBuildProject.AllEvaluatedItems)
            {
                if (buildActions.IndexOf(item.ItemType) != -1)
                {
                    if (!Path.IsPathRooted(item.EvaluatedInclude))
                    {
                        name = Path.GetDirectoryName(item.EvaluatedInclude);
                    }
                    else
                    {
                        // Convert fully qualified paths to relative paths
                        name = FolderPath.TerminatePath(Path.GetDirectoryName(item.EvaluatedInclude));

                        // Ignore fully qualified paths outside of the project folder
                        if (!name.StartsWith(projectFolder, StringComparison.OrdinalIgnoreCase))
                        {
                            continue;
                        }

                        name = name.Substring(projectFolder.Length);
                    }

                    if (name.Length > 0 && folderNames.IndexOf(name) == -1)
                    {
                        folderNames.Add(name);
                    }
                }
            }

            foreach (string folder in folderNames)
            {
                project.AddFolderToProject(folder);
            }
        }
コード例 #3
0
ファイル: FileTree.cs プロジェクト: sharwell/SHFB-unofficial
        //=====================================================================

        /// <summary>
        /// Load the tree with the folder and file items
        /// </summary>
        /// <param name="files">The folder and file build items from the
        /// project</param>
        public void LoadTree(Collection <FileItem> files)
        {
            SortedDictionary <string, FileItem> fileItems =
                new SortedDictionary <string, FileItem>();
            List <string> folderNames       = new List <string>(),
                          additionalFolders = new List <string>();
            SandcastleProject project       = null;
            FileItem          fileItem;
            TreeNode          root, itemNode;

            TreeNode[] matches;
            string     name;

            string[] parts;

            if (files.Count > 0)
            {
                project = files[0].ProjectElement.Project;
            }

            try
            {
                treeView.SuspendLayout();

                // First, get a list of all folders and files in sorted order
                foreach (FileItem item in files)
                {
                    name = item.Link.PersistablePath;

                    // Resolve MSBuild and environment variable references
                    if (name.IndexOf("$(", StringComparison.Ordinal) != -1 || name.IndexOf('%') != -1)
                    {
                        name = FilePath.AbsoluteToRelativePath(item.Link.BasePath, item.Link);
                    }

                    // Ignore duplicate items if any are found
                    if (!fileItems.ContainsKey(name))
                    {
                        fileItems.Add(name, item);

                        if (item.BuildAction != BuildAction.Folder)
                        {
                            name = Path.GetDirectoryName(name);

                            if (name.Length != 0)
                            {
                                name = FolderPath.TerminatePath(name);
                            }
                        }
                        else
                        {
                            name = FolderPath.TerminatePath(name);
                        }

                        if (folderNames.IndexOf(name) == -1)
                        {
                            folderNames.Add(name);

                            // Note all paths leading up to this item as well
                            parts = name.Split('\\');

                            name = String.Empty;

                            for (int idx = 0; idx < parts.Length - 2; idx++)
                            {
                                name += parts[idx] + @"\";

                                if (additionalFolders.IndexOf(name) == -1)
                                {
                                    additionalFolders.Add(name);
                                }
                            }
                        }
                    }
                }

                foreach (string folder in additionalFolders)
                {
                    if (folderNames.IndexOf(folder) == -1)
                    {
                        folderNames.Add(folder);
                    }
                }

                folderNames.Sort();

                // Create a tree node hierarchy for all folders
                foreach (string folder in folderNames)
                {
                    // Ignore the root folder
                    if (folder.Length == 0)
                    {
                        continue;
                    }

                    name = folder.Substring(0, folder.Length - 1);
                    root = treeView.Nodes[0];

                    // Ignore it if the folder is already present
                    if (treeView.Nodes.Find(folder, true).Length != 0)
                    {
                        continue;
                    }

                    if (name.IndexOf('\\') != -1)
                    {
                        matches = treeView.Nodes.Find(name.Substring(0,
                                                                     name.LastIndexOf('\\') + 1), true);

                        if (matches.Length == 1)
                        {
                            root = matches[0];
                            name = name.Substring(root.Name.Length);
                        }
                    }

                    fileItems.TryGetValue(folder, out fileItem);

                    // Add a folder node if one doesn't exist
                    if (fileItem == null)
                    {
                        fileItem = project.AddFolderToProject(folder);
                    }

                    itemNode      = new TreeNode(name);
                    itemNode.Name = folder;
                    itemNode.Tag  = new NodeData(BuildAction.Folder, fileItem,
                                                 null);
                    itemNode.ImageIndex = itemNode.SelectedImageIndex =
                        (int)NodeIcon.GeneralFolder;

                    AddNode(root.Nodes, itemNode);
                }

                // Add each file node in the appropriate folder node
                foreach (string key in fileItems.Keys)
                {
                    name     = Path.GetDirectoryName(key);
                    fileItem = fileItems[key];

                    if (fileItem.BuildAction == BuildAction.Folder)
                    {
                        continue;
                    }

                    // Ignore it if the file is already present
                    if (treeView.Nodes.Find(key, true).Length != 0)
                    {
                        continue;
                    }

                    if (name.Length != 0)
                    {
                        name = FolderPath.TerminatePath(name);
                    }

                    matches = treeView.Nodes.Find(name, true);

                    if (matches.Length == 1)
                    {
                        root = matches[0];
                    }
                    else
                    {
                        root = treeView.Nodes[0];
                    }

                    itemNode      = new TreeNode(Path.GetFileName(key));
                    itemNode.Name = key;
                    itemNode.Tag  = new NodeData(fileItem.BuildAction,
                                                 fileItem, null);
                    itemNode.ImageIndex = itemNode.SelectedImageIndex =
                        (int)NodeIconFromFilename(key);

                    AddNode(root.Nodes, itemNode);
                }
            }
            finally
            {
                treeView.ResumeLayout();
            }
        }