public static void showInTreeView(this MethodMappings methodMappings, TreeView treeView, string filter, bool showSourceCodeSnippets, bool onlyShowSourceCodeLine) { treeView.parent().backColor("LightPink"); treeView.visible(false); treeView.clear(); var indexedMappings = methodMappings.indexedByKey(filter); if (onlyShowSourceCodeLine) { //do this so that we don't add more than one item per line var indexedByFileAndLine = new Dictionary<string, MethodMapping>(); foreach(var item in indexedMappings) foreach(var methodMapping in item.Value) if (methodMapping.File.valid()) { var key = "{0}_{1}".format(methodMapping.File, methodMapping.Start_Line); indexedByFileAndLine.add(key, methodMapping); } // now group then by the same text in the SourceCodeLine var indexedBySourceCodeLine = new Dictionary<string, List<MethodMapping>>(); foreach(var methodMapping in indexedByFileAndLine.Values) indexedBySourceCodeLine.add(methodMapping.sourceCodeLine(), methodMapping); //Finally show then foreach(var item in indexedBySourceCodeLine) { var uniqueTextNode = treeView.add_Node(item.Key, item.Value,true); } } else { foreach(var item in indexedMappings) { var keyNodeText = "{0} ({1})".format(item.Key, item.Value.size()); var keyNode= treeView.add_Node(keyNodeText, item.Value,true); } treeView.afterSelect<List<MethodMapping>>( (mappings)=>{ var keyNode = treeView.selected(); keyNode.clear(); foreach(var methodMapping in mappings) { var nodeText = (showSourceCodeSnippets) ? methodMapping.sourceCodeLine() : "{0} - {1}".format(methodMapping.INodeType,methodMapping.SourceCode); keyNode.add_Node(nodeText, methodMapping); } }); } treeView.parent().backColor("Control"); treeView.visible(true); }