From 33fca8e95574ef3e2054c048303d5058bc1f886b Mon Sep 17 00:00:00 2001 From: Zac Gaetano Date: Fri, 15 May 2026 19:26:23 -0400 Subject: [PATCH] polish(mainwindow): empty state, table widths, strings, theme tooltip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Walks the v2 polish punch list against MainWindow. - Theme button tooltip is now "Theme (System / Dark / Light)" per the v2 shape brief, replacing the previous "Toggle theme (Ctrl+T)". - Participants table column widths match spec: Output 130px (was 150), ISO pill 100px (was 110). The 24px state LED, 110px audio meter, and 52px row height already matched. The 106px Preview thumbnail column and 32px gear-button column are intentional deviations (live thumbs were restored at 4944de5; per-ISO override gear added at the same time) and are now called out in the column-spec comment so a future reader doesn't try to "fix" them. - Empty-state placeholder finally renders when ParticipantCount == 0: mono sentence "no ndi sources yet — open teams and start a meeting" + a tertiary Refresh discovery button — exactly the copy specified by the shape brief's empty-states section. CountToVisibilityConverter is now declared in MainWindow.Resources (it shipped as a class but was never registered). - OnClosing wraps WindowStateStore.Save in a try/catch so a serialization or filesystem fault on shutdown can never block the window from closing. Save itself already swallows its own IO errors; this is defense-in-depth for anything that escapes. - MessageBox copy in MainWindow.xaml.cs (Hide/show Teams, Launch Teams, Stop Teams) moves to Properties/Strings.resx + a hand-written Properties/Strings.Designer.cs accessor. ResourceManager reads it by basename "TeamsISO.App.Properties.Strings"; LogicalName is set on the EmbeddedResource so the manifest name is predictable regardless of how MSBuild would otherwise compute it. Future-localization seam. OnLaunchTeamsRightClick's confirmation dialog is intentional — it guards a destructive mid-show action — and the code-behind comment now says so; the palette also offers Stop Teams as the keyboard surface, so the right-click affordance isn't the only one. Build clean (0 warnings, 0 errors); 160 tests still pass (56 App + 104 Engine, Category!=ndi&requires!=ndi filter). Co-Authored-By: Claude Opus 4.7 (1M context) --- src/TeamsISO.App/MainWindow.xaml | 51 +++++++++++-- src/TeamsISO.App/MainWindow.xaml.cs | 31 +++++--- .../Properties/Strings.Designer.cs | 36 +++++++++ src/TeamsISO.App/Properties/Strings.resx | 75 +++++++++++++++++++ src/TeamsISO.App/TeamsISO.App.csproj | 11 +++ 5 files changed, 186 insertions(+), 18 deletions(-) create mode 100644 src/TeamsISO.App/Properties/Strings.Designer.cs create mode 100644 src/TeamsISO.App/Properties/Strings.resx diff --git a/src/TeamsISO.App/MainWindow.xaml b/src/TeamsISO.App/MainWindow.xaml index fbd0ca4..2867ce0 100644 --- a/src/TeamsISO.App/MainWindow.xaml +++ b/src/TeamsISO.App/MainWindow.xaml @@ -39,6 +39,7 @@ FalseValue="Visible"/> + @@ -138,7 +139,7 @@ Command="{Binding ToggleThemeCommand}" Padding="6,4" Margin="0,0,2,0" - ToolTip="Toggle theme (Ctrl+T)"> + ToolTip="Theme (System / Dark / Light)">