protected OutlineRegionBuilder(ITextBuffer textBuffer) { CurrentRegions = new OutlineRegionCollection(0); TextBuffer = textBuffer; TextBuffer.Changed += OnTextBufferChanged; BackgroundTask = new IdleTimeAsyncTask(TaskAction, MainThreadAction); BackgroundTask.DoTaskOnIdle(300); }
public virtual object Clone() { var clone = new OutlineRegionCollection(TextBufferVersion); foreach (var item in this) { clone.Add(item.Clone() as OutlineRegion); } return(clone); }
protected OutlineRegionBuilder(ITextBuffer textBuffer, IEditorShell editorShell) { CurrentRegions = new OutlineRegionCollection(0); TextBuffer = textBuffer; TextBuffer.Changed += OnTextBufferChanged; BackgroundTask = new IdleTimeAsyncTask(TaskAction, MainThreadAction, editorShell); if (IsEnabled) { BackgroundTask.DoTaskOnIdle(300); } }
protected OutlineRegionBuilder(ITextBuffer textBuffer, IServiceContainer services, bool isEnabled) { Services = services; CurrentRegions = new OutlineRegionCollection(0); TextBuffer = textBuffer; TextBuffer.Changed += OnTextBufferChanged; BackgroundTask = new IdleTimeAsyncTask(TaskAction, MainThreadAction, services); if (isEnabled) { BackgroundTask.DoTaskOnIdle(300); } }
protected OutlineRegionBuilder(ITextBuffer textBuffer) { CurrentRegions = new OutlineRegionCollection(0); TextBuffer = textBuffer; TextBuffer.Changed += OnTextBufferChanged; // Unit test case if (EditorShell.IsUIThread) { BackgroundTask = new IdleTimeAsyncTask(TaskAction, MainThreadAction); BackgroundTask.DoTaskOnIdle(300); } }
protected virtual ITextRange CompareRegions( OutlineRegionCollection newRegions, OutlineRegionCollection oldRegions, int upperBound) { TextRangeCollection <OutlineRegion> oldClone = null; TextRangeCollection <OutlineRegion> newClone = null; if (oldRegions != null) { oldClone = oldRegions.Clone() as OutlineRegionCollection; oldClone.Sort(); } newClone = newRegions.Clone() as OutlineRegionCollection; newClone.Sort(); return(newClone.RangeDifference(oldClone, 0, upperBound)); }
protected virtual object TaskAction() { if (!IsDisposed) { var snapshot = TextBuffer.CurrentSnapshot; var newRegions = new OutlineRegionCollection(snapshot.Version.VersionNumber); var regionsBuilt = BuildRegions(newRegions); if (regionsBuilt) { lock (_regionsLock) { var changedRange = CompareRegions(newRegions, CurrentRegions, snapshot.Length); return(new OutlineRegionsChange(changedRange, newRegions)); } } } return(null); }
private void OnRegionsChanged(object sender, OutlineRegionsChangedEventArgs e) { ITextSnapshot snapshot = _textBuffer.CurrentSnapshot; if (e.Regions.TextBufferVersion == _textBuffer.CurrentSnapshot.Version.VersionNumber) { // Update the regions before firing the notification, as core editor // may ask for the regions during the notification. _currentRegions = e.Regions; if (TagsChanged != null) { int start = e.ChangedRange.Start; if (start < snapshot.Length) { int end = Math.Min(e.ChangedRange.End, snapshot.Length); TagsChanged(this, new SnapshotSpanEventArgs( new SnapshotSpan(snapshot, Span.FromBounds(start, end)))); } } } }
public OutlineRegionsChangedEventArgs(OutlineRegionCollection regions, ITextRange changedRange) { Regions = regions; ChangedRange = changedRange; }
public abstract bool BuildRegions(OutlineRegionCollection newRegions);
public OutlineRegionsChange(ITextRange changedRange, OutlineRegionCollection newRegions) { ChangedRange = changedRange; NewRegions = newRegions; }