Files
FluidSimCpp/docs/WORKSHOP_UI_PLAN.md

259 lines
15 KiB
Markdown

# Workshop UI rework
Design specification, updated 2026-11-01. Implementation status is listed below.
Physical parts, typed signals and ECU requirements are defined in the
[machine systems roadmap](MECHANICAL_BUILDER_PLAN.md).
## Implementation status
The first UI pass implements the dark theme, shared adaptive panel geometry,
resizing/collapse with saved preferences, library search/categories and previews,
an Objects list, a measured inspector with stacked property fields, fitted control
labels and hover disclosure, direct click/drag connections, persistent Run/Pause/
Step controls, navigable checks, and a separate resizable oscilloscope dock.
Existing ECU assignment ports use input rings and filled output circles; gas
ports retain their physical semantics. The Sense inspector now adds physical
sensor taps, unresolved binding repair and per-sample live outputs, using green
Number and red Boolean output dots. Sensor attachments remain locked during Test.
The builder and desktop UI regressions pass. Rendered review covers empty, ECU,
Checks, Meters, running/paused and collapsed layouts at 1920x1080 and 1280x720.
Logic/split views now share the running machine, with a searchable node library,
typed click/drag wiring, reference selection, live values/controls, parameter
inspectors and compact number trends. Input rings/output circles and red Boolean/
green Number colors are checked in rendered output. Thirteen focused suites pass;
graph and split layouts are reviewed at 1920x1080 and 1280x720.
Grouped ECU connectors follow their runtime systems. Automatic DPI/UI scale
overrides, an object hierarchy with
visibility groups, richer property grouping/help and pinned operator controls
remain follow-up UI work. Their design below remains the intended direction.
## Confirmed direction
- Dark engineering editor with compact toolbars, clear panels and restrained
colors. Reserve strong colors for signal types, selection and relevant state.
- Separate **3D** and **Logic** tabs, with an optional split view. Selection and
running simulation are shared across views; camera and canvas navigation state
remain independent. Switching views does not restart Test.
- Connect by dragging between ports or clicking a port then its target. A
dedicated Connect mode is not required. Escape cancels a pending connection.
- Signal inputs are hollow rings; outputs are filled circles. Boolean is red,
Number green. Bidirectional physical ports use neutral domain symbols.
- Panels remain in predictable positions, resize and collapse, and remember
their widths. Provide a reset-layout action and constrain restored sizes to
the current window so the central workspace stays usable.
- The library uses compact rows with small previews, categories and search.
Selecting an item shows a larger preview with its purpose and essential ports.
- Starting Test preserves the current workspace, selection and navigation state.
Lock structural edits while allowing safe live tuning and logic inspection.
- Test starts running. Pause and Step remain visible; Step is enabled when
paused, with a tooltip explaining that state when disabled.
- Primary design target is a 1920x1080 desktop window. The first priority is
consistent appearance and layout, especially preventing text/control overlap.
- Remaining routine design decisions are made autonomously, per user direction.
## Layout and visual baseline
Use a shared layout/component layer rather than individually positioned controls.
Rendering and hit testing consume the same computed rectangles. Define shared
theme values for spacing, typography, surfaces, borders and interaction states.
Initial dimensions below are logical pixels at 100% UI scale, and may be tuned
through visual review while preserving the agreed structure.
| Element | Default |
| --- | --- |
| Spacing | 4 px base unit; 8 px control gaps; 12 px panel padding; 16 px section gaps |
| Typography | 14 px body/fields, 12 px secondary labels, 16 px section titles; measured line height |
| Controls | 30 px minimum row height, increased when text or UI scale requires it |
| Top command bar | 44 px, with less-used file actions in a menu |
| Workspace toolbar | 36 px; 3D/Logic tabs and split toggle stay discoverable |
| Left panel | 260 px default; resizable between 220 and 420 px |
| Inspector | 340 px default; resizable between 280 and 520 px |
| Bottom area | Collapsed initially; 240 px default when opened, vertically resizable |
| Status bar | 24 px minimum; longer messages go to Checks or a tooltip |
| UI scale | Auto from display scaling, plus 100%, 125%, 150% and 200% overrides |
Use a neutral charcoal palette with clear panel boundaries and one restrained
selection accent. Reuse the same fields, buttons, tabs, badges and menus across
all views. Strong red/green remains reserved for the agreed signal types; add
icons/text to distinguish faults and success from those types.
Support a 1280x720 window at 100% scale through a compact layout. As available
logical space shrinks, move secondary toolbar actions into an overflow menu,
collapse the library/object panel, and offer the inspector as a temporary panel.
Preserve access to required actions and readable text instead of shrinking fonts.
If split view cannot fit two usable canvases, use a single tab and explain why
split is unavailable. Large UI scaling follows the same compact behavior.
Choose a vertical split by default: 3D left, Logic right, with a draggable divider
and a swap action. Remember divider position, panel widths/collapse states and
active view in user preferences; clamp them on restore. Store machine-specific
camera/canvas layout separately from physical geometry and signal values.
### Text and overlap rules
- Measure text before layout. Use content-sized rows and explicit minimum sizes;
never assume every property label fits a fixed width.
- Inspector rows place label, value, unit and optional action in separate layout
cells. Narrow inspectors stack labels above fields; units never cover digits.
- Wrap help and diagnostic text and grow the row. Ellipsize long names only in
compact lists/tabs, with the complete name available on hover and in selection.
- Clip rendering and pointer handling to the same panel scroll region. Fixed
headers and footers reserve their own space so scrolling content cannot cover
buttons, tabs or trace controls.
- Tooltips and menus reposition within the window and respect their anchor.
Keep the focused text field visible when scrolling or opening a panel.
- Lay out ECU ports from descriptor rows with adequate label/value space; nodes
grow vertically as ports expand. Wires route away from pin labels before bends.
- World labels use screen-space placement with collision suppression; prioritize
selected/hovered labels and expose the rest on demand. Hidden labels must not
hide the underlying port's tooltip or named connection-list access.
## Workspace structure
Proposed layout: a slim document/command bar, workspace tabs, a left library/object
panel, central workspace, right inspector, and optional bottom diagnostics/traces.
Use resize handles and collapse controls within this predictable layout.
- Top bar: machine name, unsaved status, file actions, undo/redo and simulation
controls. Show current run state unambiguously even in Logic view.
- 3D toolbar: Select, Move, Rotate, Route, snapping and fit/focus. Connection
gestures work directly on visible ports and do not start a transform drag.
- Logic toolbar: node search/add, frame selection/all, connection filters and
live-value visibility. Node creation targets the canvas under the pointer.
- Library: parts, sensors, logic nodes and saved assemblies with search and
categories, displayed as compact rows with small previews. Show a larger
selected-item preview and compatibility when adding from a signal port.
- Objects: named parts, sensors, shafts, ECUs and assemblies. Search, select,
focus, rename and hide without removing simulation membership.
- Inspector: selection identity, grouped properties, connections and contextual
help. Show units next to editable values and explain locked Build properties.
- Bottom area: navigable checks, traces and event history. Selecting an issue
locates the relevant part, port or connection in the appropriate view.
- Status bar: current gesture, keyboard hints and short feedback. Important
failures remain in Checks rather than disappearing with a transient message.
## Core workflows
### Place and configure
Search for a part, select it, preview placement, then click to place. Shift repeats
placement. Escape cancels. Placed parts immediately expose a name and the small
set of essential properties; advanced groups expand on demand. Preserve current
copy/paste, assembly and undo workflows as the UI changes.
For multiple selections show selection count, pivot and mixed values. Edits apply
only to compatible properties; do not display one arbitrary part's value as a
shared value. Selection/focus is synchronized with the object tree and Logic view.
### Connect
Hover highlights a port with name, domain, direction, units and connection state.
Dragging from it or clicking it begins a preview. Compatible targets stand out;
incompatible targets explain the reason. A separate checkmark/cross communicates
validity without overwriting the red/green signal colors.
Keep ring centers easy to pick and port target size readable at any zoom. For
overlapping ports provide a named candidate chooser. Clicking a part body selects
it; hovering a hidden port must not silently steal a move gesture.
Signal connections do not move physical parts. Gas connections keep their current
geometry/snapping rules and show the proposed pipe path before commit. Physical
port alignment errors are visible. Disconnect/reconnect commands are available
from ports and the inspector; all connection edits are undoable.
### Add sensors and configure ECUs
Use Add sensor on a selected part or a specific pipe location. Offer supported
sensor types, show the tap/pickup marker, and create a matching Logic reference.
Selecting either representation reveals its host and measurement location.
ECU inspector groups Required, Connected and Optional inputs by function. Keep
connected ports visible and let optional groups expand. A guided checklist helps
choose a strategy, attach required sensors and assign actuator targets. Every
measurement displays units, source, validity and fallback state.
### Inspect and test
Simulation controls are independent of 3D/Logic tab selection. Distinguish Run,
Pause, Step and Stop/return-to-edit. Show simulation speed and time. Structural
properties explain why editing is locked during Test; safe live tuning shows
its applied value without resetting the machine.
Entering Test does not switch to a different workspace or change selection.
Keep the current 3D camera, Logic canvas and split-view arrangement. Stopping
returns to editing in that same context; live tuning retains existing persistence
and undo behavior. Start running immediately, with Pause and Step available in
the persistent simulation controls.
Hovering a signal reveals its current value; the inspector can pin it to a trace
or control panel. Physical measurements can also be added from the selected part.
Readouts identify the shaft, sensor or port they measure. Missing and invalid
signals never display as an ordinary zero or false state.
## Readability and interaction requirements
- Text and controls respond to window size and UI scaling. Scroll panels rather
than drawing controls outside their bounds; avoid the current fixed-coordinate
overlap risk as parts and properties grow.
- Focused numeric fields accept keyboard edits, units are visible, and invalid
input remains editable with a local explanation. Escape cancels the edit;
shortcuts do not trigger transforms while typing in a field.
- Preserve useful shortcuts, add visible tooltips, and keep camera gestures
separate from node-canvas gestures. Document both in a compact help overlay.
- Selection, warning and disabled states remain legible in the dark theme.
Signal meaning is also conveyed through labels and direction shapes.
- Keep the viewport stable when changing selection. Fit/focus is explicit.
Unrelated panel refreshes must not jump scroll position or steal text focus.
- Keep raw rendering and UI state ownership explicit so panel rendering remains
reliable after 3D drawing. Rendering optimization must preserve hit testing.
## Delivery slices
1. Appearance and layout foundation: shared controls/theme, responsive panels,
typography, text measurement, clipping and consistent input handling. Rework
the existing workshop first so today's parts already have a coherent UI.
2. Descriptor-driven inspector, connection gestures, named ports and filters.
3. Searchable library/object tree, then Logic tab and optional split view with
shared selection, stable node layout and live values.
4. Sensor placement and grouped ECU connector workflow.
5. Integrated test controls, traces, checks and pinned operator controls.
Coordinate these slices with the systems roadmap: UI can display a type only
after document/runtime descriptors define it. Validate layouts at the agreed
minimum window size and scaling, connection picking in dense assemblies, keyboard
focus, save/restore behavior and the same workflows across 3D, Logic and split view.
## Navigation decisions
Keep the existing familiar 3D controls: Alt+left drag or right drag on empty space
orbits, middle drag pans, wheel zooms, F focuses selection and Home fits all.
An actual drag orbits; right click without dragging opens the context menu.
UI interaction consumes input before viewport handling, and text editing captures
its shortcuts. Escape cancels the active gesture before clearing selection.
Logic uses wheel zoom about the pointer and middle drag to pan. Plain left click
selects, Shift modifies selection, and dragging empty canvas makes a selection
rectangle. Drag nodes by their header, ports by their connector and panel sizes
by their divider; the pointer/hover state identifies the pending action.
## First milestone acceptance
Review the existing single-cylinder, flat-six and V8 imports with long names,
multi-selection, pipe route editing, ECU properties, Checks and instruments.
Exercise empty, selected, hovered, disabled, focused, invalid and running states.
At 1920x1080 and 1280x720 at 100% scale, and at representative larger display
scales, verify that text never overlaps unrelated controls, field units remain
readable, panels scroll within bounds and essential commands stay reachable.
Resize while editing, reopen saved panel layouts, expand long property groups
and open menus near window edges. Appearance/layout review is required before
adding the new systems' more complex panels. Later slices repeat this review for
the dense ECU connector view, Logic and split view as they become available.
No further preference decisions are blocking this plan. Implementation will use
these defaults and adjust details through focused visual and interaction review.