public void MoveCaretToSpan(Span span, MoveCaretOptions options) { var snapshot = wpfTextViewHost.TextView.TextSnapshot; Debug.Assert(span.End <= snapshot.Length); if (span.End > snapshot.Length) { return; } MoveCaretToPosition(span.End, options); bool isReversed = false; // If there's another reference at the caret, move caret to Start instead of End var nextRef = GetReferenceInfo(span.End); if (nextRef != null && nextRef.Value.Span != span) { wpfTextViewHost.TextView.Caret.MoveTo(new SnapshotPoint(snapshot, span.Start)); isReversed = true; } if ((options & MoveCaretOptions.Select) == 0) { wpfTextViewHost.TextView.Selection.Clear(); } else { wpfTextViewHost.TextView.Selection.Mode = TextSelectionMode.Stream; wpfTextViewHost.TextView.Selection.Select(new SnapshotSpan(snapshot, span), isReversed); } }
public bool GoToLocation(object reference, MoveCaretOptions options) { if (reference == null) { return(false); } if (reference is IMemberDef member) { var spanData = currentContent.Content.ReferenceCollection.FirstOrNull(a => a.Data.IsDefinition && a.Data.Reference == member); return(GoToTarget(spanData, false, false, options)); } if (reference is ParamDef pd) { var spanData = currentContent.Content.ReferenceCollection.FirstOrNull(a => a.Data.IsDefinition && (a.Data.Reference as Parameter)?.ParamDef == pd); return(GoToTarget(spanData, false, false, options)); } if (reference is TextReference textRef) { var spanData = currentContent.Content.ReferenceCollection.FirstOrNull(a => a.Data.IsLocal == textRef.IsLocal && a.Data.IsDefinition == textRef.IsDefinition && a.Data.Reference == textRef.Reference); return(GoToTarget(spanData, false, false, options)); } Debug.Fail(string.Format("Unknown type: {0} = {1}", reference.GetType(), reference)); return(false); }
public void MoveCaretToSpan(SpanData <ReferenceInfo> refInfo, MoveCaretOptions options) { if (isDisposed) { throw new ObjectDisposedException(nameof(IDocumentViewer)); } documentViewerControl.MoveCaretToSpan(refInfo.Span, options); }
public void MoveCaretToSpan(Span span, MoveCaretOptions options) { if (isDisposed) { throw new ObjectDisposedException(nameof(IDocumentViewer)); } documentViewerControl.MoveCaretToSpan(span, options); }
public void MoveCaretToSpan(int position, int length, MoveCaretOptions options) { if (isDisposed) { throw new ObjectDisposedException(nameof(IDocumentViewer)); } documentViewerControl.MoveCaretToSpan(new Span(position, length), options); }
public void MoveCaretToReference(object @ref, MoveCaretOptions options) { if (isDisposed) { throw new ObjectDisposedException(nameof(IDocumentViewer)); } documentViewerControl.GoToLocation(@ref, options); }
public GoToHelper(DocumentViewerControl owner, SpanData <ReferenceInfo> spanData, bool newTab, bool followLocalRefs, bool canRecordHistory, bool canFollowReference, MoveCaretOptions options) { this.owner = owner; this.spanData = spanData; this.newTab = newTab; this.followLocalRefs = followLocalRefs; this.canRecordHistory = canRecordHistory; this.canFollowReference = canFollowReference; this.options = options; owner.TextView.ViewportHeightChanged += TextView_ViewportHeightChanged; }
public void MoveCaretToPosition(int position, MoveCaretOptions options) { var snapshot = wpfTextViewHost.TextView.TextSnapshot; if ((uint)position < (uint)snapshot.Length) { wpfTextViewHost.TextView.Caret.MoveTo(new SnapshotPoint(snapshot, position)); wpfTextViewHost.TextView.EnsureCaretVisible((options & MoveCaretOptions.Center) != 0); } wpfTextViewHost.TextView.Selection.Clear(); if ((options & MoveCaretOptions.Focus) != 0) { textEditorHelper.SetFocus(); } }
internal bool GoTo(SpanData <ReferenceInfo>?spanData, bool newTab, bool followLocalRefs, bool canRecordHistory, bool canFollowReference, MoveCaretOptions options) { if (spanData == null) { return(false); } // When opening a new tab, the textview isn't visible and has a 0 height, so wait until it's visible // before moving the caret. if (wpfTextViewHost.TextView.ViewportHeight == 0 && !wpfTextViewHost.TextView.VisualElement.IsVisible) { new GoToHelper(this, spanData.Value, newTab, followLocalRefs, canRecordHistory, canFollowReference, options); return(true); } return(GoToCore(spanData.Value, newTab, followLocalRefs, canRecordHistory, canFollowReference, options)); }
bool GoToTarget(SpanData <ReferenceInfo>?spanData, bool canFollowReference, bool canRecordHistory, MoveCaretOptions options) => GoTo(spanData, false, true, canRecordHistory, canFollowReference, options);
internal bool GoTo(SpanData<ReferenceInfo>? spanData, bool newTab, bool followLocalRefs, bool canRecordHistory, bool canFollowReference, MoveCaretOptions options) { if (isDisposed) throw new ObjectDisposedException(nameof(IDocumentViewer)); return documentViewerControl.GoTo(spanData, newTab, followLocalRefs, canRecordHistory, canFollowReference, options); }
public void MoveCaretToSpan(SpanData<ReferenceInfo> refInfo, MoveCaretOptions options) { if (isDisposed) throw new ObjectDisposedException(nameof(IDocumentViewer)); documentViewerControl.MoveCaretToSpan(refInfo.Span, options); }
public void MoveCaretToSpan(int position, int length, MoveCaretOptions options) { if (isDisposed) throw new ObjectDisposedException(nameof(IDocumentViewer)); documentViewerControl.MoveCaretToSpan(new Span(position, length), options); }
public void MoveCaretToReference(object @ref, MoveCaretOptions options) { if (isDisposed) throw new ObjectDisposedException(nameof(IDocumentViewer)); documentViewerControl.GoToLocation(@ref, options); }
internal bool GoTo(SpanData <ReferenceInfo>?spanData, bool newTab, bool followLocalRefs, bool canRecordHistory, bool canFollowReference, MoveCaretOptions options) { if (isDisposed) { throw new ObjectDisposedException(nameof(IDocumentViewer)); } return(documentViewerControl.GoTo(spanData, newTab, followLocalRefs, canRecordHistory, canFollowReference, options)); }
bool GoToCore(SpanData <ReferenceInfo> spanData, bool newTab, bool followLocalRefs, bool canRecordHistory, bool canFollowReference, MoveCaretOptions options) { Debug.Assert(spanData.Span.End <= wpfTextViewHost.TextView.TextSnapshot.Length); if (spanData.Span.End > wpfTextViewHost.TextView.TextSnapshot.Length) { return(false); } if (newTab) { Debug.Assert(canFollowReference); if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); return(true); } if (followLocalRefs) { if (!IsOwnerOf(spanData)) { if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); return(true); } var localTarget = FindDefinition(spanData); if (localTarget != null) { spanData = localTarget.Value; } if (spanData.Data.IsDefinition) { if (canRecordHistory) { if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); } else { MoveCaretToSpan(spanData.Span, options); } return(true); } if (spanData.Data.IsLocal) { return(false); } if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); return(true); } else { var localTarget = FindDefinition(spanData); if (localTarget != null) { spanData = localTarget.Value; } int pos = -1; if (!spanData.Data.IsLocal) { if (spanData.Data.IsDefinition) { pos = spanData.Span.End; } } if (pos >= 0) { if (canRecordHistory) { if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); } else { if ((options & MoveCaretOptions.Focus) != 0) { textEditorHelper.SetFocus(); } wpfTextViewHost.TextView.Selection.Clear(); wpfTextViewHost.TextView.Caret.MoveTo(new SnapshotPoint(wpfTextViewHost.TextView.TextSnapshot, pos)); wpfTextViewHost.TextView.EnsureCaretVisible((options & MoveCaretOptions.Center) != 0); } return(true); } if (spanData.Data.IsLocal) { return(false); // Allow another handler to set a new caret position } if ((options & MoveCaretOptions.Focus) != 0) { textEditorHelper.SetFocus(); } if (!canFollowReference) { return(false); } textEditorHelper.FollowReference(spanData.ToTextReference(), newTab); return(true); } }
public void MoveCaretToSpan(Span span, MoveCaretOptions options) { if (isDisposed) throw new ObjectDisposedException(nameof(IDocumentViewer)); documentViewerControl.MoveCaretToSpan(span, options); }
bool GoTo(IMethodDebugService methodDebugService, ReferencePosition referencePosition, MoveCaretOptions options) { if (referencePosition == null) { return(false); } if (referencePosition.MethodSourceStatement != null) { var methodSourceStatement = referencePosition.MethodSourceStatement.Value; var methodStatement = methodDebugService.FindByCodeOffset(methodSourceStatement.Method, methodSourceStatement.Statement.BinSpan.Start); if (methodStatement != null) { MoveCaretToPosition(methodStatement.Value.Statement.TextSpan.Start, options); return(true); } } if (referencePosition.SpanData != null) { var spanData = FindReferenceInfo(referencePosition.SpanData.Value); if (spanData != null) { return(GoToTarget(spanData, false, false, options)); } } return(false); }