private void SourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { IProjectionBufferBase projBuffer = (IProjectionBufferBase)sender; FrugalList <ITextBuffer> addedToGraphBuffers = new FrugalList <ITextBuffer>(); FrugalList <ITextBuffer> removedFromGraphBuffers = new FrugalList <ITextBuffer>(); foreach (ITextBuffer addedBuffer in e.AddedBuffers) { AddSourceBuffer(projBuffer, addedBuffer, addedToGraphBuffers); } foreach (ITextBuffer removedBuffer in e.RemovedBuffers) { RemoveSourceBuffer(projBuffer, removedBuffer, removedFromGraphBuffers); } if (addedToGraphBuffers.Count > 0 || removedFromGraphBuffers.Count > 0) { var listeners = GraphBuffersChanged; if (listeners != null) { ((BaseBuffer)projBuffer).group.EnqueueEvents (new GraphEventRaiser(this, new GraphBuffersChangedEventArgs(addedToGraphBuffers, removedFromGraphBuffers)), null); } } }
private void OnSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { BufferGraph targetGraph = this.GetTargetGraph(); if (targetGraph != null) { targetGraph.SourceBuffersChanged(sender, e); } }
private void OnProjectionBufferSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { foreach (var b in e.RemovedBuffers) { _viewModel.SourceBuffers.Remove(b); } foreach (var b in e.AddedBuffers) { _viewModel.SourceBuffers.Add(b); } UpdateSourceSpans(); }
private void OnSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { // This is something of a hack. We can't use the buffer graph events for tracking when buffers are added // or removed from the projection stack (the buffer events are fired after the corresponding text changed // events so people getting tags inside the text change event would not see any tags on the newly added // buffers). Instead, we update our buffer states by traversing the entire buffer graph whenever the // source buffers for any projection buffer in the graph changes. // // This should be rare. // Bump our version number so we can tell which BufferStates are unused. ++(this.versionNumber); this.RegisterBufferGraph(); // Now that all living buffers have been registerd (and had their version numbers bumped), find any stale buffers // that have an old version number and remove them. List <ITextBuffer> deadBuffers = null; foreach (var kvp in this.bufferStates) { if (kvp.Value.VersionNumber != this.versionNumber) { if (deadBuffers == null) { deadBuffers = new List <ITextBuffer>(this.bufferStates.Count); } deadBuffers.Add(kvp.Key); } } if (deadBuffers != null) { foreach (var b in deadBuffers) { this.UnregisterAndRemoveBuffer(b); } } }
private void OnSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { _label.Content = $"This text view contains {_projectionBuffer.SourceBuffers.Count} projection buffers and {_projectionBuffer.CurrentSnapshot.SpanCount} projection spans."; }
private void OnSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) => HandleAddRemoveBuffers(e.AddedBuffers, e.RemovedBuffers);
private void OnSourceBuffersChanged(object sender, ProjectionSourceBuffersChangedEventArgs e) { HandleAddRemoveBuffers(e.AddedBuffers, e.RemovedBuffers); }