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:
2026-07-27 19:44:03 +07:00
parent db4bdd2471
commit c9176a27fa
2 changed files with 5 additions and 9 deletions
+3 -7
View File
@@ -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