feat: persist floating panel layouts and wrap the compact transport

This commit is contained in:
Johannes Findeisen 2026-11-05 23:57:56 +01:00
commit 73e8bf09dc
9 changed files with 149 additions and 13 deletions

View file

@ -71,3 +71,8 @@ Phase 44 adds `[transport] tail_ms=3000` (0..60000) and
`stop_after_tail=0` (0/1). Export always includes the configured tail; optional
playback stopping uses the GUI timer and is disabled during looping/recording.
See BUILTIN_DEVICES.md for endpoint, cancellation and reset semantics.
Phase 45 adds `[interface] transport_detached`, `mixer_detached`, and each
panel's `_x`, `_y`, `_width`, `_height` rectangle. Use Preferences / Apply after
moving panels to save the captured layout. Restoration clamps rectangles to the
current display; the floating transport wraps at narrow widths.

View file

@ -1261,14 +1261,18 @@ External-plugin history remains retained. See BUILTIN_DEVICES.md for limits.
Retain useful floating layouts across sessions and support narrower displays.
### Tasks and acceptance criteria
- [ ] Persist docked/floating state and panel geometry through the application preferences workflow.
- [ ] Restore layouts safely when monitors or display sizes change; keep all panels reachable.
- [ ] Provide a compact/responsive floating transport while retaining BPM, loop and playback controls.
- [ ] Preserve close-to-dock, Dock all, shortcuts, editing focus protection and safe shutdown.
- [ ] Test restart, invalid settings, off-screen geometry, narrow sizes and repeated dock/resize cycles.
- [x] Persist docked/floating state and panel geometry through the application preferences workflow.
- [x] Restore layouts safely when monitors or display sizes change; keep all panels reachable.
- [x] Provide a compact/responsive floating transport while retaining BPM, loop and playback controls.
- [x] Preserve close-to-dock, Dock all, shortcuts, editing focus protection and safe shutdown.
- [x] Test restart, invalid settings, off-screen geometry, narrow sizes and repeated dock/resize cycles.
### Implementation status
Planned. Phase 39 starts docked each session and its transport minimum is 1220 pixels.
Implemented: validated panel preferences, geometry capture on Preferences/Apply,
safe display-area restoration and a wrapping floating transport down to 400
pixels. Core/settings and GUI tests pass, including restart, invalid geometry,
off-screen clamping, narrow control bounds and existing dock/lifecycle checks.
The full-window minimum is unchanged. See WORKSPACE.md and PREFERENCES.md.
---

View file

@ -177,3 +177,19 @@ Verified with `make BUILD_DIR=build/phase39 gui test-gui test-gui-instruments
test-gui-jack` (one line), plus the GUI suite under AddressSanitizer/UBSan.
Tests cover repeated reparenting, close-to-dock, resize, shared BPM/loop state,
playback shortcuts, failed shutdown and cleanup.
## Phase 45 saved panel layouts
Preferences / Apply now saves transport/mixer dock state and window rectangles.
Open Preferences after arranging the windows to capture their current positions.
Closing the application alone does not save preferences. Startup restores the
saved layout; off-screen rectangles are clamped to an available display's work
area. Invalid dimensions are rejected transactionally by the settings reader.
The floating transport supports widths down to 400 pixels. Controls wrap into
rows below 1220 pixels, retaining playback, BPM, loop and navigation actions;
its height grows as necessary to keep every control available. Docking restores
the wide toolbar and arrangement geometry. Mixer minimum remains 600 × 420.
Existing close-to-dock, Dock all and shortcuts retain their shared widget state.
Tests cover narrow control bounds, save/restart, off-screen restoration, invalid
geometry, repeated docking/resizing and shared transport state.