GUI/VSCodeUpdaterGUI.xaml

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="VSCode Updater"
    MinHeight="750"
    MinWidth="1200"
    Width="1200"
    Height="750"
    Background="#E6F0FF"
    WindowStartupLocation="CenterScreen"
    ResizeMode="CanResize">
 
    <Grid Margin="10">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/> <!-- Status + Task -->
            <RowDefinition Height="Auto"/> <!-- Buttons + DataGrid -->
            <RowDefinition Height="180"/> <!-- Command -->
            <RowDefinition Height="180"/> <!-- Log -->
        </Grid.RowDefinitions>
 
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
 
        <!-- STATUS -->
        <StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,0,10,0">
            <TextBlock x:Name="TxtStatus"
                    FontSize="16"
                    FontWeight="Bold"
                    Foreground="Black"
                    Margin="0,0,0,12"/>
            <TextBlock Text="Active Version:" FontWeight="Bold" FontSize="13" Foreground="Black"/>
            <TextBox x:Name="TxtActiveVersion" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
            <TextBox x:Name="TxtSymlinkTarget" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
            <TextBox x:Name="TxtSymlinkValid" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
            <TextBox x:Name="TxtLastUpdate" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
            <TextBox x:Name="TxtFallbackReason" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
        </StackPanel>
 
        <!-- TASK VIEWER -->
        <StackPanel Grid.Row="0" Grid.Column="2" Margin="20,0,0,5" HorizontalAlignment="Left" VerticalAlignment="Top">
            <TextBlock Text="Task Viewer" FontWeight="Bold" Foreground="Black" FontSize="13" Margin="0,0,0,4" HorizontalAlignment="Center"/>
            <RichTextBox x:Name="TxtTaskViewer"
                         Height="90"
                         Width="250"
                         Background="#1E1E1E"
                         Foreground="White"
                         Padding="6"
                         VerticalScrollBarVisibility="Auto"
                         IsReadOnly="True"/>
            <Button x:Name="BtnRestartSetup" Content="Restart Setup" Height="26" Padding="3,2"/>
        </StackPanel>
 
        <!-- BUTTONS -->
        <StackPanel Grid.Row="1" Grid.Column="0" Margin="0,0,10,0">
            <Button x:Name="BtnUpdate" Content="Update VS Code" Height="26" Padding="3,2" Margin="0,0,0,6"/>
            <Button x:Name="BtnRollback" Content="Rollback" Height="26" Padding="3,2" Margin="0,0,0,6"/>
            <Button x:Name="BtnSwitch" Content="Switch Version" Height="26" Padding="3,2" Margin="0,0,0,6"/>
            <Button x:Name="BtnValidateSymlink" Content="Validate Symlink" Height="26" Padding="3,2" Margin="0,0,0,6"/>
        </StackPanel>
 
        <StackPanel Grid.Row="1" Grid.Column="1" Margin="0,0,10,0">
            <Button x:Name="BtnDashboard" Content="Open Dashboard" Height="26" Padding="3,2" Margin="0,0,0,6"/>
            <Button x:Name="BtnSafeMode" Content="Run Safe Mode" Height="26" Padding="3,2" Margin="0,0,0,6"/>
            <CheckBox x:Name="ChkSafeMode" Content="Safe Mode Enabled" Margin="0,6,0,0"/>
        </StackPanel>
 
        <DataGrid x:Name="DgVersions"
                Grid.Row="1"
                Grid.Column="2"
                Height="180"
                Margin="10,0,0,0"
                AutoGenerateColumns="False"
                IsReadOnly="True"
                HeadersVisibility="Column"
                GridLinesVisibility="All"
                SelectionMode="Single"
                SelectionUnit="FullRow"
                EnableRowVirtualization="False"
                EnableColumnVirtualization="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Version" Binding="{Binding Version}" Width="180"/>
                <DataGridTextColumn Header="Path" Binding="{Binding Path}" Width="*"/>
                <DataGridTextColumn Header="Last Modified" Binding="{Binding LastModified, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" Width="150"/>
            </DataGrid.Columns>
        </DataGrid>
 
        <!-- COMMAND WINDOW -->
        <StackPanel Grid.Row="2" Grid.ColumnSpan="3" Margin="0,10,0,0">
            <TextBlock Text="Command Output" FontWeight="Bold" Foreground="Black" FontSize="13" Margin="0,0,0,4"/>
            <RichTextBox x:Name="TxtCommandOutput"
                         Height="160"
                         Background="#1E1E1E"
                         Foreground="White"
                         Padding="0,0,0,10"
                         VerticalScrollBarVisibility="Auto"
                         IsReadOnly="True"/>
        </StackPanel>
 
        <!-- LOG VIEWER -->
        <Grid Grid.Row="3" Grid.ColumnSpan="3" Margin="0,10,0,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/> <!-- Log controls -->
                <RowDefinition Height="*"/> <!-- Log viewer -->
            </Grid.RowDefinitions>
 
            <!-- LOG CONTROL BAR -->
            <StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,6">
                <Button x:Name="BtnPauseLog" Content="Pause Log" Width="90" Height="26" Margin="0,0,10,0"/>
                <CheckBox x:Name="ChkAutoScroll" Content="Auto Scroll" Margin="0,0,20,0" VerticalAlignment="Center"/>
                <TextBox x:Name="TxtSearchLogBar" Width="180" Height="24" Margin="0,0,10,0"/>
                <Button x:Name="BtnSearchLog" Content="Search" Width="70" Height="24"/>
            </StackPanel>
 
            <!-- LOG VIEWER -->
            <TextBox x:Name="TxtLog"
                     Grid.Row="1"
                     Height="150"
                     TextWrapping="Wrap"
                     VerticalScrollBarVisibility="Auto"
                     Padding="0,0,0,10"
                     IsReadOnly="True"/>
        </Grid>
    </Grid>
</Window>