private static async Task <SolutionModelBase> BuildCurrentNodeAsync(SolutionModelBase parent, ProjectItem projectItem) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); switch (projectItem.Kind) { case FileKind: return(new FileModel(parent, projectItem)); case ProjectFolder: return(new ProjectFolderModel(parent, projectItem)); case SubProjectKind: if (projectItem.SubProject != null) { if (projectItem.SubProject.CodeModel != null) { return(new ProjectModel(parent, projectItem.SubProject)); } return(new SolutionFolderModel(parent, projectItem.SubProject)); } return(new FileModel(parent, projectItem)); case MiscellaneousFilesProjectKind: return(null); default: throw new ArgumentException($"Project item kind {projectItem.Kind} is not supported for item {projectItem.Name}."); } }
public SolutionItemViewModel(SolutionModelBase item, SolutionItemViewModel parent) { this.Item = item; this.Parent = parent; this.Children = new ObservableCollection <SolutionItemViewModel>(); foreach (var child in item.Children.OrderBy(c => c.SortOrder).ThenBy(c => c.Name)) { this.Children.Add(new SolutionItemViewModel(child, this)); } }
public static async Task <SolutionModelBase> BuildHierarchyTreeDownAsync(SolutionModelBase parent, ProjectItem projectItem) { var current = await BuildCurrentNodeAsync(parent, projectItem); if (current != null) { await current.IterateChildrenAsync(); } return(current); }
private static async Task <SolutionModelBase> BuildHierarchyPathUpAsync(ProjectItem projectItem) { SolutionModelBase parent = null; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var parentItem = projectItem.Collection.Parent; if (parentItem != null) { parent = await BuildHierarchyPathUpAsync(parentItem); } return(await BuildCurrentNodeAsync(parent, projectItem)); }
private static async Task <SolutionModelBase> BuildCurrentNodeAsync(SolutionModelBase parent, Project project) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); switch (project.Kind) { case ProjectKind: return(new ProjectModel(parent, project)); case SolutionFolderKind: return(new SolutionFolderModel(parent, project)); case MiscellaneousFilesProjectKind: return(null); default: throw new ArgumentException($"Project kind {project.Kind} is not supported for project {project.Name}."); } }
private static async Task <SolutionModelBase> BuildHierarchyPathUpAsync(Project project) { SolutionModelBase parent = null; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); var parentProject = project.ParentProjectItem; if (parentProject != null) { if (parentProject.Kind == SubProjectKind) { parent = await BuildHierarchyPathUpAsync(parentProject.Collection.Parent); } else { parent = await BuildHierarchyPathUpAsync(parentProject); } } return(await BuildCurrentNodeAsync(parent, project)); }