feat(bank_panel): B4 vertical-split UI — LICE tab strip, id-keyed bank ops, move/copy drag

Pool grid on top, LICE-drawn named-banks tab strip below with overflow-scroll
(new pure tab_strip seam, unit-tested). Full-height toggles, unmistakable
active-bank readout distinct from the shown tab, tab context menu
(activate/rename/delete/evacuate/create) with rich confirm-on-non-empty-delete,
and move/copy via menu + drag with drop-highlighting. Fold-in: deserialize
auto-disambiguates duplicate folded bank names instead of rejecting the book.
This commit is contained in:
2026-07-25 14:37:57 -04:00
parent 88af39e036
commit a67a2f9479
10 changed files with 1769 additions and 457 deletions
+7 -1
View File
@@ -125,7 +125,13 @@ InsertResult runInsert(ReaSamplerSession* session, const InsertRequest& request)
const std::string projectDir = currentProjectDir();
if (projectDir.empty()) { result.status = InsertStatus::NoProject; return result; }
const BankIndex& bank = session->bank();
// Resolve the id against the bank the SELECTION came from — under B4's vertical
// split the selection may live in the pool or a shown named bank, which is NOT
// necessarily the active/capture-target bank. Fall back to the active bank when
// the source id names no bank (defensive).
const std::string srcBankId = bankPanelSelectedSourceBankId();
const BankIndex* srcIndex = session->book().index(srcBankId);
const BankIndex& bank = srcIndex ? *srcIndex : session->bank();
const Sample* sample = bank.query(id);
if (!sample) { result.status = InsertStatus::NothingResolved; return result; }