public IWpfTextViewMargin CreateMargin(IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin parent) { try { if (wpfTextViewHost == null || !wpfTextViewHost.TextView.HasValidMarginRoles()) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextViewHost.TextView.TextBuffer, out var textDocument)) { return(null); } using (Log.CriticalOperation($"{nameof(DocumentMarkMarginProvider)} {nameof(CreateMargin)}", LogEventLevel.Debug)) { TextViewMargin = new DocumentMarkMargin( _viewTagAggregatorFactoryService, _glyphFactoryProviders, wpfTextViewHost, SessionService.Value, SettingsServiceFactory.Value.GetOrCreate (nameof(DocumentMarkMarginProvider)) ); return(TextViewMargin); } } catch (Exception ex) { Log.Error(ex, nameof(CreateMargin)); System.Diagnostics.Debug.WriteLine(ex); #if DEBUG System.Diagnostics.Debugger.Break(); #endif return(null); } }
public ITagger <T> CreateTagger <T>(ITextView textView, ITextBuffer buffer) where T : ITag { var wpfTextView = textView as IWpfTextView; if (wpfTextView == null || textView.TextBuffer != buffer) { return(null); } if (!wpfTextView.HasValidTaggerRoles()) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, textView.TextBuffer, out var textDocument)) { return(null); } var sessionService = (Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel)?.GetService <ISessionService>(); if (sessionService == null) { return(null); } return(textView.Properties.GetOrCreateSingletonProperty(typeof(DocumentMarkTagger), () => new DocumentMarkTagger(sessionService, textView, buffer)) as ITagger <T>); }
public ActiveTextEditorSelection GetActiveTextEditorSelection() { try { var range = GetActiveEditorSelectedRange(out IVsTextView view); if (view == null) { return(null); } var wpfTextView = _componentModel.GetService <IVsEditorAdaptersFactoryService>()?.GetWpfTextView(view); if (wpfTextView == null) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(_componentModel.GetService <ITextDocumentFactoryService>(), wpfTextView, out var textDocument)) { return(null); } return(new ActiveTextEditorSelection(textDocument.Uri, range)); } catch (Exception ex) { Log.Error(ex, nameof(ActiveTextEditorSelection)); } return(null); }
public IWpfTextViewMargin CreateMargin(IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin parent) { try { if (wpfTextViewHost == null || !wpfTextViewHost.TextView.HasValidRoles()) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextViewHost.TextView.TextBuffer, out var textDocument)) { return(null); } var componentModel = Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel; var sessionService = componentModel?.GetService <ISessionService>(); var settingsServiceFactory = componentModel?.GetService <ISettingsServiceFactory>(); TextViewMargin = new DocumentMarkMargin( _viewTagAggregatorFactoryService, _glyphFactoryProviders, wpfTextViewHost, sessionService, settingsServiceFactory.Create() ); return(TextViewMargin); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); #if DEBUG System.Diagnostics.Debugger.Break(); #endif return(null); } }
private async System.Threading.Tasks.Task OnTextViewLayoutChangedSubjectHandlerAsync(TextViewLayoutChangedSubject subject) { try { Debug.WriteLine($"{nameof(OnTextViewLayoutChangedSubjectHandlerAsync)} RequiresMarkerCheck={subject.RequiresMarkerCheck} TriggerTextViewLayoutChanged={subject.TriggerTextViewLayoutChanged}"); var wpfTextView = subject.WpfTextView; if (TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextView.TextBuffer, out var textDocument)) { // don't trigger for changes that don't result in lines being added or removed if (wpfTextView.Properties.TryGetProperty(PropertyNames.DocumentMarkerManager, out DocumentMarkerManager documentMarkerManager) && documentMarkerManager != null) { // get markers if it's null (first time) or we did something that isn't scrolling/vertical changes if (subject.RequiresMarkerCheck) { var updated = await documentMarkerManager.TrySetMarkersAsync(); if (updated) { subject.TriggerTextViewLayoutChanged = true; } } } if (subject.TriggerTextViewLayoutChanged) { //only send this if we have an actual change try { if (wpfTextView.InLayout || wpfTextView.IsClosed) { return; } await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); _ = OnVisibleRangesSubjectHandlerAsync(textDocument.FilePath.ToUri(), wpfTextView); wpfTextView .Properties .GetProperty <List <ICodeStreamWpfTextViewMargin> >(PropertyNames.TextViewMarginProviders) .OnTextViewLayoutChanged(subject.Sender, subject.EventArgs); } catch (InvalidOperationException ex) { Log.Warning(ex, nameof(OnTextViewLayoutChangedSubjectHandlerAsync)); } catch (Exception ex) { Log.Error(ex, nameof(OnTextViewLayoutChangedSubjectHandlerAsync)); } } } } catch (Exception ex) { Log.Warning(ex, nameof(OnTextViewLayoutChanged)); } await System.Threading.Tasks.Task.CompletedTask; }
/// <summary> /// SubjectBuffersConnected happens first /// </summary> /// <param name="wpfTextView"></param> /// <param name="reason"></param> /// <param name="subjectBuffers"></param> public void SubjectBuffersConnected(IWpfTextView wpfTextView, ConnectionReason reason, Collection <ITextBuffer> subjectBuffers) { try { var logPrefix = $"{nameof(SubjectBuffersConnected)}"; using (var metrics = Log.WithMetrics($"{logPrefix} ")) { if (wpfTextView == null || !wpfTextView.HasValidDocumentRoles()) { return; } IVirtualTextDocument virtualTextDocument = null; if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextView, out virtualTextDocument)) { Log.Warning($"{logPrefix} Could not create virtualTextDocument"); return; } Log.Verbose($"{logPrefix} pre-Lock"); lock (WeakTableLock) { Log.Verbose($"{logPrefix} in-Lock"); foreach (var buffer in subjectBuffers) { if (!TextBufferTable.TryGetValue(buffer, out HashSet <IWpfTextView> textViews)) { textViews = new HashSet <IWpfTextView>(); TextBufferTable.Add(buffer, textViews); } textViews.Add(wpfTextView); } using (metrics.Measure($"{logPrefix} Building properties")) { if (virtualTextDocument.SupportsMarkers) { wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.DocumentMarkerManager, () => new DocumentMarkerManager(CodeStreamAgentServiceFactory.Create(), wpfTextView, virtualTextDocument)); } wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.TextViewDocument, () => virtualTextDocument); wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.TextViewState, () => new TextViewState()); #if DEBUG if (TextViewCache == null) { System.Diagnostics.Debugger.Break(); } #endif } TextViewCache.Add(virtualTextDocument, wpfTextView); } Log.Verbose($"{logPrefix} Uri={virtualTextDocument.Uri}"); } } catch (Exception ex) { Log.Error(ex, nameof(SubjectBuffersConnected)); } }
public ISuggestedActionsSource CreateSuggestedActionsSource(ITextView textView, ITextBuffer textBuffer) { if (textBuffer == null || textView == null) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(_textDocumentFactoryService, textBuffer, out var textDocument)) { return(null); } return(new CodemarkSuggestedActionsSource((IComponentModel)_serviceProvider.GetService(typeof(SComponentModel)), textView, textBuffer, textDocument)); }
/// <summary> /// SubjectBuffersConnected happens first /// </summary> /// <param name="wpfTextView"></param> /// <param name="reason"></param> /// <param name="subjectBuffers"></param> public void SubjectBuffersConnected(IWpfTextView wpfTextView, ConnectionReason reason, Collection <ITextBuffer> subjectBuffers) { try { if (wpfTextView == null || !wpfTextView.HasValidRoles()) { return; } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextView.TextBuffer, out var textDocument)) { return; } lock (WeakTableLock) { foreach (var buffer in subjectBuffers) { if (!TextBufferTable.TryGetValue(buffer, out HashSet <IWpfTextView> textViews)) { textViews = new HashSet <IWpfTextView>(); TextBufferTable.Add(buffer, textViews); } textViews.Add(wpfTextView); } wpfTextView.Properties.GetOrCreateSingletonProperty(PropertyNames.DocumentMarkerManager, () => new DocumentMarkerManager(CodeStreamAgentServiceFactory.Create(), wpfTextView, textDocument)); wpfTextView.Properties.AddProperty(PropertyNames.TextViewFilePath, textDocument.FilePath); wpfTextView.Properties.AddProperty(PropertyNames.TextViewState, new TextViewState()); #if DEBUG if (TextViewCache == null) { Debugger.Break(); } #endif TextViewCache.Add(textDocument.FilePath, wpfTextView); } Log.Verbose($"{nameof(SubjectBuffersConnected)} FilePath={textDocument.FilePath}"); } catch (Exception ex) { Log.Error(ex, nameof(SubjectBuffersConnected)); } }
private ActiveTextEditor GetActiveTextEditor(IVsTextView textView) { try { var wpfTextView = GetActiveWpfTextView(textView); if (wpfTextView == null) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(_componentModel.GetService <ITextDocumentFactoryService>(), wpfTextView, out var textDocument)) { return(null); } return(ToActiveTextEditor(wpfTextView, textDocument)); } catch (Exception ex) { Log.Error(ex, nameof(GetActiveTextEditor)); } return(null); }
private void OnDocumentMarkerChanged(IWpfTextView wpfTextView, DocumentMarkerChangedEvent e) { Debug.WriteLine($"{nameof(OnDocumentMarkerChanged)}"); if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextView.TextBuffer, out var textDocument)) { return; } var fileUri = textDocument.FilePath.ToUri(); if (fileUri == null) { Log.Verbose($"{ nameof(fileUri)} is null"); return; } try { if (e.Uri.EqualsIgnoreCase(fileUri)) { Log.Debug($"{nameof(DocumentMarkerChangedEvent)} for {fileUri}"); wpfTextView .Properties .GetProperty <DocumentMarkerManager>(PropertyNames.DocumentMarkerManager) .TrySetMarkers(true); wpfTextView .Properties .GetProperty <List <ICodeStreamWpfTextViewMargin> >(PropertyNames.TextViewMarginProviders) .OnMarkerChanged(); } else { Log.Verbose($"{nameof(DocumentMarkerChangedEvent)} ignored for {fileUri}"); } } catch (Exception ex) { Log.Warning(ex, $"{nameof(DocumentMarkerChangedEvent)} for {fileUri}"); } }
public ActiveTextEditor GetActiveTextEditor(ITextDocumentFactoryService textDocumentFactoryService, IWpfTextView wpfTextView) { try { if (textDocumentFactoryService == null || wpfTextView == null) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(textDocumentFactoryService, wpfTextView.TextBuffer, out var textDocument)) { return(null); } return(new ActiveTextEditor(wpfTextView, textDocument.FileName, textDocument.Uri, wpfTextView.TextSnapshot.LineCount)); } catch (Exception ex) { Log.Error(ex, nameof(GetActiveTextEditor)); } return(null); }
public IWpfTextViewMargin CreateMargin(IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin containerMargin) { try { var containerMarginAsVerticalScrollBar = containerMargin as IVerticalScrollBar; if (containerMarginAsVerticalScrollBar == null) { return(null); } if (!wpfTextViewHost.TextView.HasValidMarginRoles()) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextViewHost.TextView.TextBuffer, out var textDocument)) { return(null); } using (Log.CriticalOperation($"{nameof(DocumentMarkScrollbarProvider)} {nameof(CreateMargin)}", LogEventLevel.Debug)) { TextViewMargin = new DocumentMarkScrollbar( wpfTextViewHost, containerMarginAsVerticalScrollBar, SessionService.Value ); return(TextViewMargin); } } catch (Exception ex) { Log.Error(ex, nameof(CreateMargin)); System.Diagnostics.Debug.WriteLine(ex); #if DEBUG System.Diagnostics.Debugger.Break(); #endif } return(null); }
public IWpfTextViewMargin CreateMargin(IWpfTextViewHost wpfTextViewHost, IWpfTextViewMargin containerMargin) { try { var containerMarginAsVerticalScrollBar = containerMargin as IVerticalScrollBar; if (containerMarginAsVerticalScrollBar == null) { return(null); } if (!wpfTextViewHost.TextView.HasValidRoles()) { return(null); } if (!TextDocumentExtensions.TryGetTextDocument(TextDocumentFactoryService, wpfTextViewHost.TextView.TextBuffer, out var textDocument)) { return(null); } var sessionService = (Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel) ?.GetService <ISessionService>(); TextViewMargin = new DocumentMarkScrollbar( wpfTextViewHost, containerMarginAsVerticalScrollBar, sessionService ); return(TextViewMargin); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); #if DEBUG System.Diagnostics.Debugger.Break(); #endif } return(null); }
private ActiveTextEditor GetActiveTextEditorCore(IWpfTextView wpfTextView) { try { if (wpfTextView == null) { Log.Verbose($"{nameof(wpfTextView)} is null"); return(null); } if (!TextDocumentExtensions.TryGetTextDocument(_componentModel.GetService <ITextDocumentFactoryService>(), wpfTextView.TextBuffer, out IVirtualTextDocument virtualTextDocument)) { return(null); } return(new ActiveTextEditor(wpfTextView, virtualTextDocument.FileName, virtualTextDocument.Uri, wpfTextView.TextSnapshot.LineCount)); } catch (Exception ex) { Log.Error(ex, nameof(GetActiveTextEditor)); } return(null); }