feat(view): mint managed lanes to separate cross-mode content per stance (D2 W3-A)
Pure planLaneMinting decides which tracks hold >1 mode's content and which managed lane each item lands on; view.cpp applies it (I_FREEMODE/I_NUMFIXEDLANES/P_LANENAME/ I_FIXEDLANE) under one undo block, driven off the auto-tag detection tick. Manual lanes and their items are never touched. Load-time reconcile rebuilds ownership from durable lane names before reapplying active-mode visibility.
This commit is contained in:
@@ -58,6 +58,14 @@ std::optional<std::string> managedLaneKey(const std::string& laneName);
|
||||
// contract is asserted here so minting and reading cannot drift.
|
||||
std::string laneNameForMode(const std::string& modeId);
|
||||
|
||||
// The owning mode id encoded in a managed lane NAME — the suffix after the managed
|
||||
// prefix. std::nullopt for a manual/unnamed lane (no managed prefix) or a name that is
|
||||
// EXACTLY the prefix with no mode suffix (illegal — a managed lane always names a mode).
|
||||
// The exact inverse of laneNameForMode: modeIdFromLaneName(laneNameForMode(m)) == m.
|
||||
// Used by the load-time reconcile to recover managed ownership from REAPER's durable
|
||||
// lane name (the source of truth for identity across sessions — design point #2).
|
||||
std::optional<std::string> modeIdFromLaneName(const std::string& laneName);
|
||||
|
||||
// True iff an item on a fixed-lane track with the given lane name is on a MANUAL lane
|
||||
// (i.e. exempt from auto-tag). The two inputs are:
|
||||
// isFixedLaneTrack — whether the item's track has I_FREEMODE==2. On a normal
|
||||
|
||||
Reference in New Issue
Block a user