private void AddCollapsed(List <object> list, CollapsedCode collapsed) { if (collapsed.CollapsedLines.Count <= MIN_LINES_TO_COLLAPSE) { list.AddRange(collapsed.CollapsedLines.Select(l => new FaintLine { Line = l })); } else { if (MIN_LINES_TO_COLLAPSE > 0) { list.Add(new FaintLine { Line = collapsed.CollapsedLines.First() }); } list.Add(collapsed); if (MIN_LINES_TO_COLLAPSE > 0) { list.Add(new FaintLine { Line = collapsed.CollapsedLines.Last() }); } } }
private void QueryHasChanged() { if (Query == null) { MyListView.ItemsSource = lines; } else { var list = new List <object>(); CollapsedCode collapsed = null; foreach (var l in lines) { var matches = Query.Matches(l); if (matches.Count > 0) { if (collapsed != null) { AddCollapsed(list, collapsed); collapsed = null; } list.Add(new MatchedLine() { Matches = matches, Line = l }); } else { if (collapsed == null) { collapsed = new CollapsedCode { CollapsedLines = new List <LineOfCode>() } } ; collapsed.CollapsedLines.Add(l); } } if (collapsed != null) { AddCollapsed(list, collapsed); } MyListView.ItemsSource = list; MyListView.Tag = Query; } } int MIN_LINES_TO_COLLAPSE = 0;