void TextViewVisualLinesChanged(object sender, EventArgs e) { foreach (FoldingMarginMarker m in markers) { RemoveVisualChild(m); } markers.Clear(); InvalidateVisual(); if (TextView != null && FoldingManager != null && TextView.VisualLinesValid) { foreach (VisualLine line in TextView.VisualLines) { FoldingSection fs = FoldingManager.GetNextFolding(line.FirstDocumentLine.Offset); if (fs == null) { continue; } if (fs.StartOffset <= line.LastDocumentLine.Offset + line.LastDocumentLine.Length) { FoldingMarginMarker m = new FoldingMarginMarker { IsExpanded = !fs.IsFolded, VisualLine = line, FoldingSection = fs }; markers.Add(m); AddVisualChild(m); m.IsMouseDirectlyOverChanged += delegate { InvalidateVisual(); }; InvalidateMeasure(); continue; } } } }
public void UpdateFoldings(FoldingManager fm, IEnumerable<String> linesadded) { var last = fm.GetNextFolding(lastfold.StartOffset); foreach (var line in linesadded) { var M = r.Match(line); if (M.Success) { endfold = n + line.Length; if (!prev) { prev = true; startfold = n; lastfold = new NewFolding(startfold, endfold); fm.CreateFolding(startfold, endfold).Title = "FileSync Complete"; } else { last.EndOffset = endfold; } } else { if (prev) { lastfold = new NewFolding(startfold, endfold); fm.CreateFolding(startfold, endfold).Title = "FileSync Complete"; } prev = false; } linenr++; n += line.Length+1; } }