Skip to content

Commit 64ff09f

Browse files
committed
Finalized GUI Window and corrected a helper
1 parent 8f9c1d1 commit 64ff09f

2 files changed

Lines changed: 68 additions & 106 deletions

File tree

GUI/VSCodeUpdaterGUI.xaml

Lines changed: 56 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -2,165 +2,118 @@
22
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
33
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
44
Title="VSCode Updater"
5-
Height="900"
6-
Width="1300"
5+
MinHeight="750"
6+
MinWidth="1200"
7+
Width="1200"
8+
Height="750"
9+
Background="#E6F0FF"
710
WindowStartupLocation="CenterScreen"
811
ResizeMode="CanResize">
912

10-
<Grid Margin="15">
11-
12-
<!-- ROW DEFINITIONS -->
13+
<Grid Margin="10">
1314
<Grid.RowDefinitions>
14-
<RowDefinition Height="Auto"/> <!-- Row 1: Status + Task -->
15-
<RowDefinition Height="*"/> <!-- Row 2: Buttons + DataGrid -->
16-
<RowDefinition Height="260"/> <!-- Row 3: Command Window -->
17-
<RowDefinition Height="300"/> <!-- Row 4: Log Viewer -->
15+
<RowDefinition Height="Auto"/> <!-- Status + Task -->
16+
<RowDefinition Height="Auto"/> <!-- Buttons + DataGrid -->
17+
<RowDefinition Height="180"/> <!-- Command -->
18+
<RowDefinition Height="180"/> <!-- Log -->
1819
</Grid.RowDefinitions>
1920

20-
<!-- COLUMN DEFINITIONS -->
2121
<Grid.ColumnDefinitions>
22-
<ColumnDefinition Width="260"/> <!-- Column 1 -->
23-
<ColumnDefinition Width="260"/> <!-- Column 2 -->
24-
<ColumnDefinition Width="*"/> <!-- Column 3 -->
22+
<ColumnDefinition Width="200"/>
23+
<ColumnDefinition Width="200"/>
24+
<ColumnDefinition Width="*"/>
2525
</Grid.ColumnDefinitions>
2626

27-
<!-- ===================================================== -->
28-
<!-- ROW 1: STATUS TEXT BOXES (COL 1–2) + TASK VIEWER (COL 3) -->
29-
<!-- ===================================================== -->
30-
31-
<!-- STATUS FIELDS -->
32-
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,0,20,0">
33-
<TextBlock x:Name="TxtStatus"
34-
FontSize="16"
35-
FontWeight="Bold"
36-
Margin="0,0,0,12"/>
37-
38-
<TextBox x:Name="TxtActiveVersion" FontSize="13" Margin="0,0,0,4" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
39-
<TextBox x:Name="TxtSymlinkTarget" FontSize="13" Margin="0,0,0,4" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
40-
<TextBox x:Name="TxtSymlinkValid" FontSize="13" Margin="0,0,0,4" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
41-
<TextBox x:Name="TxtLastUpdate" FontSize="13" Margin="0,0,0,4" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
42-
<TextBox x:Name="TxtFallbackReason" FontSize="13" Margin="0,0,0,4" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
27+
<!-- STATUS -->
28+
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,0,10,0">
29+
<TextBlock Text="Active Version:" FontWeight="Bold" FontSize="13" Foreground="Black"/>
30+
<TextBox x:Name="TxtActiveVersion" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
31+
<TextBox x:Name="TxtSymlinkTarget" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
32+
<TextBox x:Name="TxtSymlinkValid" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
33+
<TextBox x:Name="TxtLastUpdate" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
34+
<TextBox x:Name="TxtFallbackReason" FontSize="12" IsReadOnly="True" BorderThickness="0" Background="Transparent"/>
4335
</StackPanel>
4436

45-
<!-- TASK WINDOW -->
46-
<StackPanel Grid.Row="0" Grid.Column="2" Margin="10,0,0,0">
47-
<TextBlock Text="Task Viewer"
48-
FontSize="15"
49-
FontWeight="Bold"
50-
Foreground="White"
51-
Margin="0,0,0,6"/>
37+
<!-- TASK VIEWER -->
38+
<StackPanel Grid.Row="0" Grid.Column="2" Margin="20,0,0,5" HorizontalAlignment="Left" VerticalAlignment="Top">
39+
<TextBlock Text="Task Viewer" FontWeight="Bold" Foreground="Black" FontSize="13" Margin="0,0,0,4" HorizontalAlignment="Center"/>
5240
<RichTextBox x:Name="TxtTaskViewer"
53-
Height="220"
41+
Height="90"
42+
Width="250"
5443
Background="#1E1E1E"
5544
Foreground="White"
56-
Padding="8"
45+
Padding="6"
5746
VerticalScrollBarVisibility="Auto"
5847
IsReadOnly="True"/>
5948
</StackPanel>
6049

