From 987fddac2498219b04c86eed9795ab9239c50802 Mon Sep 17 00:00:00 2001 From: gramps Date: Wed, 21 Oct 2026 23:09:11 -0700 Subject: [PATCH] TASK 63: the border-colour picker IS the app's own drop-down The creator (2026-10-21), on Live -> Layers -> webcam -> Properties: "why does the drop down under the web cam properties not show the same style for the border color drop down list box?" "one of the first things we did was define branding. We established look-and-feel standards. And yet you keep ignoring these and I'm wondering why" WHY IT WAS MISSED - the answer the creator is owed. The TASK 58 sweep had already walked the whole app for un-themed controls and the border picker STILL was not themed, because the sweep looked for control TYPES (ComboBox / CheckBox / TextBox) carrying no theme style - and the border picker was NONE of those. It was a "..." Button whose Click handler built a ContextMenu of swatches in code. It was never in the sweep's scope, and PropertiesStyleTests.cs (a type-based guard) could not see it either. A picker that LOOKS like a drop-down is invisible to a type-based audit; the guard has to ask "is this the app's widget?". WHAT CHANGED - The picker is now the app's YtComboBox - the widget the Display and Font pickers wear - bound to the palette (SelectedElement.BorderColorOptions) with its selection bound by VALUE (SelectedItem -> BorderColorEntry), because WPF's SelectedValue matching is ordinal and the palette mixes #FFFFFF and #e94560. - The closed box shows the swatch + the colour's NAME; the rows show swatch + hex + name (the rows the creator approved in TASK 60). A ComboBox cannot do that with one ItemTemplate - WPF copies it into the read-only SelectionBoxItemTemplate - so Helpers/ClosedBoxTemplateSelector.cs picks by the ContentPresenter's templated parent: the ComboBox for the closed box, the ComboBoxItem for a row. Verified against WPF with a throwaway probe, not assumed. - The swatch is painted by the THEME (Helpers/HexToBrushConverter.cs, registered as HexToBrush) - the hand-painted SolidColorBrush(Color.FromRgb(...)) in the old click handler was the exact anti-pattern the theme forbids. The swatch also carries a 1px #2a3a5e border now, so black and dark swatches are visible on the dark menu (the follow-up TASK 60 left open). - The hex field stays (60px, editable): a colour outside the palette can still be typed, and the drop-down then carries that hex as a NAMELESS entry ("no name" is the honest answer). The palette's name moved out of TASK 62's TextBlock into the drop-down's closed box. - The hand-built menu, its ContextMenu/MenuItem/SolidColorBrush code and WebcamBorderColorPicker_Click are gone. MODEL: SceneElement.BorderColorName -> BorderColorEntry (the palette entry for the current hex, with its name; setting it writes the hex back) + BorderColorOptions (the palette plus the custom entry), both raised when BorderColor changes. BorderColorPalette gains EntryFor(hex) and OptionsFor(hex); NameOf delegates. Guards: ytLive.Tests/BorderColorPickerTests.cs (the ONE test for this change - the model, the panel, and the REAL widget: with the app's theme style and the panel's own templates the closed box names the colour and the rows show the hex AND the name). The TASK 60 guard (BorderColorPaletteTests) was updated because the mechanism it asserted - a code-built menu - no longer exists; it now guards the new wiring (the drop-down is bound to the palette and neither the panel nor the code-behind carries a second list of colours). Full suite: 435/435 passed, 0 warnings. --- Controls/LeftPanel.xaml | 61 ++++++-- Controls/LeftPanel.xaml.cs | 44 ------ Controls/index.md | 2 +- HANDOFF.md | 50 +++++-- Helpers/ClosedBoxTemplateSelector.cs | 33 +++++ Helpers/HexToBrushConverter.cs | 32 +++++ Helpers/index.md | 2 + Models/BorderColorPalette.cs | 32 ++++- Models/SceneElement.cs | 20 ++- Models/index.md | 4 +- MyMistakes.md | 61 ++++++++ TASKS.md | 1 + TASKS/task-63-border-colour-app-dropdown.md | 71 +++++++++ Themes/Controls.xaml | 1 + Themes/index.md | 14 ++ ai.md | 28 +++- ytLive.Tests/BorderColorNameTests.cs | 56 -------- ytLive.Tests/BorderColorPaletteTests.cs | 16 ++- ytLive.Tests/BorderColorPickerTests.cs | 151 ++++++++++++++++++++ 19 files changed, 536 insertions(+), 143 deletions(-) create mode 100644 Helpers/ClosedBoxTemplateSelector.cs create mode 100644 Helpers/HexToBrushConverter.cs create mode 100644 TASKS/task-63-border-colour-app-dropdown.md delete mode 100644 ytLive.Tests/BorderColorNameTests.cs create mode 100644 ytLive.Tests/BorderColorPickerTests.cs diff --git a/Controls/LeftPanel.xaml b/Controls/LeftPanel.xaml index 9cb90e8..2416809 100644 --- a/Controls/LeftPanel.xaml +++ b/Controls/LeftPanel.xaml @@ -3,6 +3,37 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Helpers="clr-namespace:ytLive.Helpers" xmlns:models="clr-namespace:ytLive.Models"> + + + + + + + + + + + + + + + + + + @@ -297,21 +328,23 @@ + -