Builds out the secondary surfaces of the redesigned WinUI 3 host.
ThemeManager (Services/ThemeManager.cs)
Single-source-of-truth for the active theme. Holds the user preference
(System / Dark / Light), resolves it to ElementTheme at request, and
raises a Themed event when it changes so the MainWindow can push the
AppWindow title-bar button colors. Uses Windows.UI.ViewManagement
UISettings to follow the OS app-mode when preference is System.
Persistence to UIPreferences lands in the engine-wiring commit.
MainWindow theme wiring
Replaces the per-handler theme toggle with a ThemeManager subscription:
click the title-bar sun/moon -> Toggle() -> Themed event ->
ApplyResolvedTheme on the visual tree + the title-bar buttons. Glyph
cue: sun = "current is Light, click to Dark"; moon = "current is Dark,
click to Light." Initial state applied at construction so the first
frame matches the preference.
SettingsDrawer (Views/SettingsDrawer.xaml + .cs)
UserControl that slides in from the right over the participants table.
56px header, NavigationView with five tabs (Appearance, Routing,
Display, Control, Advanced), footer with Reset-to-defaults +
Apply/Close. Appearance tab has the theme tri-state picker (System /
Dark / Light radio group) and an "Accent peek" row showing the four
brand accents (cyan / coral / live / warn) as swatches so the
operator can verify Wild Dragon brand is respected on a light desk.
CloseRequested event signals the host to collapse the drawer.
HelpDialog (Views/HelpDialog.xaml + .cs)
ContentDialog with the keyboard shortcut cheat sheet, grouped by
category (Global / Participants / Look / Control surface). 540px max
height with scroll, mono-spaced shortcut labels at left, body text at
right. Replaces the WPF host's HelpWindow at parity.
AboutDialog (Views/AboutDialog.xaml + .cs)
ContentDialog with the Wild Dragon mark, version + host + engine +
brand info as label/value rows, and three quick action buttons
(open logs folder, open recordings, check for updates). Mirrors the
WPF host's AboutWindow.
OnboardingDialog (Views/OnboardingDialog.xaml + .cs)
Three numbered steps (Install NDI Runtime / Enable Teams NDI / Pick
transcoder topology), no carousel, operator-tone copy ("Don't show
this again" defaults checked). PrimaryButtonText "Get started",
SecondaryButtonText "Skip" so the dialog is skippable from the first
frame as the PRODUCT.md anti-references demand.
Build clean: dotnet build TeamsISO.App.WinUI -c Debug -> 0 / 0.
Next: wire the drawer's CloseRequested into MainWindow (so the settings
icon actually opens / collapses the drawer), then attack the runtime
activation blocker (Phase 3 of the migration plan).
104 lines
4.9 KiB
XML
104 lines
4.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<ContentDialog
|
||
x:Class="TeamsISO.App.WinUI.Views.OnboardingDialog"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
Title="Welcome to TeamsISO"
|
||
PrimaryButtonText="Get started"
|
||
SecondaryButtonText="Skip"
|
||
DefaultButton="Primary"
|
||
Background="{ThemeResource BgElevated}"
|
||
BorderBrush="{ThemeResource BorderStrong}">
|
||
|
||
<!--
|
||
First-launch only. Three sections, one pane deep — no carousel,
|
||
no celebration. Operator-tone copy ("Pick your NDI groups" not
|
||
"Welcome to TeamsISO!"). Skippable from the first frame.
|
||
|
||
Suppressed after dismissal via UIPreferences (Phase 7).
|
||
-->
|
||
|
||
<StackPanel Spacing="20" MinWidth="500" MaxWidth="540">
|
||
<TextBlock Style="{StaticResource TextSubtle}" TextWrapping="Wrap">
|
||
TeamsISO sits between Microsoft Teams' NDI broadcast and your live-production switcher.
|
||
One-time setup gets you to the participants table.
|
||
</TextBlock>
|
||
|
||
<StackPanel Spacing="10">
|
||
<StackPanel Orientation="Horizontal" Spacing="10">
|
||
<Border Width="28" Height="28"
|
||
CornerRadius="14"
|
||
Background="{ThemeResource AccentCyanMuted}">
|
||
<TextBlock Text="1"
|
||
Style="{StaticResource TextBody}"
|
||
FontWeight="SemiBold"
|
||
Foreground="{ThemeResource AccentCyanText}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"/>
|
||
</Border>
|
||
<TextBlock Text="Install the NDI Runtime"
|
||
Style="{StaticResource TextHeading}"
|
||
VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<TextBlock Style="{StaticResource TextSubtle}"
|
||
Margin="38,0,0,0"
|
||
TextWrapping="Wrap">
|
||
From https://ndi.video/tools/. TeamsISO won't start without it — the engine relies on
|
||
NDI 5 for discovery and routing. If the runtime is missing, you'll see a launch error;
|
||
install it then relaunch.
|
||
</TextBlock>
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="10">
|
||
<StackPanel Orientation="Horizontal" Spacing="10">
|
||
<Border Width="28" Height="28"
|
||
CornerRadius="14"
|
||
Background="{ThemeResource AccentCyanMuted}">
|
||
<TextBlock Text="2"
|
||
Style="{StaticResource TextBody}"
|
||
FontWeight="SemiBold"
|
||
Foreground="{ThemeResource AccentCyanText}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"/>
|
||
</Border>
|
||
<TextBlock Text="Enable Teams NDI broadcast"
|
||
Style="{StaticResource TextHeading}"
|
||
VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<TextBlock Style="{StaticResource TextSubtle}"
|
||
Margin="38,0,0,0"
|
||
TextWrapping="Wrap">
|
||
Teams admin must enable NDI broadcast for your tenant. In Teams, Settings → Devices →
|
||
"Allow NDI usage." Per-participant streams will appear as TeamsISO discovers them.
|
||
</TextBlock>
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="10">
|
||
<StackPanel Orientation="Horizontal" Spacing="10">
|
||
<Border Width="28" Height="28"
|
||
CornerRadius="14"
|
||
Background="{ThemeResource AccentCyanMuted}">
|
||
<TextBlock Text="3"
|
||
Style="{StaticResource TextBody}"
|
||
FontWeight="SemiBold"
|
||
Foreground="{ThemeResource AccentCyanText}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"/>
|
||
</Border>
|
||
<TextBlock Text="Pick your transcoder topology"
|
||
Style="{StaticResource TextHeading}"
|
||
VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<TextBlock Style="{StaticResource TextSubtle}"
|
||
Margin="38,0,0,0"
|
||
TextWrapping="Wrap">
|
||
Defaults to 1920×1080 at 30 fps with letterbox aspect. Adjust under Settings → Routing.
|
||
Recording outputs land in %USERPROFILE%\Videos\TeamsISO\<date>\.
|
||
</TextBlock>
|
||
</StackPanel>
|
||
|
||
<CheckBox x:Name="DontShowAgain"
|
||
Content="Don't show this again"
|
||
IsChecked="True"/>
|
||
</StackPanel>
|
||
</ContentDialog>
|