61-
<!-- ===================================================== -->
62-
<!-- ROW 2: ACTION BUTTONS (COL 1–2) + DATAGRID (COL 3) -->
63-
<!-- ===================================================== -->
64-
65-
<!-- BUTTON COLUMN 1 -->
66-
<StackPanel Grid.Row="1" Grid.Column="0" Margin="0,0,20,0">
67-
<Button x:Name="BtnUpdate" Content="Update VS Code" Margin="0,0,0,10" Height="30" Padding="5,2"/>
68-
<Button x:Name="BtnRollback" Content="Rollback" Margin="0,0,0,10" Height="30" Padding="5,2"/>
69-
<Button x:Name="BtnSwitch" Content="Switch Version" Margin="0,0,0,10" Height="30" Padding="5,2"/>
70-
71-
<Separator Margin="0,10,0,10"/>
72-
73-
<Button x:Name="BtnValidateSymlink" Content="Validate Symlink" Margin="0,0,0,10" Height="30" Padding="5,2"/>
74-
<Button x:Name="BtnRestartSetup" Content="Restart Setup" Margin="0,0,0,10" Height="30" Padding="5,2"/>
50+
<!-- BUTTONS -->
51+
<StackPanel Grid.Row="1" Grid.Column="0" Margin="0,0,10,0">
52+
<Button x:Name="BtnUpdate" Content="Update VS Code" Height="26" Padding="3,2" Margin="0,0,0,6"/>
53+
<Button x:Name="BtnRollback" Content="Rollback" Height="26" Padding="3,2" Margin="0,0,0,6"/>
54+
<Button x:Name="BtnSwitch" Content="Switch Version" Height="26" Padding="3,2" Margin="0,0,0,6"/>
55+
<Button x:Name="BtnValidateSymlink" Content="Validate Symlink" Height="26" Padding="3,2" Margin="0,0,0,6"/>
56+
<Button x:Name="BtnRestartSetup" Content="Restart Setup" Height="26" Padding="3,2"/>
7557
</StackPanel>
7658

77-
<!-- BUTTON COLUMN 2 -->
78-
<StackPanel Grid.Row="1" Grid.Column="1" Margin="0,0,20,0">
79-
<Button x:Name="BtnDashboard" Content="Open Dashboard" Margin="0,0,0,10" Height="30" Padding="5,2"/>
80-
<Button x:Name="BtnSafeMode" Content="Run Safe Mode" Margin="0,0,0,10" Height="30" Padding="5,2"/>
81-
82-
<CheckBox x:Name="ChkSafeMode" Content="Safe Mode Enabled" Margin="0,10,0,0"/>
83-
84-
<Separator Margin="0,10,0,10"/>
85-
86-
<CheckBox x:Name="ChkAutoScroll" Content="Auto Scroll Log" Margin="0,0,0,10"/>
87-
88-
<StackPanel Orientation="Horizontal">
89-
<TextBox x:Name="TxtSearchLog" Width="150" Margin="0,0,10,0"/>
90-
<Button x:Name="BtnSearchLog" Content="Search Log" Width="80" Height="28"/>
91-
</StackPanel>
59+
<StackPanel Grid.Row="1" Grid.Column="1" Margin="0,0,10,0">
60+
<Button x:Name="BtnDashboard" Content="Open Dashboard" Height="26" Padding="3,2" Margin="0,0,0,6"/>
61+
<Button x:Name="BtnSafeMode" Content="Run Safe Mode" Height="26" Padding="3,2" Margin="0,0,0,6"/>
62+
<CheckBox x:Name="ChkSafeMode" Content="Safe Mode Enabled" Margin="0,6,0,0"/>
9263
</StackPanel>
9364

9465
<!-- DATAGRID -->
9566
<DataGrid x:Name="DgVersions"
9667
Grid.Row="1"
9768
Grid.Column="2"
69+
Height="180"
9870
Margin="10,0,0,0"
9971
AutoGenerateColumns="False"
10072
IsReadOnly="True"
10173
HeadersVisibility="Column"
102-
GridLinesVisibility="All"
103-
SelectionMode="Single"
104-
SelectionUnit="FullRow"
105-
Height="300">
106-
74+
GridLinesVisibility="All">
10775
<DataGrid.Columns>
108-
<DataGridTextColumn Header="Version"
109-
Binding="{Binding Name}"
110-
Width="150"/>
111-
<DataGridTextColumn Header="Path"
112-
Binding="{Binding FullName}"
113-
Width="*"/>
114-
<DataGridTextColumn Header="Last Modified"
115-
Binding="{Binding LastWriteTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}"
116-
Width="180"/>
76+
<DataGridTextColumn Header="Version" Binding="{Binding Name}" Width="180"/>
77+
<DataGridTextColumn Header="Path" Binding="{Binding FullName}" Width="*"/>
78+
<DataGridTextColumn Header="Last Modified" Binding="{Binding LastWriteTime, StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" Width="150"/>
11779
</DataGrid.Columns>
11880
</DataGrid>
11981

