<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->

<Window x:Class="WixToolset.WixBA.RootView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wixba="clr-namespace:WixToolset.WixBA"
        MinWidth="550"
        MinHeight="400"
        Width="750"
        Height="400"
        AllowsTransparency="False"
        Background="{x:Null}"
        Closing="Window_Closing"
        ResizeMode="CanResizeWithGrip"
        WindowStartupLocation="CenterScreen"
        WindowStyle="ThreeDBorderWindow">

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/WixToolset.WixBA;component/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <Border Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"
            BorderBrush="{DynamicResource {x:Static SystemColors.ActiveBorderBrushKey}}"
            BorderThickness="0">

        <DockPanel x:Name="AppArtBoardArea"
                   Margin="20, 10">

            <DockPanel x:Name="ActionArea"
                       DockPanel.Dock="Bottom">

                <Grid x:Name="ActionGrid">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" MinWidth="150" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>

                    <StackPanel x:Name="LeftMarqueeDcIsland"
                                Grid.Column="0"
                                VerticalAlignment="Center"
                                DataContext="{Binding UpdateViewModel}">
                        <ProgressBar x:Name="CheckingUpdatesProgress"
                                     MinHeight="10"
                                     IsIndeterminate="{Binding CheckingEnabled}"
                                     Style="{DynamicResource UpdateMarqueeStyle}"
                                     Visibility="{Binding CheckingEnabled,
                                                          Converter={StaticResource BooleanToVisibilityConverter}}" />
                    </StackPanel>

                    <StackPanel x:Name="InitiateActionArea"
                                Grid.Column="1"
                                Margin="30, 0, 0, 0"
                                HorizontalAlignment="Right"
                                Orientation="Horizontal">
                        <!-- Displayed from left to right, when ordered from top to bottom.  Most preferred is at the top. -->
                        <StackPanel x:Name="UpdateBtnDcIsland"
                                    DataContext="{Binding UpdateViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button AutomationProperties.HelpText="An update is available. Click to get the update"
                                    AutomationProperties.Name="Update"
                                    Command="{Binding UpdateCommand}"
                                    Content="Update"
                                    Style="{DynamicResource ActionButtonStyle}"
                                    Visibility="{Binding CanUpdate,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                        <StackPanel x:Name="InstallBtnDcIsland"
                                    DataContext="{Binding InstallationViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button AutomationProperties.HelpText="Click to accept license and install"
                                    AutomationProperties.Name="Install"
                                    Command="{Binding InstallCommand}"
                                    Content="_Install"
                                    IsDefault="True"
                                    Style="{DynamicResource ActionButtonStyle}"
                                    Visibility="{Binding InstallEnabled,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                        <StackPanel x:Name="RepairBtnDcIsland"
                                    DataContext="{Binding InstallationViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button x:Name="RepairButton"
                                    AutomationProperties.HelpText="Click to Repair"
                                    AutomationProperties.Name="Repair"
                                    Command="{Binding RepairCommand}"
                                    Content="Repair"
                                    Style="{DynamicResource ActionButtonStyle}"
                                    Visibility="{Binding RepairEnabled,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                        <StackPanel x:Name="UninstallBtnDcIsland"
                                    DataContext="{Binding InstallationViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button AutomationProperties.HelpText="Click to Uninstall"
                                    AutomationProperties.Name="Uninstall"
                                    Command="{Binding UninstallCommand}"
                                    Content="Uninstall"
                                    Style="{DynamicResource ActionButtonStyle}"
                                    Visibility="{Binding UninstallEnabled,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                        <StackPanel x:Name="TryAgainBtnDcIsland"
                                    DataContext="{Binding InstallationViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    AutomationProperties.HelpText="Click to try again"
                                    AutomationProperties.Name="Try Again?"
                                    Command="{Binding TryAgainCommand}"
                                    Content="Try Again?"
                                    Style="{DynamicResource ActionButtonStyle}"
                                    Visibility="{Binding IsFailedCompletion,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>

                        <!-- Final Actions - only one of these is expected to be displayed, if any -->
                        <StackPanel x:Name="CloseBtnDcIsland"
                                    HorizontalAlignment="Right"
                                    DataContext="{Binding InstallationViewModel}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button x:Name="CloseButton"
                                    AutomationProperties.HelpText="Click to Close"
                                    AutomationProperties.Name="Close"
                                    Command="{Binding CloseCommand}"
                                    Content="Close"
                                    Style="{DynamicResource FinalActionButtonStyle}"
                                    Visibility="{Binding IsSuccessfulCompletion,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                        <StackPanel x:Name="CancelBtnDcIsland"
                                    HorizontalAlignment="Right"
                                    DataContext="{Binding}"
                                    Style="{DynamicResource ActionBtnStkPnlStyle}">
                            <Button AutomationProperties.HelpText="Press to Cancel"
                                    AutomationProperties.Name="Cancel"
                                    Command="{Binding CancelCommand}"
                                    Content="Cancel"
                                    Style="{DynamicResource FinalActionButtonStyle}"
                                    Visibility="{Binding CancelAvailable,
                                                         Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </StackPanel>
                    </StackPanel>
                </Grid>
            </DockPanel>

            <StackPanel x:Name="FinalStatusArea"
                        DataContext="{Binding InstallationViewModel}"
                        HorizontalAlignment="Right"
                        Margin="0,10,0,20"
                        Orientation="Horizontal"
                        Visibility="{Binding IsComplete,
                                             Converter={StaticResource BooleanToVisibilityConverter}}"
                        DockPanel.Dock="Bottom">
                <TextBlock x:Name="StatusTextBlk"
                           Style="{DynamicResource LabelTextBlkStyle}"
                           Text="{Binding StatusText, StringFormat={}{0}:}"
                           TextBlock.FontWeight="Bold" />
                <Button x:Name="ViewLogLink"
                        Margin="10,2,10,0"
                        Command="{Binding OpenLogCommand}"
                        Style="{StaticResource HyperlinkedButtonStyle}">
                    <TextBlock>
                            <Hyperlink Command="{Binding OpenLogCommand}"><Run FontSize="{DynamicResource FontSizeButton}" Text="View Log" /></Hyperlink>
                    </TextBlock>
                </Button>
                <Button x:Name="ViewLogFolderLink"
                            Command="{Binding OpenLogFolderCommand}"
                            Style="{StaticResource HyperlinkedButtonStyle}">
                    <TextBlock>
                            <Hyperlink Command="{Binding OpenLogFolderCommand}"><Run FontSize="{DynamicResource FontSizeButton}" Text="View Log Folder" /></Hyperlink>
                    </TextBlock>
                </Button>
            </StackPanel>

            <StackPanel x:Name="StatusStkPnlDcIsland"
                        Margin="0,10"
                        DataContext="{Binding ProgressViewModel}"
                        DockPanel.Dock="Bottom">

                <StackPanel x:Name="ActionPackageNameTextStkPnl"
                            VerticalAlignment="Top">
                    <TextBlock Style="{StaticResource StatusTextStyle}"
                               Text="{Binding Message}"
                               TextWrapping="WrapWithOverflow"
                               Visibility="{Binding ProgressEnabled,
                                                    Converter={StaticResource BooleanToVisibilityConverter}}" />
                </StackPanel>

                <StackPanel x:Name="ActionProgressStkPnl"
                            Margin="0,5,0,0">
                    <ProgressBar x:Name="ActionProgress"
                                 Height="20"
                                 VerticalAlignment="Center"
                                 Style="{DynamicResource ActionProgressStyle}"
                                 Visibility="{Binding ProgressEnabled,
                                                      Converter={StaticResource BooleanToVisibilityConverter}}"
                                 Value="{Binding Progress}" />
                </StackPanel>
            </StackPanel>

            <StackPanel x:Name="TitleAndLogoStkPnl"
                        DockPanel.Dock="Top">
                <Grid x:Name="TitleGrid">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>

                    <TextBlock x:Name="TitleTextBlk"
                               Grid.Column="0"
                               Style="{DynamicResource TitleTextBlkStyle}"
                               Text="{Binding Title,
                                              Mode=OneTime}" />
                    <Image x:Name="Logo"
                           Grid.Column="2"
                           Style="{DynamicResource LogoStyle}">
                    </Image>
                </Grid>
            </StackPanel>

            <Grid x:Name="MainStkPnl">
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="Auto" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="1*" />
                    <ColumnDefinition Width="4*" MinWidth="200" />
                </Grid.ColumnDefinitions>

                <Grid x:Name="SkuInfo"
                      Grid.Column="0"
                      Grid.Row="0"
                      DataContext="{Binding InstallationViewModel}">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>

                    <TextBlock x:Name="SkuPublisherLabel"
                               Grid.Row="0"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="Publisher:" />
                    <TextBlock x:Name="SkuPublisherData"
                               Grid.Row="0"
                               Grid.Column="1"
                               Style="{DynamicResource DataTextBlkStyle}"
                               Text="{Binding Publisher,
                                              Mode=OneTime}" />

                    <TextBlock x:Name="SkuVersionLabel"
                               Grid.Row="1"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="Version:" />
                    <TextBlock Grid.Row="1"
                               Grid.Column="1"
                               Style="{DynamicResource DataTextBlkStyle}"
                               Text="{Binding Version}" />

                    <TextBlock x:Name="SkuLicenseLabel"
                               Grid.Row="2"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="License:" />
                    <Button x:Name="SkuLicenseBtn"
                            Grid.Row="2"
                            Grid.Column="1"
                            HorizontalAlignment="Left"
                            AutomationProperties.HelpText="View the license"
                            AutomationProperties.Name="License"
                            Command="{Binding LicenseCommand}"
                            KeyboardNavigation.IsTabStop="False"
                            Style="{StaticResource HyperlinkedButtonStyle}">
                        <TextBlock HorizontalAlignment="Left">
                            <Hyperlink Command="{Binding LicenseCommand}"
                                       IsEnabled="True"
                                       KeyboardNavigation.IsTabStop="False"><Run FontSize="{DynamicResource FontSizeButton}" Text="View License" /></Hyperlink>
                        </TextBlock>
                    </Button>

                    <TextBlock x:Name="SkuNewsLabel"
                               Grid.Row="3"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="News:" />
                    <Button x:Name="SkuNewsBtn"
                            Grid.Row="3"
                            Grid.Column="1"
                            HorizontalAlignment="Left"
                            AutomationProperties.HelpText="Latest News"
                            AutomationProperties.Name="News"
                            Command="{Binding LaunchNewsCommand}"
                            KeyboardNavigation.IsTabStop="False"
                            Style="{StaticResource HyperlinkedButtonStyle}">
                        <TextBlock HorizontalAlignment="Left">
                            <Hyperlink Command="{Binding LaunchNewsCommand}"
                                       IsEnabled="True"
                                       KeyboardNavigation.IsTabStop="False"><Run FontSize="{DynamicResource FontSizeButton}" Text="Latest News" /></Hyperlink>
                        </TextBlock>
                    </Button>

                    <TextBlock x:Name="SkuSupportLabel"
                               Grid.Row="4"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="Support:" />
                    <Button x:Name="SkuSupportBtn"
                            Grid.Row="4"
                            Grid.Column="1"
                            HorizontalAlignment="Left"
                            AutomationProperties.HelpText="View Home Page for Support"
                            AutomationProperties.Name="Home Page"
                            Command="{Binding LaunchHomePageCommand}"
                            KeyboardNavigation.IsTabStop="False"
                            Style="{StaticResource HyperlinkedButtonStyle}">
                        <TextBlock HorizontalAlignment="Left">
                            <Hyperlink Command="{Binding LaunchHomePageCommand}"
                                       IsEnabled="True"
                                       KeyboardNavigation.IsTabStop="False"><Run FontSize="{DynamicResource FontSizeButton}" Text="{Binding SupportUrl, Mode=OneTime}" /></Hyperlink>
                        </TextBlock>
                    </Button>

                    <TextBlock x:Name="SkuVSExtensionLabel1"
                               Grid.Row="5"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="Visual Studio" />
                    <TextBlock x:Name="SkuVSExtensionLabel2"
                               Grid.Row="6"
                               Grid.Column="0"
                               Style="{DynamicResource LabelTextBlkStyle}"
                               Text="Extension:" />
                    <Button x:Name="SkuVSExtensionBtn"
                            Grid.Row="6"
                            Grid.Column="1"
                            HorizontalAlignment="Left"
                            AutomationProperties.HelpText="View Releases Page for VS Extension"
                            AutomationProperties.Name="Releases Page"
                            Command="{Binding LaunchVSExtensionPageCommand}"
                            KeyboardNavigation.IsTabStop="False"
                            Style="{StaticResource HyperlinkedButtonStyle}">
                        <TextBlock HorizontalAlignment="Left">
                            <Hyperlink Command="{Binding LaunchVSExtensionPageCommand}"
                                       IsEnabled="True"
                                       KeyboardNavigation.IsTabStop="False"><Run FontSize="{DynamicResource FontSizeButton}" Text="{Binding VSExtensionUrl, Mode=OneTime}" /></Hyperlink>
                        </TextBlock>
                    </Button>
                </Grid>

                <DockPanel x:Name="UpdateChangesStkPnlDcIsland"
                           Grid.Row="0"
                           Grid.Column="2"
                           DataContext="{Binding UpdateViewModel}"
                           Visibility="{Binding IsUpdateAvailable,
                                                Converter={StaticResource BooleanToVisibilityConverter}}">

                    <Grid x:Name="UpdateInfoGrid"
                          DockPanel.Dock="Top">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <TextBlock x:Name="UpdateTitleLabel"
                                   Grid.Row="0"
                                   Grid.Column="0"
                                   Style="{DynamicResource LabelTextBlkStyle}"
                                   Text="Available Update:" />

                        <TextBlock x:Name="UpdateVersionLabel"
                                   Grid.Row="0"
                                   Grid.Column="1"
                                   Style="{DynamicResource DataTextBlkStyle}"
                                   Text="{Binding UpdateVersion}" />
                    </Grid>

                    <WebBrowser DockPanel.Dock="Bottom"
                                wixba:BrowserProperties.HtmlDoc="{Binding UpdateChanges}" />
                </DockPanel>

                <TextBlock x:Name="DowngradeMessageTextBlk"
                           Grid.Row="1"
                           Grid.Column="0"
                           Grid.ColumnSpan="3"
                           DataContext="{Binding InstallationViewModel}"
                           Style="{DynamicResource LabelTextBlkStyle}"
                           Text="{Binding DowngradeMessage}"
                           Visibility="{Binding Downgrade,
                                                Converter={StaticResource BooleanToVisibilityConverter}}" />
            </Grid>
        </DockPanel>
    </Border>
</Window>