internal static void AddNonMemberItems(WixProjectNode project) { IList <string> files = new List <string>(); IList <string> folders = new List <string>(); // obtain the list of files and folders under the project folder. WixProjectMembers.GetRelativeFileSystemEntries(project.ProjectFolder, null, files, folders); // exclude the items which are the part of the build. WixProjectMembers.ExcludeProjectBuildItems(project, files, folders); WixProjectMembers.AddNonMemberFolderItems(project, folders); WixProjectMembers.AddNonMemberFileItems(project, files); }
/// <summary> /// Toggles the state of Show all files /// </summary> /// <returns>S_OK if it's possible to toggle the state, OLECMDERR_E_NOTSUPPORTED if not</returns> protected internal int ToggleShowAllFiles() { if (this.ProjectMgr == null || this.ProjectMgr.IsClosed) { return((int)OleConstants.OLECMDERR_E_NOTSUPPORTED); } using (WixHelperMethods.NewWaitCursor()) { this.showAllFilesEnabled = !this.showAllFilesEnabled; // toggle the flag if (this.showAllFilesEnabled) { WixProjectMembers.AddNonMemberItems(this); } else { WixProjectMembers.RemoveNonMemberItems(this); } } return(NativeMethods.S_OK); }
/// <summary> /// Excludes the file and folder items from their corresponding maps if they are part of the build. /// </summary> /// <param name="project">The project to modify.</param> /// <param name="fileList">List containing relative files paths.</param> /// <param name="folderList">List containing relative folder paths.</param> private static void ExcludeProjectBuildItems(WixProjectNode project, IList <string> fileList, IList <string> folderList) { if (project.BuildProject.Items == null) { return; // do nothig, just ignore it. } else if (fileList == null && folderList == null) { throw new ArgumentNullException("folderList"); } // we need these maps becuase we need to have both lowercase and actual case path information. // we use lower case paths for case-insesitive search of file entries and actual paths for // creating hierarchy node. if we don't do that, we will end up with duplicate nodes when the // case of path in .wixproj file doesn't match with the actual file path on the disk. IDictionary <string, string> folderMap = null; IDictionary <string, string> fileMap = null; if (folderList != null) { folderMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (string folder in folderList) { folderMap.Add(folder, folder); } } if (fileList != null) { fileMap = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); foreach (string file in fileList) { fileMap.Add(file, file); } } foreach (ProjectItem buildItem in project.BuildProject.Items) { if (folderMap != null && folderMap.Count > 0 && String.Equals(buildItem.ItemType, ProjectFileConstants.Folder, StringComparison.OrdinalIgnoreCase)) { string relativePath = buildItem.EvaluatedInclude; if (Path.IsPathRooted(relativePath)) // if not the relative path, make it relative { relativePath = WixHelperMethods.GetRelativePath(project.ProjectFolder, relativePath); } if (folderMap.ContainsKey(relativePath)) { folderList.Remove(folderMap[relativePath]); // remove it from the actual list. folderMap.Remove(relativePath); } } else if (fileMap != null && fileMap.Count > 0 && WixProjectMembers.IsWixFileItem(buildItem)) { string relativePath = buildItem.EvaluatedInclude; if (Path.IsPathRooted(relativePath)) // if not the relative path, make it relative { relativePath = WixHelperMethods.GetRelativePath(project.ProjectFolder, relativePath); } if (fileMap.ContainsKey(relativePath)) { fileList.Remove(fileMap[relativePath]); // remove it from the actual list. fileMap.Remove(relativePath); } } } }