Fix: consistent check/revert order + enable accept buttons

All three element sections (webcam border, countdown, web URI) now use
consistent [✕][✓] button order. Green check buttons enabled with click
handlers that save current values as snapshot baseline — revert undoes
to last accepted state, not initial selection.

Countdown section buttons were swapped (had [✓][✕], now [✕][✓]).
Webcam and web sections already had correct visual order.

1e of 7-issue polish batch. 207 tests, 0 warnings.
This commit is contained in:
2026-08-18 07:53:15 -07:00
parent 6e446cb7ad
commit 6e3ba0a7a0
3 changed files with 32 additions and 7 deletions
+10 -7
View File
@@ -407,7 +407,8 @@
<TextBlock Text="Border Thickness" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/> <TextBlock Text="Border Thickness" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/>
<DockPanel Margin="0,0,0,6"> <DockPanel Margin="0,0,0,6">
<Button DockPanel.Dock="Right" Style="{StaticResource IconButton}" <Button DockPanel.Dock="Right" Style="{StaticResource IconButton}"
IsEnabled="False" Width="22" Height="22" Margin="4,0,0,0"> Width="22" Height="22" Margin="4,0,0,0"
Click="WebcamBorderAccept_Click">
<Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2" <Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2"
Width="14" Height="14" Stretch="Uniform"/> Width="14" Height="14" Stretch="Uniform"/>
</Button> </Button>
@@ -430,14 +431,15 @@
<TextBlock Text="Timer (minutes)" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/> <TextBlock Text="Timer (minutes)" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/>
<DockPanel Margin="0,0,0,6"> <DockPanel Margin="0,0,0,6">
<Button DockPanel.Dock="Right" Style="{StaticResource IconButton}" <Button DockPanel.Dock="Right" Style="{StaticResource IconButton}"
Width="22" Height="22" ToolTip="Revert" Width="22" Height="22" Margin="4,0,0,0"
Click="CountdownRevert_Click" Margin="4,0,0,0"> Click="CountdownAccept_Click">
<Path Data="M5,5 L15,15 M15,5 L5,15" Stroke="#e94560" StrokeThickness="2" <Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2"
Width="14" Height="14" Stretch="Uniform"/> Width="14" Height="14" Stretch="Uniform"/>
</Button> </Button>
<Button DockPanel.Dock="Right" Style="{StaticResource IconButton}" <Button DockPanel.Dock="Right" Style="{StaticResource IconButton}"
IsEnabled="False" Width="22" Height="22" Margin="4,0,0,0"> Width="22" Height="22" ToolTip="Revert"
<Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2" Click="CountdownRevert_Click" Margin="4,0,0,0">
<Path Data="M5,5 L15,15 M15,5 L5,15" Stroke="#e94560" StrokeThickness="2"
Width="14" Height="14" Stretch="Uniform"/> Width="14" Height="14" Stretch="Uniform"/>
</Button> </Button>
<Slider DockPanel.Dock="Left" Width="120" Minimum="1" Maximum="60" <Slider DockPanel.Dock="Left" Width="120" Minimum="1" Maximum="60"
@@ -453,7 +455,8 @@
<TextBlock Text="URI" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/> <TextBlock Text="URI" Foreground="#a0a0b0" FontSize="11" Margin="0,0,0,2"/>
<DockPanel> <DockPanel>
<Button DockPanel.Dock="Right" Style="{StaticResource IconButton}" <Button DockPanel.Dock="Right" Style="{StaticResource IconButton}"
IsEnabled="False" Width="22" Height="22" Margin="4,0,0,0"> Width="22" Height="22" Margin="4,0,0,0"
Click="WebAccept_Click">
<Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2" <Path Data="M4,9 L8,14 L16,4" Stroke="#22c55e" StrokeThickness="2"
Width="14" Height="14" Stretch="Uniform"/> Width="14" Height="14" Stretch="Uniform"/>
</Button> </Button>
+21
View File
@@ -572,15 +572,36 @@ public partial class MainWindow : Window
} }
} }
private void WebcamBorderAccept_Click(object sender, RoutedEventArgs e)
{
if (_snapshotElement is Models.Source src)
{
_snapshotBorderColor = src.BorderColor;
_snapshotBorderWidth = src.BorderWidth;
}
}
private void CountdownRevert_Click(object sender, RoutedEventArgs e) private void CountdownRevert_Click(object sender, RoutedEventArgs e)
{ {
if (_snapshotElement is Models.Source src) if (_snapshotElement is Models.Source src)
src.TimerMinutes = _snapshotTimerMinutes; src.TimerMinutes = _snapshotTimerMinutes;
} }
private void CountdownAccept_Click(object sender, RoutedEventArgs e)
{
if (_snapshotElement is Models.Source src)
_snapshotTimerMinutes = src.TimerMinutes;
}
private void WebRevert_Click(object sender, RoutedEventArgs e) private void WebRevert_Click(object sender, RoutedEventArgs e)
{ {
if (_snapshotElement is Models.Source src) if (_snapshotElement is Models.Source src)
src.WebUri = _snapshotWebUri; src.WebUri = _snapshotWebUri;
} }
private void WebAccept_Click(object sender, RoutedEventArgs e)
{
if (_snapshotElement is Models.Source src)
_snapshotWebUri = src.WebUri;
}
} }
+1
View File
@@ -828,6 +828,7 @@ No changes to `MusicPlayer`, the 0.20 cap, the ducker, or the meter zones. Build
11. ✅ Elements scrollbar deselect fix — clicking the Elements panel scrollbar no longer deselects the selected element (scrollbar lives inside the ScrollViewer, not the StackPanel; guard now checks `ElementsScrollViewer` instead of `ElementsPanel`) 11. ✅ Elements scrollbar deselect fix — clicking the Elements panel scrollbar no longer deselects the selected element (scrollbar lives inside the ScrollViewer, not the StackPanel; guard now checks `ElementsScrollViewer` instead of `ElementsPanel`)
12. ✅ Web source URI + buttons inline — merged URI TextBox and check/revert buttons into a single DockPanel row (✓ rightmost, ✕ left); buttons no longer wrap to a separate line 12. ✅ Web source URI + buttons inline — merged URI TextBox and check/revert buttons into a single DockPanel row (✓ rightmost, ✕ left); buttons no longer wrap to a separate line
13. ✅ Web source URI hidden for webcam — URI section was showing for webcam due to WPF binding path `SelectedElement.Type` not resolving on `WebcamSceneConfig`; replaced with `IsWebSource` virtual property on `SceneElement` (mirrors existing `IsWebcam` pattern), overridden in `Source` to return `Type == SourceType.WebSource`, bound via `BoolToVis` 13. ✅ Web source URI hidden for webcam — URI section was showing for webcam due to WPF binding path `SelectedElement.Type` not resolving on `WebcamSceneConfig`; replaced with `IsWebSource` virtual property on `SceneElement` (mirrors existing `IsWebcam` pattern), overridden in `Source` to return `Type == SourceType.WebSource`, bound via `BoolToVis`
14. ✅ Check/revert consistent order + accept — all three element sections (webcam border, countdown timer, web URI) now use consistent [✕][✓] button order; green check buttons enabled with click handlers that save current values as snapshot baseline (so revert undoes to last accepted state, not initial selection)
--- ---