public void VsTextViewCreated(IVsTextView textViewAdapter) { IComponentModel componentModel = (IComponentModel)ServiceProvider.GlobalProvider.GetService(typeof(SComponentModel)); if (componentModel != null) { IOutliningManagerService outliningManagerService = componentModel.GetService <IOutliningManagerService>(); _editorAdaptersFactoryService = componentModel.GetService <IVsEditorAdaptersFactoryService>(); if (outliningManagerService != null) { if (textViewAdapter != null && _editorAdaptersFactoryService != null) { var textView = _editorAdaptersFactoryService.GetWpfTextView(textViewAdapter); var snapshot = textView.TextSnapshot; var snapshotSpan = new Microsoft.VisualStudio.Text.SnapshotSpan(snapshot, new Microsoft.VisualStudio.Text.Span(0, snapshot.Length)); _outliningManager = outliningManagerService.GetOutliningManager(textView); var regions = _outliningManager.GetAllRegions(snapshotSpan); foreach (var reg in regions) { _outliningManager.TryCollapse(reg); } } } } }
/// <summary> /// An event handler raised when a code item parent's expanded state has changed. /// </summary> /// <param name="sender">The sender of the event.</param> /// <param name="eventArgs">The event arguments.</param> private void OnCodeItemParentIsExpandedChanged(object sender, EventArgs eventArgs) { if (sender is ICodeItemParent codeItemParent) { var iCollapsible = FindCollapsibleFromCodeItemParent(codeItemParent); if (iCollapsible != null) { if (codeItemParent.IsExpanded && iCollapsible.IsCollapsed) { _outliningManager.Expand(iCollapsible as ICollapsed); } else if (!codeItemParent.IsExpanded && !iCollapsible.IsCollapsed) { _outliningManager.TryCollapse(iCollapsible); } } } }
/// <summary> /// An event handler raised when a code item parent's expanded state has changed. /// </summary> /// <param name="sender">The sender of the event.</param> /// <param name="eventArgs">The event arguments.</param> private static void OnIsExpandedChanged(object sender, EventArgs eventArgs) { var item = sender as IMembers; if (item != null) { var iCollapsible = FindCollapsibleFromCodeItem((CodeItem)item, _manager, _textView); if (iCollapsible != null) { if (item.IsExpanded && iCollapsible.IsCollapsed) { _manager.Expand(iCollapsible as ICollapsed); } else if (!item.IsExpanded && !iCollapsible.IsCollapsed) { _manager.TryCollapse(iCollapsible); } } } }
private void ToggleCurrent() { var caretPosition = _textView.Caret.Position.BufferPosition; var snapshot = _textView.TextBuffer.CurrentSnapshot; var span = new SnapshotSpan(snapshot, new Span(caretPosition, 0)); var regions = OutliningManager.GetAllRegions(span); // Find innermost one ICollapsible region = null; int regionStart = 0; int regionEnd = snapshot.Length; foreach (ICollapsible c in regions) { int start = c.Extent.GetStartPoint(snapshot); int end = c.Extent.GetEndPoint(snapshot); if (start >= regionStart && end < regionEnd) { regionStart = start; regionEnd = end; region = c; } } if (region != null) { if (region.IsCollapsed) { OutliningManager.Expand(region as ICollapsed); } else { OutliningManager.TryCollapse(region); } } }