Пример #1
0
        protected OutlineRegionBuilder(ITextBuffer textBuffer)
        {
            CurrentRegions = new OutlineRegionCollection(0);

            TextBuffer          = textBuffer;
            TextBuffer.Changed += OnTextBufferChanged;

            BackgroundTask = new IdleTimeAsyncTask(TaskAction, MainThreadAction);
            BackgroundTask.DoTaskOnIdle(300);
        }
Пример #2
0
        public virtual object Clone()
        {
            var clone = new OutlineRegionCollection(TextBufferVersion);

            foreach (var item in this)
            {
                clone.Add(item.Clone() as OutlineRegion);
            }

            return(clone);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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));
        }
Пример #7
0
        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);
        }
Пример #8
0
        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;
 }
Пример #10
0
 public abstract bool BuildRegions(OutlineRegionCollection newRegions);
Пример #11
0
 public OutlineRegionsChange(ITextRange changedRange, OutlineRegionCollection newRegions)
 {
     ChangedRange = changedRange;
     NewRegions   = newRegions;
 }