120-
<!-- ===================================================== -->
121-
<!-- ROW 3: COMMAND WINDOW (FULL WIDTH) -->
122-
<!-- ===================================================== -->
123-
124-
<StackPanel Grid.Row="2" Grid.ColumnSpan="3" Margin="0,10,0,10">
125-
<TextBlock Text="Command Output"
126-
FontSize="15"
127-
FontWeight="Bold"
128-
Foreground="White"
129-
Margin="0,0,0,6"/>
82+
<!-- COMMAND WINDOW -->
83+
<StackPanel Grid.Row="2" Grid.ColumnSpan="3" Margin="0,10,0,0">
84+
<TextBlock Text="Command Output" FontWeight="Bold" Foreground="Black" FontSize="13" Margin="0,0,0,4"/>
13085
<RichTextBox x:Name="TxtCommandOutput"
86+
Height="160"
13187
Background="#1E1E1E"
13288
Foreground="White"
133-
Padding="8"
89+
Padding="6"
13490
VerticalScrollBarVisibility="Auto"
13591
IsReadOnly="True"/>
13692
</StackPanel>
13793

138-
<!-- ===================================================== -->
139-
<!-- ROW 4: LOG VIEWER (FULL WIDTH) -->
140-
<!-- ===================================================== -->
141-
94+
<!-- LOG VIEWER -->
14295
<Grid Grid.Row="3" Grid.ColumnSpan="3" Margin="0,10,0,0">
14396
<Grid.RowDefinitions>
14497
<RowDefinition Height="Auto"/> <!-- Log controls -->
14598
<RowDefinition Height="*"/> <!-- Log viewer -->
14699
</Grid.RowDefinitions>
147100

148101
<!-- LOG CONTROL BAR -->
149-
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
150-
<Button x:Name="BtnPauseLog" Content="Pause Log" Width="100" Height="30" Margin="0,0,10,0"/>
151-
<CheckBox x:Name="ChkAutoScrollLog" Content="Auto Scroll" Margin="0,0,20,0" VerticalAlignment="Center"/>
152-
<TextBox x:Name="TxtSearchLogBar" Width="200" Height="25" Margin="0,0,10,0"/>
153-
<Button x:Name="BtnSearchLogBar" Content="Search" Width="80" Height="28"/>
102+
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,6">
103+
<Button x:Name="BtnPauseLog" Content="Pause Log" Width="90" Height="26" Margin="0,0,10,0"/>
104+
<CheckBox x:Name="ChkAutoScroll" Content="Auto Scroll" Margin="0,0,20,0" VerticalAlignment="Center"/>
105+
<TextBox x:Name="TxtSearchLogBar" Width="180" Height="24" Margin="0,0,10,0"/>
106+
<Button x:Name="BtnSearchLog" Content="Search" Width="70" Height="24"/>
154107
</StackPanel>
155108

156109
<!-- LOG VIEWER -->
157110
<TextBox x:Name="TxtLog"
158111
Grid.Row="1"
112+
Height="150"
159113
TextWrapping="Wrap"
160114
VerticalScrollBarVisibility="Auto"
161-
Padding="8"
115+
Padding="6"
162116
IsReadOnly="True"/>
163117
</Grid>
164-
165118
</Grid>
166119
</Window>

Private/OutputHelpers.ps1

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,23 @@ function Write-TerminalLine {
3535
}
3636

3737
$paragraph = New-Object System.Windows.Documents.Paragraph
38-
$paragraph.Margin = [System.Windows.Thickness]::new(0) # ← THIS FIXES DOUBLE SPACING
38+
$paragraph.Margin = [System.Windows.Thickness]::new(0)
3939

4040
$run = New-Object System.Windows.Documents.Run
4141
$run.Text = $Text
4242
$run.Foreground = $Color
4343

4444
$paragraph.Inlines.Add($run)
45-
$txtCommandOutput.Document.Blocks.Add($paragraph)
46-
$txtCommandOutput.ScrollToEnd()
45+
46+
# ⭐ Add new lines at the top instead of the bottom
47+
$txtCommandOutput.Document.Blocks.InsertBefore(
48+
$txtCommandOutput.Document.Blocks.FirstBlock,
49+
$paragraph
50+
)
51+
52+
# ⭐ Keep the caret at the start so the newest line is visible
53+
$txtCommandOutput.CaretPosition = $txtCommandOutput.Document.ContentStart
54+
$txtCommandOutput.ScrollToHome()
55+
$txtCommandOutput.UpdateLayout()
4756
})
4857
}

0 commit comments

Comments
 (0)