Esempio n. 1
0
        protected override async Task <ICocoaDifferenceViewer> CreateDifferenceViewAsync(IDifferenceBuffer diffBuffer, ITextViewRoleSet previewRoleSet, DifferenceViewMode mode, double zoomLevel, CancellationToken cancellationToken)
        {
            var diffViewer = _differenceViewerService.CreateDifferenceView(diffBuffer, previewRoleSet);

            diffViewer.ViewMode = mode;
            const string DiffOverviewMarginName = "deltadifferenceViewerOverview";

            if (mode == DifferenceViewMode.RightViewOnly)
            {
                diffViewer.RightHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }
            else if (mode == DifferenceViewMode.LeftViewOnly)
            {
                diffViewer.LeftHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }
            else
            {
                Contract.ThrowIfFalse(mode == DifferenceViewMode.Inline);
                diffViewer.InlineHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }

            // We use ConfigureAwait(true) to stay on the UI thread.
            await diffViewer.SizeToFitAsync(ThreadingContext, cancellationToken : cancellationToken).ConfigureAwait(true);

            return(diffViewer);
        }
Esempio n. 2
0
        protected override async Task <ICocoaDifferenceViewer> CreateDifferenceViewAsync(IDifferenceBuffer diffBuffer, ITextViewRoleSet previewRoleSet, DifferenceViewMode mode, double zoomLevel, CancellationToken cancellationToken)
        {
            var diffViewer = _differenceViewerService.CreateDifferenceView(diffBuffer, previewRoleSet);

            diffViewer.ViewMode = mode;

            // We use ConfigureAwait(true) to stay on the UI thread.
            await diffViewer.SizeToFitAsync(ThreadingContext, cancellationToken : cancellationToken).ConfigureAwait(true);

            return(diffViewer);
        }
        public async Task <object> CreateDiffViewElementAsync(IDifferenceBuffer diffBuffer)
        {
            var diffView = _diffFactory.CreateDifferenceView(diffBuffer, _previewRoleSet);

            diffView.ViewMode              = DifferenceViewMode.Inline;
            diffView.InlineView.ZoomLevel *= 1.0;

            //FIXME: mac port
            //diffView.InlineView.VisualElement.Focusable = false;
            //diffView.InlineHost.GetTextViewMargin ("deltadifferenceViewerOverview").VisualElement.Visibility = System.Windows.Visibility.Collapsed;

            await diffView.SizeToFitAsync().ConfigureAwait(true);

            return(diffView.VisualElement);
        }
        private async Task <object> CreateNewDifferenceViewerAsync(
            PreviewWorkspace leftWorkspace, PreviewWorkspace rightWorkspace,
            IProjectionBuffer originalBuffer, IProjectionBuffer changedBuffer,
#pragma warning disable IDE0060 // Remove unused parameter
            double zoomLevel, CancellationToken cancellationToken)
#pragma warning restore IDE0060 // Remove unused parameter
        {
            cancellationToken.ThrowIfCancellationRequested();

            // leftWorkspace can be null if the change is adding a document.
            // rightWorkspace can be null if the change is removing a document.
            // However both leftWorkspace and rightWorkspace can't be null at the same time.
            Contract.ThrowIfTrue((leftWorkspace == null) && (rightWorkspace == null));

            var diffBuffer = _differenceBufferService.CreateDifferenceBuffer(
                originalBuffer, changedBuffer,
                new StringDifferenceOptions(), disableEditing: true);

            var diffViewer = _differenceViewerService.CreateDifferenceView(diffBuffer, _previewRoleSet);

            diffViewer.Closed += (s, e) =>
            {
                // Workaround Editor bug.  The editor has an issue where they sometimes crash when
                // trying to apply changes to projection buffer.  So, when the user actually invokes
                // a SuggestedAction we may then edit a text buffer, which the editor will then
                // try to propagate through the projections we have here over that buffer.  To ensure
                // that that doesn't happen, we clear out the projections first so that this crash
                // won't happen.
                originalBuffer.DeleteSpans(0, originalBuffer.CurrentSnapshot.SpanCount);
                changedBuffer.DeleteSpans(0, changedBuffer.CurrentSnapshot.SpanCount);

                leftWorkspace?.Dispose();
                leftWorkspace = null;

                rightWorkspace?.Dispose();
                rightWorkspace = null;
            };

            //const string DiffOverviewMarginName = "deltadifferenceViewerOverview";
            if (leftWorkspace == null)
            {
                diffViewer.ViewMode = DifferenceViewMode.RightViewOnly;
                //diffViewer.RightView.ZoomLevel *= zoomLevel;
                //diffViewer.RightHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }
            else if (rightWorkspace == null)
            {
                diffViewer.ViewMode = DifferenceViewMode.LeftViewOnly;
                //diffViewer.LeftView.ZoomLevel *= zoomLevel;
                //diffViewer.LeftHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }
            else
            {
                diffViewer.ViewMode = DifferenceViewMode.Inline;
                //diffViewer.InlineView.ZoomLevel *= zoomLevel;
                //diffViewer.InlineHost.GetTextViewMargin(DiffOverviewMarginName).VisualElement.Hidden = true;
            }

            //TODO: Mac // Disable focus / tab stop for the diff viewer.
            //diffViewer.RightView.VisualElement.Focusable = false;
            //diffViewer.LeftView.VisualElement.Focusable = false;
            //diffViewer.InlineView.VisualElement.Focusable = false;

            // This code path must be invoked on UI thread.
            AssertIsForeground();

            // We use ConfigureAwait(true) to stay on the UI thread.
            await diffViewer.SizeToFitAsync(ThreadingContext).ConfigureAwait(true);

            leftWorkspace?.EnableDiagnostic();
            rightWorkspace?.EnableDiagnostic();

            return(new DifferenceViewerPreview(diffViewer));
        }