public TagSpan <IOutliningRegionTag> AsOutliningRegionTag() { SnapshotSpan span = this.AsSnapshotSpan(); OutliningOptions opt = this.Tagger.Options; //isImplementation means that block will collapse on "Collapse to definitions" command //my stupid parser collapses top-level blocks in document, regions and top-level blocks in each region //and also function bodies which it was able to detect bool isImplementation = RegionSubType == TextRegionSubType.Function || RegionType == TextRegionType.Region || Parent.RegionType == TextRegionType.None || Parent.RegionType == TextRegionType.Region; // collapsed when opening a file bool collapsed = false; if (Tagger.FirstOutlining) { collapsed = isImplementation && opt.AutoCollapseToDefinitions; if (!collapsed) { switch (RegionType) { case TextRegionType.Block: case TextRegionType.Array: collapsed = opt.AutoCollapseBraces; break; case TextRegionType.Comment: collapsed = opt.AutoCollapseComments; break; case TextRegionType.Region: collapsed = opt.AutoCollapseRegions; break; } } } return(new TagSpan <IOutliningRegionTag> ( span, new OutliningRegionTag ( collapsed, isImplementation, GetCollapsedText(), new CollapsedHintFormatter(this).FormatHint() ) )); }
protected virtual void Init() { Options = GetOptions(); //timer that will trigger outlining update after some period of no buffer changes UpdateTimer = new DispatcherTimer(DispatcherPriority.ApplicationIdle); UpdateTimer.Interval = TimeSpan.FromMilliseconds(2500); FirstOutlining = true; UpdateTimer.Tick += (sender, args) => { UpdateTimer.Stop(); Outline(); }; //bind to events and start outlining if (VsVersion.Major < 14) { //VS 2012 and 2013 Outline(); Classifier.ClassificationChanged += (sender, args) => { //restart the timer UpdateTimer.Stop(); UpdateTimer.Start(); }; } else { //VS 2015 Classifier.ClassificationChanged += (sender, args) => { if (FirstOutlining) { Outline(); } else { //restart the timer UpdateTimer.Stop(); UpdateTimer.Start(); } }; } }