NodeInfo CreateViewNode(IView view, NodesCollectionInfo collectionToAddViewNode, IInspectedObject modelNode, int level, List <NodeInfo> nodesToCollapse) { string nodeText = modelNode.DisplayName; if (modelNode.Comment != "") { nodeText += " (" + modelNode.Comment + ")"; } bool createCollapsed = false; bool createLazilyLoaded = false; if (level < 5) { if (OnNodeCreated != null) { var args = new NodeCreatedEventArgs() { NodeObject = VisualizerNode.FromObject(modelNode) }; OnNodeCreated(this, args); createCollapsed = args.CreateCollapsed.GetValueOrDefault(createCollapsed); createLazilyLoaded = args.CreateLazilyLoaded.GetValueOrDefault(createLazilyLoaded); } if (createLazilyLoaded && !view.TreeSupportsLoadingOnExpansion) { createLazilyLoaded = false; } } var viewNode = view.CreateNode(nodeText, modelNode, collectionToAddViewNode); if (createLazilyLoaded) { view.CreateNode(lazyLoadTag, lazyLoadTag, viewNode.ChildrenNodesCollection); } else { foreach (var child in modelNode.Children) { CreateViewNode(view, viewNode.ChildrenNodesCollection, child, level + 1, nodesToCollapse); } } if (createCollapsed) { nodesToCollapse.Add(viewNode); } return(viewNode); }
bool IPresenter.TrySelectObject(ILogSource source, TextLogEventTrigger creationTrigger, Func <IVisualizerNode, int> disambiguationFunction) { EnsureTreeView(); Func <IInspectedObject, bool> predecate = obj => { return(obj.Owner.Outputs.Any(o => o.LogSource == source) && obj.StateChangeHistory.Any(change => change.Trigger.CompareTo(creationTrigger) == 0)); }; var candidates = EnumRoots().SelectMany(EnumTree).Where(predecate).ToList(); if (candidates.Count > 0) { IInspectedObject obj; if (candidates.Count == 1 || disambiguationFunction == null) { obj = candidates[0]; } else { obj = candidates .Select(c => new { Obj = c, Rating = disambiguationFunction(VisualizerNode.FromObject(c)) }) .OrderByDescending(x => x.Rating) .First().Obj; } var n = FindOrCreateNode(obj); if (n != null) { view.SelectedNodes = new[] { n.Value }; view.ScrollSelectedNodesInView(); return(true); } } return(false); }