Added an alternative GUI based on JUCE; I like FLTK more...

This commit is contained in:
Johannes Findeisen 2026-11-06 23:17:49 +01:00
commit cd2f87a8b3
58 changed files with 11136 additions and 10 deletions

View file

@ -3739,6 +3739,47 @@ Play/Stop/Space/stereo check also passed. See the integration-test guide for com
---
## Phase 113 — Optional JUCE workstation frontend
### Tasks and acceptance criteria
- [x] Preserve the FLTK sources and default build; add an independently optional
`XTC_BUILD_JUCE_GUI` workstation under `src/gui/JUCE`.
- [x] Require a user-supplied SDK through `XTC_JUCE_ROOT`, with an explicit error
when enabled without the SDK and no SDK discovery/download in normal builds.
- [x] Port the main window, sequencer/master and child views, graph, mixer,
automation, piano roll, velocity editing, sample editor, plugin dialogs,
insert chains, preferences, searchable commands and support widgets.
- [x] Use JUCE components, controls, graphics, native events, dialogs and timers;
keep project/history/DSP/backend/plugin APIs in C and preserve `.xtc` files.
- [x] Allow JUCE-only, FLTK-only, both and core-only configurations; share the
externally supplied SDK with the independently optional plugin examples.
- [x] Include the JUCE binary in the owned install/uninstall inventory when selected.
- [x] Pass the retained GUI regression workflows against JUCE, including failure
rollback, child ownership, gestures, preferences and MIDI device fallback.
- [x] Verify native JUCE transport events and finite stereo playback with the
bundled test song and missing saved MIDI devices.
- [x] Validate the original FLTK build/tests and document final build results.
### Implementation notes
The frontend retains the original C-facing command structure and filenames.
`ui.*` maps the retained coordinates and callback conventions to JUCE, with no
FLTK headers or runtime dependency. Native controls may look different. Both
frontends continue to use the existing JACK/PipeWire backend. See the
[frontend source and build guide](../src/gui/JUCE/README.md).
JUCE is an optional external AGPLv3/commercial SDK; normal builds do not link it.
Qualification is for Linux, rather than a new cross-platform audio backend.
The original 57 FLTK/core tests, core-only build, missing-SDK diagnostic, shared
SDK configuration and staged install/uninstall checks passed. The frontend was
built with warnings enabled against external JUCE 8.0.15. Native Play/Stop/Space,
expanded track rendering and finite stereo playback passed with missing saved
MIDI devices. All 12 JUCE GUI workflows passed, with focused reruns after the
native focus/blur adjustments. The [workstation capture](../screenshots/juce-workstation.png)
comes from this real-backend regression, with no physical routes changed.
---
## Recommended Execution Order
Reorder the phases when the audit reveals a blocking dependency. Do not mark a