From e69db4d26cbbeb7b72484e8f9e30a511f8fbf0bc Mon Sep 17 00:00:00 2001 From: gramps Date: Tue, 22 Sep 2026 17:57:06 -0700 Subject: [PATCH] =?UTF-8?q?feat(ui):=20TASK=2042=20top=20bar=20redesign=20?= =?UTF-8?q?=E2=80=94=20one=20Record-or-Stream=20surface=20(2026-09-22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bar now renders ONE surface from the FIRST decision the creator makes — Record or Stream — with each world being the whole bar. Creator directive: "I wrote the fucking thing and I still can't figure-out how to do stuff", "forget this one dog plan bullshit". OBS/streaming-tool reference for the one-surface paradigm: https://obsproject.com (single mode toggle + context actions) — cited per spin-guard habit; the go-live/test pattern follows CEV (https://cev-desktop.aSean.xyz) precedent. - Mode: single segmented REC|ON-AIR switch (SegmentToggle/SegmentLabel in Themes/Controls.xaml); radio-exclusive world selection, one tap to flip. - Record world: switch + Start Recording, zero YouTube identity. - Stream world: switch + Go Live + Test + account zone right (Sign In until connected, then avatar with Change Account/Logout context menu). - Test is a child of Stream: procs only stream-armed AND signed-in. - Running: one reality line "dot word elapsed" (REC/LIVE/TEST; green/red/ gold) + End; worlds + switch retire. - Gear moved up from bottom bar, ~3 wordmark letters past the brand, single click opens Settings/Bug/Feature/About menu (TASK 40 Unit B shipped early). - Fix folded in: BeginTestStream now arms OnAirPillOn explicitly (unarmed pump booted with zero encoder outputs -> "At least one output is required" forced-stop cascade from TASK 41's pipeline). - VM: world/reality props + RaiseTopBarModes() wired into StreamStatus, pill, IsRecording, IsTestStream, IsConnected setters. Doc: ai.md top-bar model, ViewModels/index.md, Controls/index.md, TASKS.md, HANDOFF.md, new TASKS/task-42-top-bar-redesign.md; task-40 note. Tests: TopBarModeTests.cs (new Good Dog), PillRadioTests + TestStreamTests gates updated. Build 0 warnings; full suite 314/315 — single abort is the pre-existing env-dependent RealMouseDrag test (Path of Exile 2 running) --- Controls/BottomBar.xaml | 16 -- Controls/BottomBar.xaml.cs | 11 - Controls/TopBar.xaml | 208 +++++++++--------- Controls/TopBar.xaml.cs | 13 ++ Controls/index.md | 4 +- HANDOFF.md | 112 +++++----- TASKS.md | 5 +- TASKS/task-40-app-settings-round.md | 9 + TASKS/task-42-top-bar-redesign.md | 71 ++++++ Themes/Controls.xaml | 36 +++ ViewModels/MainViewModel.Account.cs | 4 +- .../MainViewModel.Streaming.Operations.cs | 5 + ViewModels/MainViewModel.Streaming.cs | 87 ++++++-- ViewModels/index.md | 2 +- ai.md | 40 ++-- ytLive.Tests/PillRadioTests.cs | 34 +-- ytLive.Tests/TestStreamTests.cs | 11 +- ytLive.Tests/TopBarModeTests.cs | 106 +++++++++ 18 files changed, 538 insertions(+), 236 deletions(-) create mode 100644 TASKS/task-42-top-bar-redesign.md create mode 100644 ytLive.Tests/TopBarModeTests.cs diff --git a/Controls/BottomBar.xaml b/Controls/BottomBar.xaml index 18686fb..9736d2a 100644 --- a/Controls/BottomBar.xaml +++ b/Controls/BottomBar.xaml @@ -9,22 +9,6 @@ - - - diff --git a/Controls/BottomBar.xaml.cs b/Controls/BottomBar.xaml.cs index df355db..36e5aa6 100644 --- a/Controls/BottomBar.xaml.cs +++ b/Controls/BottomBar.xaml.cs @@ -1,4 +1,3 @@ -using System.Windows; using System.Windows.Controls; namespace ytLive.Controls; @@ -9,14 +8,4 @@ public partial class BottomBar : UserControl { InitializeComponent(); } - - private void GearButton_Click(object sender, RoutedEventArgs e) - { - if (sender is Button { ContextMenu: { } menu } button) - { - menu.PlacementTarget = button; - menu.Placement = System.Windows.Controls.Primitives.PlacementMode.Bottom; - menu.IsOpen = true; - } - } } \ No newline at end of file diff --git a/Controls/TopBar.xaml b/Controls/TopBar.xaml index 7baab2d..973d5c4 100644 --- a/Controls/TopBar.xaml +++ b/Controls/TopBar.xaml @@ -3,7 +3,6 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:helpers="clr-namespace:ytLive.Helpers" x:Name="TopBarRoot"> - @@ -11,123 +10,120 @@ - - - - - - - - - - - - - - - - - - - - + + + + + - + + + + + + + + + + + + + + + + - -