Exemple #1
0
        private void InitializePreviewElement(object previewContent)
        {
            FrameworkElement previewElement = null;
            if (previewContent is IWpfDifferenceViewer)
            {
                _previewDiffViewer = previewContent as IWpfDifferenceViewer;
                previewElement = _previewDiffViewer.VisualElement;
                PreviewDockPanel.Background = _previewDiffViewer.InlineView.Background;
            }
            else if (previewContent is string)
            {
                previewElement = GetPreviewForString(previewContent as string);
            }
            else if (previewContent is FrameworkElement)
            {
                previewElement = previewContent as FrameworkElement;
            }

            if (previewElement != null)
            {
                HeaderSeparator.Visibility = Visibility.Visible;
                PreviewDockPanel.Visibility = Visibility.Visible;
                PreviewScrollViewer.Content = previewElement;
                previewElement.VerticalAlignment = VerticalAlignment.Top;
                previewElement.HorizontalAlignment = HorizontalAlignment.Left;
            }

            // 1. Width of the header section should not exceed the width of the preview content.
            // In other words, the text we put in the header at the top of the preview pane
            // should not cause the preview pane itself to grow wider than the width required to
            // display the preview content at the bottom of the pane.
            // 2. Adjust the height of the header section so that it displays only three lines worth
            // by default.
            AdjustWidthAndHeight(previewElement);
        }
Exemple #2
0
        private void InitializePreviewElement(object previewContent)
        {
            FrameworkElement previewElement = null;

            if (previewContent is IWpfDifferenceViewer)
            {
                _previewDiffViewer          = previewContent as IWpfDifferenceViewer;
                previewElement              = _previewDiffViewer.VisualElement;
                PreviewDockPanel.Background = _previewDiffViewer.InlineView.Background;
            }
            else if (previewContent is string)
            {
                previewElement = GetPreviewForString(previewContent as string);
            }
            else if (previewContent is FrameworkElement)
            {
                previewElement = previewContent as FrameworkElement;
            }

            if (previewElement != null)
            {
                PreviewDockPanel.Visibility        = Visibility.Visible;
                PreviewScrollViewer.Content        = previewElement;
                previewElement.VerticalAlignment   = VerticalAlignment.Top;
                previewElement.HorizontalAlignment = HorizontalAlignment.Left;
            }

            // 1. Width of the header section should not exceed the width of the preview content.
            // In other words, the text we put in the header at the top of the preview pane
            // should not cause the preview pane itself to grow wider than the width required to
            // display the preview content at the bottom of the pane.
            // 2. Adjust the height of the header section so that it displays only three lines worth
            // by default.
            AdjustWidthAndHeight(previewElement);
        }
 public SizeToFitHelper(IWpfDifferenceViewer diffViewer, double minWidth)
 {
     _calculationStarted = 0;
     _diffViewer         = diffViewer;
     _minWidth           = minWidth;
     _taskCompletion     = new TaskCompletionSource <object>();
 }
Exemple #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DisposableDifferenceViewerControl"/> class.
        /// </summary>
        /// <param name="differenceViewer"><see cref="IWpfDifferenceViewer"/> instance.</param>
        /// <param name="description">Description of the changes. Optional.</param>
        /// <param name="additionalContent">Additional content to display at the bottom. Optional.</param>
        internal DisposableDifferenceViewerControl(
            IWpfDifferenceViewer differenceViewer,
            string description = null,
            FrameworkElement additionalContent = null)
        {
            this.InitializeComponent();

            this.differenceViewer = Requires.NotNull(differenceViewer, nameof(differenceViewer));

            if (!string.IsNullOrWhiteSpace(description))
            {
                var descriptionBlock = new TextBlock
                {
                    TextWrapping = TextWrapping.Wrap,
                    Padding      = new Thickness(5),
                };

                descriptionBlock.Inlines.Add(new Run()
                {
                    Text = description,
                });

                this.StackPanelContent.Children.Add(descriptionBlock);
            }

            this.StackPanelContent.Children.Add(this.differenceViewer.VisualElement);

            if (additionalContent != null)
            {
                this.StackPanelContent.Children.Add(additionalContent);
            }
        }
 public SizeToFitHelper(IWpfDifferenceViewer diffViewer, double minWidth)
 {
     _calculationStarted = 0;
     _diffViewer = diffViewer;
     _minWidth = minWidth;
     _taskCompletion = new TaskCompletionSource<object>();
 }
