internal static string ProjectImageMonikerDebugDisplay(ProjectImageMoniker moniker) => DebugDisplay(moniker.Guid, moniker.Id);
/// <inheritdoc /> public async Task <IProjectTree> BuildTreeAsync( IProjectTree dependenciesTree, IDependenciesSnapshot snapshot, CancellationToken cancellationToken = default) { // Keep a reference to the original tree to return in case we are cancelled. IProjectTree originalTree = dependenciesTree; bool hasSingleTarget = snapshot.DependenciesByTargetFramework.Count(x => !x.Key.Equals(TargetFramework.Any)) == 1; var currentTopLevelNodes = new List <IProjectTree>(); if (hasSingleTarget) { await BuildSingleTargetTreeAsync(); } else { await BuildMultiTargetTreeAsync(); } if (cancellationToken.IsCancellationRequested) { return(originalTree); } dependenciesTree = CleanupOldNodes(dependenciesTree, currentTopLevelNodes); ProjectImageMoniker rootIcon = _viewModelFactory.GetDependenciesRootIcon(snapshot.HasVisibleUnresolvedDependency).ToProjectSystemType(); return(dependenciesTree.SetProperties(icon: rootIcon, expandedIcon: rootIcon)); async Task BuildSingleTargetTreeAsync() { foreach ((ITargetFramework _, ITargetedDependenciesSnapshot targetedSnapshot) in snapshot.DependenciesByTargetFramework) { if (cancellationToken.IsCancellationRequested) { return; } dependenciesTree = await BuildSubTreesAsync( rootNode : dependenciesTree, snapshot.ActiveTargetFramework, targetedSnapshot, RememberNewNodes); } } async Task BuildMultiTargetTreeAsync() { foreach ((ITargetFramework targetFramework, ITargetedDependenciesSnapshot targetedSnapshot) in snapshot.DependenciesByTargetFramework) { if (cancellationToken.IsCancellationRequested) { return; } if (targetFramework.Equals(TargetFramework.Any)) { dependenciesTree = await BuildSubTreesAsync( rootNode : dependenciesTree, snapshot.ActiveTargetFramework, targetedSnapshot, RememberNewNodes); } else { IProjectTree? node = dependenciesTree.FindChildWithCaption(targetFramework.FriendlyName); bool shouldAddTargetNode = node == null; IDependencyViewModel targetViewModel = _viewModelFactory.CreateTargetViewModel(targetedSnapshot); node = CreateOrUpdateNode( node, targetViewModel, browseObjectProperties: null, isProjectItem: false, additionalFlags: ProjectTreeFlags.Create(ProjectTreeFlags.Common.BubbleUp)); node = await BuildSubTreesAsync( rootNode : node, snapshot.ActiveTargetFramework, targetedSnapshot, CleanupOldNodes); dependenciesTree = shouldAddTargetNode ? dependenciesTree.Add(node).Parent : node.Parent; currentTopLevelNodes.Add(node); } } } IProjectTree RememberNewNodes(IProjectTree rootNode, IEnumerable <IProjectTree> currentNodes) { if (currentNodes != null) { currentTopLevelNodes.AddRange(currentNodes); } return(rootNode); } }
public IProjectItemTree SetIcon(ProjectImageMoniker icon) { throw new NotImplementedException(); }
IProjectItemTree IProjectItemTree.SetProperties(string caption, string filePath, IRule browseObjectProperties, ProjectImageMoniker icon, ProjectImageMoniker expandedIcon, bool?visible, ProjectTreeFlags?flags, IProjectPropertiesContext context, IPropertySheet propertySheet, bool?isLinked, bool resetFilePath, bool resetBrowseObjectProperties, bool resetIcon, bool resetExpandedIcon) { throw new NotImplementedException(); }
public IProjectTree SetExpandedIcon(ProjectImageMoniker expandedIcon) { return(null); }
public IProjectTree SetIcon(ProjectImageMoniker icon) { return(null); }
public IProjectTree2 SetProperties(string caption = null, string filePath = null, IRule browseObjectProperties = null, ProjectImageMoniker icon = null, ProjectImageMoniker expandedIcon = null, bool?visible = null, ProjectTreeFlags?flags = null, IProjectPropertiesContext context = null, IPropertySheet propertySheet = null, bool?isLinked = null, bool resetFilePath = false, bool resetBrowseObjectProperties = false, bool resetIcon = false, bool resetExpandedIcon = false, int?displayOrder = null) { throw new NotImplementedException(); }
public IProjectTree SetProperties(string caption = null, string filePath = null, IRule browseObjectProperties = null, ProjectImageMoniker icon = null, ProjectImageMoniker expandedIcon = null, bool?visible = default(bool?), ProjectTreeFlags?flags = default(ProjectTreeFlags?), IProjectPropertiesContext context = null, IPropertySheet propertySheet = null, bool?isLinked = default(bool?), bool resetFilePath = false, bool resetBrowseObjectProperties = false, bool resetIcon = false, bool resetExpandedIcon = false) { if (caption != null) { Caption = caption; } if (filePath != null) { FilePath = filePath; } if (visible != null) { Visible = visible.Value; } if (flags != null) { Flags = flags.Value; } return(this); }
IProjectTree IProjectTree.SetIcon(ProjectImageMoniker icon) { Icon = icon; return(this); }
IProjectTree IProjectTree.SetExpandedIcon(ProjectImageMoniker expandedIcon) { ExpandedIcon = expandedIcon; return(this); }
/// <summary> /// Builds Dependencies tree for given dependencies snapshot /// </summary> public override async Task <IProjectTree> BuildTreeAsync( IProjectTree dependenciesTree, IDependenciesSnapshot snapshot, CancellationToken cancellationToken = default) { IProjectTree originalTree = dependenciesTree; var currentTopLevelNodes = new List <IProjectTree>(); IProjectTree rememberNewNodes(IProjectTree rootNode, IEnumerable <IProjectTree> currentNodes) { if (currentNodes != null) { currentTopLevelNodes.AddRange(currentNodes); } return(rootNode); } if (snapshot.Targets.Where(x => !x.Key.Equals(TargetFramework.Any)).Count() == 1) { foreach (KeyValuePair <ITargetFramework, ITargetedDependenciesSnapshot> target in snapshot.Targets) { if (cancellationToken.IsCancellationRequested) { return(originalTree); } dependenciesTree = await BuildSubTreesAsync( dependenciesTree, snapshot.ActiveTarget, target.Value, target.Value.Catalogs, rememberNewNodes).ConfigureAwait(false); } } else { foreach (KeyValuePair <ITargetFramework, ITargetedDependenciesSnapshot> target in snapshot.Targets) { if (cancellationToken.IsCancellationRequested) { return(originalTree); } if (target.Key.Equals(TargetFramework.Any)) { dependenciesTree = await BuildSubTreesAsync(dependenciesTree, snapshot.ActiveTarget, target.Value, target.Value.Catalogs, rememberNewNodes).ConfigureAwait(false); } else { IProjectTree node = dependenciesTree.FindNodeByCaption(target.Key.FriendlyName); bool shouldAddTargetNode = node == null; IDependencyViewModel targetViewModel = ViewModelFactory.CreateTargetViewModel(target.Value); node = CreateOrUpdateNode(node, targetViewModel, rule: null, isProjectItem: false, additionalFlags: ProjectTreeFlags.Create(ProjectTreeFlags.Common.BubbleUp)); node = await BuildSubTreesAsync(node, snapshot.ActiveTarget, target.Value, target.Value.Catalogs, CleanupOldNodes).ConfigureAwait(false); if (shouldAddTargetNode) { dependenciesTree = dependenciesTree.Add(node).Parent; } else { dependenciesTree = node.Parent; } currentTopLevelNodes.Add(node); } } } dependenciesTree = CleanupOldNodes(dependenciesTree, currentTopLevelNodes); // now update root Dependencies node status ProjectImageMoniker rootIcon = ViewModelFactory.GetDependenciesRootIcon(snapshot.HasUnresolvedDependency).ToProjectSystemType(); return(dependenciesTree.SetProperties(icon: rootIcon, expandedIcon: rootIcon)); }