Commit graph

1 commit

Author SHA1 Message Date
33fca8e955 polish(mainwindow): empty state, table widths, strings, theme tooltip
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) <noreply@anthropic.com>
2026-05-15 19:26:23 -04:00