Skip to content

P0 UI/UX — unify premium SMV cool-blue theme across ARSAS; centered normal window startup #730

Closed

Description

@masarray

Goal

Unify ARSAS's complete WPF workstation around the existing SMV cool-blue/white visual language, eliminate legacy warm greige/brown grids and controls, and open the main application as a centered, normal, resizable window. After first paint, the user owns window size, position, minimize/maximize/restore behavior.

Requested from eight v1.6.42 screenshots reviewed 2026-10-24. This is visual/UX work only; preserve IEC 61850 MMS/GOOSE/SMV logic, canonical SSOT, command authorization, IED Browser operator navigation, event acquisition, and FAT behavior.

Verified root causes on RC staging branch

Branch: release/arsas-integrated-rc0-20261024, observed head f27ca68e6343ff0b291a343a583ff01d54bbe5a7 (re-verify before changes; other threads are active).

  1. Resources/P2BlueSteelGreige.xaml sets GreigeRowA=#F3F0EA, GreigeRowB=#ECE8E1, GreigeHeader=#E1DDD5, greige surfaces/gradients, plus ModernDataGrid and Command/FAT style tokens using those resources.
  2. P2BlueSteelGreigeUx.cs ApplyEngineeringGrid() forces GreigeRowA/GreigeRowB across descendant DataGrid instances, potentially overriding a local visual design. ApplyIoFatWindow() enforces an additional greige grid contract.
  3. Views/SmvInlineViewer.xaml explicitly defines SmvMeasurementGrid, SmvMeasurementRow, and cool-white/blue backgrounds; the SMV screen therefore looks different.
  4. MainWindow.xaml explicitly sets WindowState="Maximized" even though it already has WindowStartupLocation="CenterScreen"; P2BlueSteelGreigeUx.ApplyMainWindow() enforces maximize again at runtime. IoListTestingWindow.xaml + ApplyIoFatWindow() also enforce maximize.
  5. Regression tests lock in the unwanted behavior: tests/ARSAS.Tests/StartupVisualStabilityRegressionTests.cs asserts Maximized, and P2BlueSteelGreigeThemeTests.cs asserts runtime maximize and greige values.
  6. App.xaml.cs installs the P2 overlay as application resources before window startup. Any new semantic tokens must preserve resource lookup/first paint (no activation-time re-theming).
  7. MainWindow.NavigationLayoutFix.cs already handles nav widths on SizeChanged; preserve it and test in normal-size windows.

Visual standard — premium compact cool-blue engineering workstation

  • Keep the existing dark blue-steel outer shell/nav and the SMV's light cool-blue / clean-white instrument surfaces as reference.
  • One authoritative semantic token vocabulary for app background, panel, panel-raised, table headers, row A/B, hover, selected, divider, muted text, focus ring, primary/secondary/destructive buttons, form fields, menu/dropdown, scrollbar, card, empty state and disabled state. Resource keys may retain compatibility aliases during migration.
  • Reference values from the accepted SMV: panel #F8FBFF, alternate #EDF5FF, header #E8F2FF, divider #D7E5F6, hover #E4F0FF. Confirm contrast and exact tokenization before finalizing. Green/amber/red remain status-only semantics; measured phasor/waveform channel colors stay intact.
  • Compact typographic scale, low visual noise, single consistent button and input height, 8/12 px spacing scale, subtle 1px borders, restrained shadows/corner radii. Do not introduce bulky cards/large bold titles.
  • Eliminate warm greige/brown surfaces in IED Browser, Device Explorer, Event Logs, Annunciator controls, GOOSE Sniff, Signal Testing/FAT, Diagnostics, shared Command Dock, IO List FAT and relevant dialogs. Annunciator's dark alarm canvas can remain intentional for alarm semantics; its controls must follow the common theme.
  • Respect selected IED emphasis, operator value/quality/status indicators, row virtualization, text ellipsis/tooltips, focus and keyboard navigation. No misleading Good/Bad or stale-value presentation.
  • Remove local hard-coded color exceptions only after the global style matches their expected cool-blue appearance; protect SMV waveform/phasor fidelity and SMV screenshot baseline.

Window policy

  • MainWindow: first opening WindowState=Normal, WindowStartupLocation=CenterScreen, resizable, optimized default footprint (e.g. target 1440–1480 DIP wide and ~820–860 DIP high; clamp initial size to current monitor work area, considering taskbar and WPF DPI units).
  • No maximize from style adapter, startup callbacks, tab switching or reactivation; once visible, do not reset/overwrite user size or position. Native Maximize/Restore must work on user demand.
  • Reconcile min-size constraints and layout at 1366×768, 1600×900, 1920×1080 and 125/150% scaling; maintain accessible nav and Command Dock with scroll/collapse where needed rather than clipping.
  • Assess IO List FAT independently; avoid changing deliberate hidden donor-window lifecycle (IoListTestingWindow.EmbeddedEngineeringHost.cs).

Proposed minimal-risk execution

Phase A: New semantic cool-blue token aliases/resources; update ModernDataGrid, Command/FAT grids, panel/card/button/input/dropdown styles. Remove or narrow forced greige runtime row setters. Preserve existing names temporarily for compatibility where needed.

Phase B: Fix main and FAT window normal startup behavior without touching production protocol/UI command handlers; reconcile initial size and responsive breakpoints. Remove contrary maximize assertions, replace with centered normal / user-driven resize tests.

Phase C: Audit all tabs + dialogs for local color/style overrides; converge row/header/card/input/empty-state/control chrome onto the shared tokens. Match SMV while retaining channel-specific visualizations, alarm semantics, and command safety.

