private static void AddNonMemberFileItems(ProjectNode project, IEnumerable <string> fileList) { ErrorHelper.ThrowIsNull(fileList, "fileList"); foreach (string fileKey in fileList) { HierarchyNode parentNode = project; string[] pathItems = fileKey.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }); if (StringComparer.OrdinalIgnoreCase.Equals(fileKey, project.ProjectFile)) { continue; } NemerleFolderNode 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 NemerleFolderNode; 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(ProjectNode project, IEnumerable <string> folderList) { ErrorHelper.ThrowIsNull(folderList, "folderList"); foreach (string folderKey in folderList) { HierarchyNode parentNode = project; string[] folders = folderKey.Split(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); NemerleFolderNode 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 NemerleFolderNode; 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(); } } }
/// <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) { ErrorHelper.ThrowIsNull(node, "node"); // use stack to make sure all parent folders are included in the project. Collections.Stack <NemerleFolderNode> stack = new Collections.Stack <NemerleFolderNode>(); // Find out the parent folder nodes if any. NemerleFolderNode parentFolderNode = node.Parent as NemerleFolderNode; while (parentFolderNode != null && parentFolderNode.IsNonMemberItem) { stack.Push(parentFolderNode); parentFolderNode.CreateDirectory(); // ensure that the folder is there on file system parentFolderNode = parentFolderNode.Parent as NemerleFolderNode; } // include all parent folders in the project. while (stack.Count > 0) { NemerleFolderNode folderNode = stack.Pop(); ((IProjectSourceNode)folderNode).IncludeInProject(false); } }
// ========================================================================================= // Constructors // ========================================================================================= /// <summary> /// Initializes a new instance of the <see cref="NemerleFolderNodeProperties"/> class. /// </summary> /// <param name="node">The node that contains the properties to expose via the Property Browser.</param> public NemerleFolderNodeProperties(NemerleFolderNode node) : base(node) { }