Exemple #6
0
 /// <inheritdoc/>
 public void Dispose()
 {
     if (this.differenceViewer != null)
     {
         this.differenceViewer.Close();
         this.differenceViewer = null;
     }
 }
 public SizeToFitHelper(IThreadingContext threadingContext, IWpfDifferenceViewer diffViewer, double minWidth)
     : base(threadingContext)
 {
     _calculationStarted = 0;
     _diffViewer         = diffViewer;
     _minWidth           = minWidth;
     _taskCompletion     = new TaskCompletionSource <object>();
 }
 public SizeToFitHelper(
     IThreadingContext threadingContext,
     IWpfDifferenceViewer diffViewer,
     double minWidth
     ) : base(threadingContext)
 {
     _diffViewer = diffViewer;
     _minWidth   = minWidth;
 }
        private FrameworkElement CreatePreviewElement(IReadOnlyList <object> previewItems)
        {
            if (previewItems == null || previewItems.Count == 0)
            {
                return(null);
            }

            const int MaxItems = 3;

            if (previewItems.Count > MaxItems)
            {
                previewItems = previewItems.Take(MaxItems).Concat("...").ToList();
            }

            var grid = new Grid();

            for (var i = 0; i < previewItems.Count; i++)
            {
                var previewItem = previewItems[i];

                FrameworkElement previewElement = null;
                if (previewItem is IWpfDifferenceViewer)
                {
                    _previewDiffViewer          = (IWpfDifferenceViewer)previewItem;
                    previewElement              = _previewDiffViewer.VisualElement;
                    PreviewDockPanel.Background = _previewDiffViewer.InlineView.Background;
                }
                else if (previewItem is string)
                {
                    previewElement = GetPreviewForString((string)previewItem);
                }
                else if (previewItem is FrameworkElement)
                {
                    previewElement = (FrameworkElement)previewItem;
                }

                var rowDefinition = i == 0 ? new RowDefinition() : new RowDefinition()
                {
                    Height = GridLength.Auto
                };
                grid.RowDefinitions.Add(rowDefinition);

                Grid.SetRow(previewElement, grid.RowDefinitions.IndexOf(rowDefinition));
                grid.Children.Add(previewElement);

                if (i == 0)
                {
                    grid.Width = previewElement.Width;
                }
            }

            var preview = grid.Children.Count == 0 ? (FrameworkElement)grid.Children[0] : grid;

            return(preview);
        }
        public void Dispose()
        {
            GC.SuppressFinalize(this);

            if (_viewer != null && !_viewer.IsClosed)
            {
                _viewer.Close();
            }

            _viewer = null;
        }
        public void Dispose()
        {
            GC.SuppressFinalize(this);

            if (_viewer != null && !_viewer.IsClosed)
            {
                _viewer.Close();
            }

            _viewer = null;
        }
        public static Task SizeToFitAsync(
            this IWpfDifferenceViewer diffViewer,
            IThreadingContext threadingContext,
            double minWidth = 400.0,
            CancellationToken cancellationToken = default
            )
        {
            var helper = new SizeToFitHelper(threadingContext, diffViewer, minWidth);

            return(helper.SizeToFitAsync(cancellationToken));
        }
Exemple #13
0
        /// <inheritdoc/>
        public void Dispose()
        {
            if (this.differenceViewer != null)
            {
                this.differenceViewer.Close();
                this.differenceViewer = null;
            }

            if (ApplyFixesInDocument != null)
            {
                foreach (Delegate x in ApplyFixesInDocument?.GetInvocationList())
                {
                    ApplyFixesInDocument -= (EventHandler <ApplyFixEventArgs>)x;
                }

                System.Diagnostics.Debug.Assert(ApplyFixesInDocument == null, "Should not have hooked events.");
            }
        }
 public DifferenceViewerPreview(IWpfDifferenceViewer viewer)
 {
     Contract.ThrowIfNull(viewer);
     _viewer = viewer;
 }
        public static void SizeToFit(this IWpfDifferenceViewer diffViewer, double minWidth = 400.0)
        {
            var helper = new SizeToFitHelper(diffViewer, minWidth);

            helper.SizeToFit();
        }
Exemple #16
0
        private FrameworkElement CreatePreviewElement(IReadOnlyList<object> previewItems)
        {
            if (previewItems == null || previewItems.Count == 0)
            {
                return null;
            }

            const int MaxItems = 3;
            if (previewItems.Count > MaxItems)
            {
                previewItems = previewItems.Take(MaxItems).Concat("...").ToList();
            }

            var grid = new Grid();

            for (var i = 0; i < previewItems.Count; i++)
            {
                var previewItem = previewItems[i];

                FrameworkElement previewElement = null;
                if (previewItem is IWpfDifferenceViewer)
                {
                    _previewDiffViewer = (IWpfDifferenceViewer)previewItem;
                    previewElement = _previewDiffViewer.VisualElement;
                    PreviewDockPanel.Background = _previewDiffViewer.InlineView.Background;
                }
                else if (previewItem is string)
                {
                    previewElement = GetPreviewForString((string)previewItem);
                }
                else if (previewItem is FrameworkElement)
                {
                    previewElement = (FrameworkElement)previewItem;
                }

                var rowDefinition = i == 0 ? new RowDefinition() : new RowDefinition() { Height = GridLength.Auto };
                grid.RowDefinitions.Add(rowDefinition);

                Grid.SetRow(previewElement, grid.RowDefinitions.IndexOf(rowDefinition));
                grid.Children.Add(previewElement);

                if (i == 0)
                {
                    grid.Width = previewElement.Width;
                }
            }

            var preview = grid.Children.Count == 0 ? (FrameworkElement)grid.Children[0] : grid;
            return preview;
        }
Exemple #17
0
 public DifferenceViewerPreview(IWpfDifferenceViewer viewer)
 {
     _viewer = viewer ?? throw new FormatException("Viewer null");
 }
 public DifferenceViewerPreview(IWpfDifferenceViewer viewer)
 {
     Contract.ThrowIfNull(viewer);
     _viewer = viewer;
 }
        public static Task SizeToFitAsync(this IWpfDifferenceViewer diffViewer, IThreadingContext threadingContext, double minWidth = 400.0)
        {
            var helper = new SizeToFitHelper(threadingContext, diffViewer, minWidth);

            return(helper.SizeToFitAsync());
        }
Exemple #20
0
        public PreviewPane(Image severityIcon, string id, string title, string helpMessage, string description, string helpLink,
                           bool telemetry, object previewContent, IServiceProvider serviceProvider)
        {
            InitializeComponent();

            InitializeHyperlinkStyles();

            if ((severityIcon != null) && !string.IsNullOrWhiteSpace(id) && !string.IsNullOrWhiteSpace(title))
            {
                HeaderStackPanel.Visibility = Visibility.Visible;

                SeverityIconBorder.Child = severityIcon;

                // Set the initial title text to three lines worth so that we can measure the pixel height
                // that WPF requires to render three lines of text under the current font and DPI settings.
                TitleRun.Text = s_dummyThreeLineTitle;
                TitleTextBlock.Measure(availableSize: s_infiniteSize);
                _heightForThreeLineTitle = TitleTextBlock.DesiredSize.Height;

                // Now set the actual title text.
                TitleRun.Text = title;

                Uri helpUri;
                if (BrowserHelper.TryGetUri(helpLink, out helpUri))
                {
                    InitializeDiagnosticIdHyperLink(id, helpUri, bingLink: false);
                }
                else
                {
                    InitializeDiagnosticIdHyperLink(id, BrowserHelper.CreateBingQueryUri(id, helpMessage), bingLink: true);
                }

                if (!string.IsNullOrWhiteSpace(description))
                {
                    DescriptionParagraph.Inlines.Add(description);
                }
            }

            FrameworkElement previewElement = null;

            if (previewContent is IWpfDifferenceViewer)
            {
                _previewDiffViewer          = previewContent as IWpfDifferenceViewer;
                previewElement              = _previewDiffViewer.VisualElement;
                PreviewDockPanel.Background = _previewDiffViewer.InlineView.Background;
            }
            else if (previewContent is string)
            {
                previewElement = GetPreviewForString(previewContent as string);
            }
            else if (previewContent is FrameworkElement)
            {
                previewElement = previewContent as FrameworkElement;
            }
            else
            {
                // previewContent is either null or some type that we don't know how to display.
                previewElement = GetEmptyPreview();
            }

            PreviewScrollViewer.Content        = previewElement;
            previewElement.VerticalAlignment   = VerticalAlignment.Top;
            previewElement.HorizontalAlignment = HorizontalAlignment.Left;

            // 1. Width of the header section should not exceed the width of the preview content.
            // In other words, the text we put in the header at the top of the preview pane
            // should not cause the preview pane itself to grow wider than the width required to
            // display the preview content at the bottom of the pane.
            // 2. Adjust the height of the header section so that it displays only three lines worth
            // by default.
            AdjustWidthAndHeight(previewElement);

            _serviceProvider = serviceProvider;
            _errorId         = id;

            // save permission whether we are allowed to save data as it is or not.
            _telemetry = telemetry;
        }