Phase D: Exact-head build + all relevant UI regression tests + manual screenshot comparison. Test 100/125/150% DPI, normal/maximized/restored, 3 connected IEDs and live grids; no layout clipping, horizontal jumps, frozen WPF UI, broken virtualized rows, signal-value state regression or engine changes.

Acceptance gates

  • All major workspaces show the same cool-blue/white grid/surface language as the SMV panel; no beige/brown zebra/header styling remains.
  • Buttons, ComboBoxes, TextBoxes, cards, dialogs, scrollbars, status/quality badges use one semantic token system and maintain readable contrast.
  • No runtime adapter silently overwrites local style decisions with greige rows.
  • Main app opens centered normal at an optimized size; user can freely resize/maximize/restore/move without forced resizing.
  • Command Dock remains usable at compact heights; no clipping in minimum supported resolution/DPI matrix.
  • Update P2BlueSteelGreigeThemeTests and StartupVisualStabilityRegressionTests so they enforce the new intended design, not legacy colors/fullscreen.
  • Pass SmvMeasurementCoolBlueCheckpointTests, SmvMeasurementPaletteRegressionTests, SmvMeasurementSplitGridRegressionTests, PremiumSmartIpWizardTests, IedBrowserOperatorNavigationAndIdentityTests and applicable Command Dock/FAT/SSOT safety tests.
  • No protocol/engine/RCB/control/readback changes; CI and physical FAT gates remain under the RC handoff.

Integration / release discipline

The RC consolidation PR #727 is currently a draft and actively being reconciled. Do not modify/force-push its branch, merge to main, or release as part of this issue. Work on a separately named visual-only branch based on a newly verified accepted head, with one reviewable PR. Compare/rebase deliberately before integration; do not overwrite concurrent Browser/SMV/Smart IP/Command Dock work. This issue documents scope/acceptance and does not certify a build or FAT test.

Activity

  1. masarray commented on Oct 24, 2026

    @masarray
    OwnerAuthor

    P0 source implementation staged (2026-10-24)

    Draft PR #731: #731

    Code branch ui/p0-smv-coolblue-normal-window-20261024; target RC integration lane (not main). Exact latest source SHA when this comment was posted: 743ab48be97b7f774b9e278103670c626fcdba31.

    Implemented global SMV-matched blue-white tokens, shared grid/command/FAT/industrial headers, search and utility buttons, scrollbar surfaces, no forced MainWindow grid overrides, no runtime maximize, and one-time centered work-area-aware Normal startup for MainWindow and IO List FAT. Added/upgraded regression tests; no IEC 61850 engine/control/SSOT changes.

    At this checkpoint the exact-SHA Windows Build and IO List Testing workflows are in progress, not yet passed. Pending: final CI checks and field screenshot/DPI verification before merge. PR intentionally remains draft to avoid overwriting parallel RC integration work.

  2. masarray commented on Oct 27, 2026

    @masarray
    OwnerAuthor

    D29 active-scope reset — UI SOFTWARE only, zero device recapture

    Keep this issue open solely for genuinely unfinished UI/UX implementation, if any, relative to the current operator-accepted v1.6.42 and exact staging RC d4598619b1b8fc21487cf5beb83a8a8284d0e9cf. Historical UI draft PR #732 is CLOSED NOT MERGED; do not silently infer that every visual style from it shipped.

    Implement from the current repo, using code/XAML regression tests and normal application screenshots/artifacts already available. Do NOT request IEC 61850 diagnostics, SCL/PCAP, IED retest or rollback to old WPF branch. No physical FAT requirement for purely visual changes. No release/main mutation under this comment. If the latest accepted UI already meets the desired outcome, close this issue as completed with an exact code/file check rather than opening a new historical PR.

  3. masarray commented on Oct 27, 2026

    @masarray
    OwnerAuthor

    D30 source-based reconciliation — issue #730 completed (implementation scope)

    All four actual UI integration PRs were MERGED: #731 cool-blue token system + centered Normal startup, #733 RC consolidation, #735 field hotfix for window/RCB/GOOSE, #736 GOOSE visibility/viewport/SNTP/Browser UX. Current staging RC exact d4598619b1b8fc21487cf5beb83a8a8284d0e9cf still has:

    • MainWindow.xaml: WindowState="Normal" and WindowStartupLocation="CenterScreen"; IoListTestingWindow.xaml: Normal + CenterOwner.
    • WorkstationWindowStartupBounds.cs: first-paint work-area-constrained initial size/position; no runtime maximize or later user resize override.
    • Resources/P2BlueSteelGreige.xaml: cool panel #F8FBFF, alternate #EDF5FF, header #E8F2FF, separator #D7E5F6, hover #E4F0FF; legacy Greige keys map to cool-blue tokens.
    • P2BlueSteelGreigeUx.cs: once-per-window visual adapter; no forced MainWindow maximize; no inherited font/SMV ownership override.
    • StartupVisualStabilityRegressionTests.cs and P2BlueSteelGreigeThemeTests.cs assert these contracts. Two canonical Windows Build runs for exact current RC SHA 40486812592 and 40486811174 concluded SUCCESS in D28 audit.

    Closing completed for code-implemented UI requirement; this does not manufacture a new real 100/125/150% DPI inspection, claim that all specialized dialogs have been visually eyeballed, or imply physical IED/IEC FAT. The accepted v1.6.42 binary and main remain unchanged; no new build or screenshot required to close this historical UI tracking issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions