feat: dock editor panels and add resizable pinned track headers
This commit is contained in:
parent
73e8bf09dc
commit
ae8556d83f
13 changed files with 346 additions and 87 deletions
|
|
@ -23,9 +23,9 @@ Changes use the existing stopped-engine preparation and undo workflow.
|
|||
|
||||
These are basic mono processors; stereo plans use independent instances. Reverb
|
||||
is deliberately simple and has no room model or stereo diffusion. Delay time
|
||||
changes can click; there is no crossfade or tempo sync. Transport seeks retain
|
||||
existing effect history, like LADSPA. Effect tails require continued rendering;
|
||||
playback/export does not automatically extend the song for tails.
|
||||
changes can click; these original devices have no crossfade or tempo sync.
|
||||
Internal effect history resets on transport discontinuities. Phase 44 below
|
||||
documents configurable export tails and optional playback stopping after tails.
|
||||
|
||||
Project format 13 stores internal devices as format 4 with reserved module path
|
||||
`/xtc/internal`, stable numeric identity and index (0 keys, 1 bass, 2 delay,
|
||||
|
|
|
|||
|
|
@ -76,3 +76,9 @@ 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.
|
||||
|
||||
Phase 46 extends `[interface]` with `sequencer_detached`, `graph_detached`,
|
||||
`piano_detached`, editor window geometry and `track_header_width` (180..360).
|
||||
Piano retains `piano_width`/`piano_height` and adds `piano_x`/`piano_y`.
|
||||
Reset workspace layout changes the session; Preferences / Apply persists it.
|
||||
Only original-tab docking and floating windows are supported.
|
||||
|
|
|
|||
|
|
@ -1065,9 +1065,9 @@ track in other views. Command search lists active menu actions; it is not a
|
|||
plugin scanner or a key-binding editor. See WORKSPACE.md.
|
||||
|
||||
### Future usability work
|
||||
Dockable editor panels, arrangement multiselection, independent track inserts,
|
||||
resizable pinned track headers and customizable shortcuts remain future work.
|
||||
They require separate model/layout designs and acceptance tests.
|
||||
Arrangement multiselection, independent track inserts and customizable shortcuts
|
||||
remain future work. Dockable editor panels and resizable pinned track headers
|
||||
are implemented in Phase 46.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -1099,10 +1099,9 @@ keys/delay project round trip. Shared GUI tests cover instrument selection,
|
|||
history and plugin editing, but do not constitute a dedicated end-to-end matrix
|
||||
for all four internal devices. Additional qualification is tracked in Phase 40.
|
||||
|
||||
Missing extensions: editable instrument parameters/presets, pitch bend, sample
|
||||
instruments, click-free/tempo-synced delay, stereo reverb/diffusion, explicit seek
|
||||
history policy and automatic tail rendering. These are planned in Phases 41–44;
|
||||
they are not part of the checked initial subset. See
|
||||
The initial subset lacked editable presets, pitch bend, sample instruments,
|
||||
smooth/tempo-synced delay, stereo reverb, seek history policy and automatic tails.
|
||||
These audit gaps are addressed by Phases 41–44 below. See
|
||||
[BUILTIN_DEVICES.md](BUILTIN_DEVICES.md) for controls and explicit limitations.
|
||||
|
||||
---
|
||||
|
|
@ -1128,10 +1127,9 @@ detach/dock, close-to-dock, shared BPM/loop state, floating playback shortcuts,
|
|||
main/floating resizing and failed/successful shutdown. Floating screenshots are
|
||||
listed in [screenshots/README.md](../screenshots/README.md).
|
||||
|
||||
Layout and window positions are session-only. The floating transport requires
|
||||
1220 pixels of width; mixer minimum size is 600 × 420. Other editors cannot be
|
||||
detached, and general dock layouts are absent. Persistence, compact transport
|
||||
and additional panels are tracked in Phases 45–46. See
|
||||
The original subset used session-only positions, a 1220-pixel transport and
|
||||
only two detachable panels. Phases 45–46 add persisted geometry, a compact
|
||||
transport and editor panels. Mixer minimum remains 600 × 420. See
|
||||
[WORKSPACE.md](WORKSPACE.md) for usage and limits.
|
||||
|
||||
### Audit validation (Phases 38–39)
|
||||
|
|
@ -1282,17 +1280,35 @@ The full-window minimum is unchanged. See WORKSPACE.md and PREFERENCES.md.
|
|||
Extend Phase 39's two-panel arrangement to a general editor workspace.
|
||||
|
||||
### Tasks and acceptance criteria
|
||||
- [ ] Define supported dock locations and layout ownership for sequencer, piano roll and modular graph panels.
|
||||
- [ ] Detach/dock each supported editor without duplicating project, selection or history state.
|
||||
- [ ] Support resizable pinned track headers and preserve editing coordinates, scrolling and focus after reparenting.
|
||||
- [ ] Integrate with Phase 45 layout persistence and provide a safe reset-layout action.
|
||||
- [ ] Verify minimum/large layouts, cross-panel editing, repeated reparenting and shutdown/error paths.
|
||||
- [x] Define supported dock locations and layout ownership for sequencer, piano roll and modular graph panels.
|
||||
- [x] Detach/dock each supported editor without duplicating project, selection or history state.
|
||||
- [x] Support resizable pinned track headers and preserve editing coordinates, scrolling and focus after reparenting.
|
||||
- [x] Integrate with Phase 45 layout persistence and provide a safe reset-layout action.
|
||||
- [x] Verify minimum/large layouts, cross-panel editing, repeated reparenting and shutdown/error paths.
|
||||
|
||||
### Implementation status
|
||||
Planned. Phase 39 only detaches transport and mixer; broader docking and
|
||||
resizable pinned headers from Phase 37 remain outstanding. These follow-up
|
||||
phases cover gaps found in Phases 38–39 and their documented limitations;
|
||||
unrelated outstanding features in earlier phases retain their existing status.
|
||||
Implemented: complete Sequencer/Graph panels and Piano Roll reparent between
|
||||
floating windows and their main tabs, with shared model/history/selection and
|
||||
preserved scroll positions. Validated preferences persist layouts; reset docks
|
||||
panels and restores default rectangles. Arrangement headers/selectors stay pinned
|
||||
and resize from 180 to 360 pixels. Supported docking is explicitly limited to
|
||||
original tabs; arbitrary split layouts and drag docking are future extensions.
|
||||
Core/settings, GUI lifecycle/editing/restart and integrated checks are recorded
|
||||
below. See WORKSPACE.md and PREFERENCES.md.
|
||||
|
||||
---
|
||||
|
||||
### Integrated validation for Phases 40–46
|
||||
|
||||
Each phase was built and tested before its separate implementation commit.
|
||||
Core/reliability tests cover devices, migration, persistence, DSP partitions,
|
||||
transport history and export. GUI tests cover editing, shared state and panel
|
||||
lifecycle; CLAP/VST2/VST3/LADSPA fixture and live software JACK suites retain the
|
||||
existing workflows. Sanitizers cover built-in DSP/export and GUI lifetimes;
|
||||
static analysis and staged installation check the final integrated changes.
|
||||
Human listening, arbitrary third-party plugins and physical hardware remain
|
||||
unqualified. Listening WAV generation and manual procedures are documented in
|
||||
BUILTIN_DEVICES.md. Application project format is now 15, reading versions 1–14.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -169,9 +169,10 @@ Space and menu playback shortcuts work from either floating panel, with normal
|
|||
numeric/text editing protection. Closing the main window closes all panels only
|
||||
after the existing unsaved/recording/backend shutdown checks succeed.
|
||||
|
||||
Window detachment and positions are session-only; startup uses the docked layout.
|
||||
The floating transport is a wide toolbar (minimum 1220 pixels); the floating
|
||||
mixer resizes down to 600 × 420 and retains horizontal track scrolling.
|
||||
The initial Phase 39 layout used session-only positions and a transport minimum
|
||||
width of 1220 pixels. Phase 45 below adds saved layouts and transport wrapping
|
||||
down to 400 pixels. The floating mixer resizes down to 600 × 420 and retains
|
||||
horizontal track scrolling.
|
||||
|
||||
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.
|
||||
|
|
@ -193,3 +194,39 @@ 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.
|
||||
|
||||
## Phase 46 editor panels and pinned track headers
|
||||
|
||||
**View → Detach sequencer** and **Detach modular graph** float each complete
|
||||
editor, including its toolbar and scroll area. Its main tab offers Show and Dock
|
||||
buttons. Closing the floating window docks it; View shortcuts also raise floating
|
||||
editors. Supported dock locations are their original main-window tabs; arbitrary
|
||||
split regions, tab reordering and drag-to-dock are not implemented. Sequencer
|
||||
minimum floating size is 1100 × 420; Graph is 1000 × 420.
|
||||
|
||||
The Piano roll now also has a main-window tab. Select a MIDI clip and open it as
|
||||
before. **View → Float piano roll** switches its existing widgets between the tab
|
||||
and a floating window; closing the floating window docks it. The tab's Open
|
||||
selected MIDI clip button opens the current selection. Default floating behavior
|
||||
is retained for older preferences. A missing/invalid MIDI selection is reported.
|
||||
All panels share project/history, preserve editor selections and scroll offsets,
|
||||
and retain playback shortcuts and text-input protection.
|
||||
|
||||
**View → Dock all panels** includes all editors. **Reset workspace layout** docks
|
||||
all panels, restores default floating rectangles and resets header width. Use
|
||||
Preferences / Apply to persist either result. Editor dock state, floating window
|
||||
rectangles and header width use the same validated settings/restore path as the
|
||||
transport/mixer. Piano content opens lazily for the selected MIDI clip; startup
|
||||
does not invent a clip or save a project-specific selection in application settings.
|
||||
|
||||
Arrangement track headers and instrument selectors now stay pinned during
|
||||
horizontal scrolling. Drag the divider within the header's final five pixels to
|
||||
resize from 180 to 360 pixels; Escape cancels the drag. Clip timing coordinates,
|
||||
snap and horizontal scrolling use the resized origin. Header layout is a UI
|
||||
preference, not an undoable project edit. Vertical scrolling remains shared with
|
||||
the track rows. Clips covered by the pinned header cannot be selected through it.
|
||||
|
||||
GUI regressions cover repeated detach/dock and close-to-dock, toolbar ownership,
|
||||
minimum/large resize, shared model/note/clip selection, scrolling, header dragging,
|
||||
short-clip hit tests, Apply/restart, reset layout and failed/successful shutdown.
|
||||
ASan/UBSan checks retain only the existing system Fontconfig leak suppression.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue