docs(multi-bank): settle fork 5 — LICE tabs + both move affordances (Phase B closed)
5a: named-banks tab strip is LICE-drawn (matching M5 grid + Design View segmented switch), with overflow/scroll in scope from B4 start. 5b: move ships as both a bindable "move to bank" menu and drag-between-regions; copy stays the deliberate secondary act. Drag mis-drop mitigated by drop-target highlighting and recoverable by design (index-only, reversible). Phase B now fully settled (all five forks resolved), ready to scope into implementation waves; only the active-bank indicator placement polish remains.
This commit is contained in:
+31
-17
@@ -468,9 +468,16 @@ REAPER-facing:
|
||||
layer adds to.
|
||||
- `bank_panel` (extension) — the vertical split: pool grid on top, named-banks
|
||||
tab-page region below; two full-height toggles; the active-bank indicator; the
|
||||
create / rename / delete / activate affordances; sample move/copy affordance
|
||||
(drag between regions and/or a "send to bank" menu on selection). Reuses the
|
||||
existing LICE grid render loop per bank region.
|
||||
create / rename / delete / activate affordances. The named-banks tab strip is
|
||||
**LICE-drawn** to match the M5 grid and the Design View segmented switch (not a
|
||||
SWELL-native tab control), with an **overflow/scroll affordance** so it scales past
|
||||
the ~8–12-tab point. Sample move ships **both ways**: a "move to bank" menu on the
|
||||
current selection (the bindable front-end for the B3 move action) and
|
||||
drag-between-regions (the direct-manipulation accelerator); copy is the deliberate
|
||||
secondary act, offered on the menu. Drag carries clear drop-target highlighting on
|
||||
the destination region/tab, and a mis-drop is recoverable by design (move is
|
||||
index-only and reversible — the user moves the sample back). Reuses the existing
|
||||
LICE grid render loop per bank region.
|
||||
- `actions` (entries) — create bank / rename bank / delete bank (confirm on
|
||||
non-empty delete); evacuate bank → pool; activate bank (direct + cycle); move
|
||||
selected samples → bank; copy selected samples → bank; pool/banks full-height
|
||||
@@ -486,9 +493,13 @@ verify against the SDK header where they extend existing surfaces:
|
||||
- **Persistence:** `SetProjExtState` / `GetProjExtState` under `"reasampler"`, new
|
||||
key `banks` (shared blob machinery from M4 — no new API, new key only).
|
||||
- **Panel UI:** the docked-window + LICE-grid surface from M5 (`bank_panel`),
|
||||
extended to two grid regions + a tab strip + toggles. SWELL controls for the tab
|
||||
strip / toggle affordances follow the M5 docking pattern; **verify SWELL control
|
||||
usage against the M5 reference**, no new REAPER audio API involved.
|
||||
extended to two grid regions + a **LICE-drawn** tab strip (with overflow/scroll) +
|
||||
toggles. The tab strip, the toggle affordances, and the drag hit-testing are
|
||||
custom-drawn on the M5 LICE surface (not SWELL-native tabs); the "move to bank" menu
|
||||
uses a SWELL popup-menu surface. **Verify LICE drawing and any SWELL menu/drag
|
||||
hit-test usage against the M5 reference / SWELL headers**, and confirm the drag
|
||||
hit-test does not collide with the M5 grid's multi-select drag. No new REAPER audio
|
||||
API involved.
|
||||
- **Actions:** the `command_id` / `gaccel` / `hookcommand` contract from `main.cpp`
|
||||
(unchanged), new command-id strings under the sampler family prefix.
|
||||
|
||||
@@ -515,18 +526,21 @@ verify against the SDK header where they extend existing surfaces:
|
||||
|
||||
## Open questions to resolve during build
|
||||
|
||||
Forks 1–4 are settled (see product notes → *Settled forks*, and the settled-decision
|
||||
prose above). Two panel-build items remain open.
|
||||
Forks 1–5 are all settled (see product notes → *Settled forks* and *Fork 5 — settled*,
|
||||
and the settled-decision prose above). One panel-polish detail remains open.
|
||||
|
||||
- **Fork 5 — tab rendering + move affordance (B4).** Two sub-questions: (5a) the
|
||||
named-banks region as a SWELL-native tab control vs. LICE-drawn tabs matching the
|
||||
grid aesthetic; (5b) the move gesture as drag-between-regions vs. a "send to bank"
|
||||
menu vs. both. Full options analysis (pros/cons across visual consistency, keyboard
|
||||
nav, HiDPI, cross-platform SWELL parity, scaling, discoverability, mis-drop risk,
|
||||
MIDI-bindability, implementation cost) and pending recommendations in product notes
|
||||
→ *Fork 5*. **Verify SWELL tab-control availability and cross-platform behavior
|
||||
parity against the SWELL headers / SWS reference** before committing to native tabs.
|
||||
Decision pending Daniel.
|
||||
- **Fork 5 — tab rendering + move affordance (B4). Settled (2026-07-23).** (5a) The
|
||||
named-banks region is **LICE-drawn** to match the M5 grid and the Design View
|
||||
segmented switch — not a SWELL-native tab control — with an **overflow/scroll
|
||||
affordance in scope from the start** so the strip scales past the ~8–12-tab
|
||||
breakdown. (5b) Move ships as **both** a "move to bank" menu (the precise,
|
||||
MIDI-bindable front-end for the B3 move action) **and** drag-between-regions (the
|
||||
direct-manipulation accelerator); copy stays the deliberate secondary act via the
|
||||
menu. Drag mis-drop is mitigated by drop-target highlighting and is recoverable by
|
||||
design (move is index-only and reversible). Folded into the `bank_panel` prose and
|
||||
the API surface below. **Verify LICE tab drawing and any SWELL menu/drag hit-test
|
||||
surface against the M5 reference / SWELL headers before use** (confirm no collision
|
||||
with the M5 grid's multi-select drag). Analysis in product notes → *Fork 5*.
|
||||
- **Active-bank indicator placement (B4 polish)** — per-region headers vs. a single
|
||||
header readout vs. lit-tab treatment. The "visually unmistakable" requirement is
|
||||
settled (fork 4); only the placement is open. Panel-polish detail.
|
||||
|
||||
Reference in New Issue
Block a user