fix: single-track active mode — only one button red at a time
activePlayTrackIds changed from Set to single trackId string. All buttons default gray. Click toggles red on one track only.
This commit is contained in:
@@ -5064,7 +5064,7 @@ const PianoRollTabEditor = ({ st, zoom, bpm, viewportWidth, activeTracks, onClos
|
|||||||
}
|
}
|
||||||
var layers = [];
|
var layers = [];
|
||||||
ghostLayers.forEach(function(layer) {
|
ghostLayers.forEach(function(layer) {
|
||||||
if (activePlayTrackIds !== null && !activePlayTrackIds.has(layer.track_id)) return;
|
if (activePlayTrackIds !== null && activePlayTrackIds !== layer.track_id) return;
|
||||||
var trk = (activeTracks || []).find(function(t) { return t.id === layer.track_id; });
|
var trk = (activeTracks || []).find(function(t) { return t.id === layer.track_id; });
|
||||||
layers.push({
|
layers.push({
|
||||||
trackId: layer.track_id,
|
trackId: layer.track_id,
|
||||||
@@ -6142,17 +6142,13 @@ const beatSec = 60.0 / (parseInt(bpm) || 120);
|
|||||||
seenTracks[m._trackId] = true;
|
seenTracks[m._trackId] = true;
|
||||||
var track = (activeTracks || []).find(function(t) { return t.id === m._trackId; });
|
var track = (activeTracks || []).find(function(t) { return t.id === m._trackId; });
|
||||||
var isActive = m._trackId === st.trackId && m.id === st.target_id;
|
var isActive = m._trackId === st.trackId && m.id === st.target_id;
|
||||||
var isPlayOn = activePlayTrackIds === null || activePlayTrackIds.has(m._trackId);
|
var isPlayOn = activePlayTrackIds === m._trackId;
|
||||||
els.push(React.createElement("button", {
|
els.push(React.createElement("button", {
|
||||||
key: m._trackId,
|
key: m._trackId,
|
||||||
onClick: function() {
|
onClick: function() {
|
||||||
if (isActive) return;
|
if (isActive) return;
|
||||||
setActivePlayTrackIds(function(prev) {
|
setActivePlayTrackIds(function(prev) {
|
||||||
var allIds = allMidiItems.map(function(x) { return x._trackId; });
|
return prev === m._trackId ? null : m._trackId;
|
||||||
var s = prev === null ? new Set(allIds) : new Set(prev);
|
|
||||||
if (s.has(m._trackId)) s.delete(m._trackId);
|
|
||||||
else s.add(m._trackId);
|
|
||||||
return s.size === allIds.length ? null : s;
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
className: "flex items-center justify-center h-[20px] border border-zinc-600 rounded-md cursor-pointer outline-none mx-1 my-[2px] " + (isActive ? 'bg-yellow-600 text-black font-bold' : (isPlayOn ? 'bg-red-700 text-white font-semibold' : 'bg-zinc-700 text-zinc-300 hover:bg-zinc-600'))
|
className: "flex items-center justify-center h-[20px] border border-zinc-600 rounded-md cursor-pointer outline-none mx-1 my-[2px] " + (isActive ? 'bg-yellow-600 text-black font-bold' : (isPlayOn ? 'bg-red-700 text-white font-semibold' : 'bg-zinc-700 text-zinc-300 hover:bg-zinc-600'))
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user