public InlineCommentMargin( IWpfTextViewHost wpfTextViewHost, IInlineCommentPeekService peekService, IEditorFormatMapService editorFormatMapService, IViewTagAggregatorFactoryService tagAggregatorFactory, Lazy <IPullRequestSessionManager> sessionManager) { textView = wpfTextViewHost.TextView; this.sessionManager = sessionManager.Value; // Default to not show comment margin textView.Options.SetOptionValue(InlineCommentTextViewOptions.MarginEnabledId, false); marginGrid = new GlyphMarginGrid { Width = 17.0 }; var glyphFactory = new InlineCommentGlyphFactory(peekService, textView); var editorFormatMap = editorFormatMapService.GetEditorFormatMap(textView); glyphMargin = new GlyphMargin <InlineCommentTag>(textView, glyphFactory, marginGrid, tagAggregatorFactory, editorFormatMap, MarginPropertiesName); if (IsDiffView()) { TrackCommentGlyph(wpfTextViewHost, marginGrid); } currentSessionSubscription = this.sessionManager.WhenAnyValue(x => x.CurrentSession) .Subscribe(x => RefreshCurrentSession().Forget()); visibleSubscription = marginGrid.WhenAnyValue(x => x.IsVisible) .Subscribe(x => textView.Options.SetOptionValue(InlineCommentTextViewOptions.MarginVisibleId, x)); textView.Options.OptionChanged += (s, e) => RefreshMarginVisibility(); }
IWpfTextViewMargin CreateMargin <TGlyphTag>(IGlyphFactory <TGlyphTag> glyphFactory, Func <Grid> gridFactory, IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin parent, IEditorFormatMap editorFormatMap) where TGlyphTag : ITag { var tagAggregator = tagAggregatorFactory.CreateTagAggregator <TGlyphTag>(wpfTextViewHost.TextView); var margin = new GlyphMargin <TGlyphTag>(wpfTextViewHost, glyphFactory, gridFactory, tagAggregator, editorFormatMap, IsMarginVisible, MarginPropertiesName, MarginName, true, 17.0); TrackCommentGlyphOnDiffView(wpfTextViewHost, margin.VisualElement); return(margin); }
public void Dispose() { visibleSubscription?.Dispose(); visibleSubscription = null; currentSessionSubscription?.Dispose(); currentSessionSubscription = null; glyphMargin?.Dispose(); glyphMargin = null; }