/// <summary> /// Walks up in the hierarchy and ensures that all parent folder nodes of 'node' are included in the project. /// </summary> /// <param name="node">Start hierarchy node.</param> internal static void EnsureParentFolderIncluded(HierarchyNode node) { if (node == null) { throw new ArgumentNullException("node"); } // use stack to make sure all parent folders are included in the project. Stack <WixFolderNode> stack = new Stack <WixFolderNode>(); // Find out the parent folder nodes if any. WixFolderNode parentFolderNode = node.Parent as WixFolderNode; while (parentFolderNode != null && parentFolderNode.IsNonMemberItem) { stack.Push(parentFolderNode); parentFolderNode.CreateDirectory(); // ensure that the folder is there on file system parentFolderNode = parentFolderNode.Parent as WixFolderNode; } // include all parent folders in the project. while (stack.Count > 0) { WixFolderNode folderNode = stack.Pop(); ((IProjectSourceNode)folderNode).IncludeInProject(false); } }
private static void AddNonMemberFileItems(WixProjectNode project, IList <string> fileList) { if (fileList == null) { throw new ArgumentNullException("fileList"); } foreach (string fileKey in fileList) { HierarchyNode parentNode = project; string[] pathItems = fileKey.Split(new char[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }); if (String.Equals(fileKey, project.ProjectFile, StringComparison.OrdinalIgnoreCase)) { continue; } WixFolderNode topFolderNode = null; foreach (string fileOrDir in pathItems) { string childNodeId = Path.Combine(parentNode.VirtualNodeName, fileOrDir); FileInfo fileOrDirInfo = new FileInfo(Path.Combine(project.ProjectFolder, childNodeId)); if ((fileOrDirInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { break; } HierarchyNode childNode = parentNode.FindChild(childNodeId); if (childNode == null) { if (topFolderNode == null) { topFolderNode = parentNode as WixFolderNode; if (topFolderNode != null && (!topFolderNode.IsNonMemberItem) && topFolderNode.IsExpanded) { topFolderNode = null; } } ProjectElement element = new ProjectElement(project, null, true); element.Rename(childNodeId); element.SetMetadata(ProjectFileConstants.Name, childNodeId); childNode = project.CreateFileNode(element); parentNode.AddChild(childNode); break; } parentNode = childNode; } if (topFolderNode != null) { topFolderNode.CollapseFolder(); } } }
private static void AddNonMemberFolderItems(WixProjectNode project, IList <string> folderList) { if (folderList == null) { throw new ArgumentNullException("folderList"); } foreach (string folderKey in folderList) { HierarchyNode parentNode = project; string[] folders = folderKey.Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); WixFolderNode topFolderNode = null; foreach (string folder in folders) { string childNodeId = Path.Combine(parentNode.VirtualNodeName, folder); FileInfo folderInfo = new FileInfo(Path.Combine(project.ProjectFolder, childNodeId)); if ((folderInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { break; } HierarchyNode childNode = parentNode.FindChild(childNodeId); if (childNode == null) { if (topFolderNode == null) { topFolderNode = parentNode as WixFolderNode; if (topFolderNode != null && (!topFolderNode.IsNonMemberItem) && topFolderNode.IsExpanded) { topFolderNode = null; } } ProjectElement element = new ProjectElement(project, null, true); childNode = project.CreateFolderNode(childNodeId, element); parentNode.AddChild(childNode); } parentNode = childNode; } if (topFolderNode != null) { topFolderNode.CollapseFolder(); } } }
// ========================================================================================= // Constructors // ========================================================================================= /// <summary> /// Initializes a new instance of the <see cref="WixFolderNodeProperties"/> class. /// </summary> /// <param name="node">The node that contains the properties to expose via the Property Browser.</param> public WixFolderNodeProperties(WixFolderNode node) : base(node) { }
// ========================================================================================= // Constructors // ========================================================================================= /// <summary> /// Initializes a new instance of the <see cref="WixFolderNodeProperties"/> class. /// </summary> /// <param name="node">The node that contains the properties to expose via the Property Browser.</param> public WixFolderNodeNonMemberProperties(WixFolderNode node) : base(node) { }