Beispiel #1
0
        protected override void OnBeforeQueryStatus(object sender, EventArgs e)
        {
            base.OnBeforeQueryStatus(sender, e);
            ITextView view = TextEditor.GetCurrentView();

            if (view == null)
            {
                return;
            }
            ITextCaret caret = view.Caret;

            if (caret == null)
            {
                return;
            }
            var point = TextEditor.MapCaretToPrimaryBuffer(view);

            //SnapshotPoint? point = caret.Position.BufferPosition;

            if (point != null)
            {
                IUserOutlining outlining =
                    OutliningManager.Get(point.Value.Snapshot.TextBuffer);
                Command.Enabled = outlining.IsInOutliningRegion(point.Value);
            }
        }
Beispiel #2
0
        protected override void OnInvoke(object sender, EventArgs e)
        {
            base.OnInvoke(sender, e);
            ITextView view = TextEditor.GetCurrentView();

            if (view == null)
            {
                return;
            }
            ITextCaret caret = view.Caret;

            if (caret == null)
            {
                return;
            }

            var point = TextEditor.MapCaretToPrimaryBuffer(view);

            //SnapshotPoint? point = caret.Position.BufferPosition;
            if (point != null)
            {
                IUserOutlining outlining =
                    OutliningManager.Get(point.Value.Snapshot.TextBuffer);
                outlining.RemoveAt(point.Value);
            }
        }
Beispiel #3
0
        private IUserOutlining GetOutlining(out ITextBuffer buffer)
        {
            buffer = null;
            ITextView view = TextEditor.GetCurrentView();

            if (view != null)
            {
                buffer = TextEditor.GetPrimaryBuffer(view);
                //buffer = view.TextBuffer;
                return(OutliningManager.Get(buffer));
            }
            return(null);
        }
Beispiel #4
0
        private void AddOutlining(ITextBuffer buffer, SnapshotSpan span)
        {
            var outlines = OutliningManager.Get(buffer);

            outlines.Add(span);
        }
        /// <summary>
        /// Walk through all the regions, calculate their levels and collapse all regions where n = level +1.
        /// </summary>
        private void Collapse(int level)
        {
            var tv = TextViewRegistry.GetActiveTextView(this.textManager);

            if (tv == null)
            {
                return;
            }

            var componentModel = this.ServiceProvider.GetService(typeof(SComponentModel)) as IComponentModel;

            if (componentModel != null)
            {
                var outliningManagerService = componentModel.GetService <IOutliningManagerService>();

                if (outliningManagerService != null)
                {
                    OutliningManager = outliningManagerService.GetOutliningManager(tv);
                }
            }

            if (OutliningManager != null)
            {
                try
                {
                    var length       = tv.TextSnapshot.Length;
                    var textViewSpan = new SnapshotSpan(tv.TextSnapshot, 0, length);
                    var regions      = OutliningManager.GetAllRegions(textViewSpan);

                    Dictionary <ICollapsible, int> regionCount = new Dictionary <ICollapsible, int>();

                    foreach (var region in regions)
                    {
                        var extent = region.Extent;
                        var span   = extent.GetSpan(tv.TextSnapshot);

                        foreach (var compareTo in regions)
                        {
                            if (compareTo.Equals(region))
                            {
                                continue;
                            }

                            if (!regionCount.ContainsKey(region))
                            {
                                regionCount[region] = 1;
                            }

                            var compareToSpan = compareTo.Extent.GetSpan(tv.TextSnapshot);
                            var regionSpan    = region.Extent.GetSpan(tv.TextSnapshot);

                            if (compareToSpan.Contains(regionSpan))
                            {
                                regionCount[region] = regionCount[region] + 1;
                            }
                        }
                    }

                    OutliningManager.ExpandAll(textViewSpan, (y) => (true));

                    foreach (var pair in regionCount)
                    {
                        if (pair.Value == level)
                        {
                            OutliningManager.TryCollapse(pair.Key);
                        }
                    }
                }
                catch (ObjectDisposedException)
                {
                    // TODO Investigate, happened once while testing some early version.
                }
            }
        }