feat: implemented select all notes feature.

This commit is contained in:
Xiaohan-Tian
2025-08-28 19:23:21 -07:00
parent 131b99aeb5
commit 6445325f3a
4 changed files with 68 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
import { KGCore } from '../core/KGCore';
import { useProjectStore } from '../stores/projectStore';
import { KGMidiRegion } from '../core/region/KGMidiRegion';
import { KGTrack } from '../core/track/KGTrack';
import { KGMidiNote } from '../core/midi/KGMidiNote';
/**
* Select all notes in the active region if the piano roll is visible.
* Logs the count and region id on success.
* Returns true if selection was performed; false otherwise.
*/
export const selectAllNotesInActiveRegion = (): boolean => {
const { showPianoRoll, activeRegionId, updateTrack } = useProjectStore.getState();
if (!showPianoRoll || !activeRegionId) {
return false;
}
try {
const core = KGCore.instance();
const project = core.getCurrentProject();
const tracks = project.getTracks();
let parentTrack: KGTrack | null = null;
let activeRegion: KGMidiRegion | null = null;
for (const track of tracks) {
const region = track.getRegions().find(r => r.getId() === activeRegionId);
if (region && region instanceof KGMidiRegion) {
parentTrack = track as KGTrack;
activeRegion = region as KGMidiRegion;
break;
}
}
if (!activeRegion || !parentTrack) {
return false;
}
// Clear previous selection and select all notes in the region
core.clearSelectedItems();
const notes: KGMidiNote[] = activeRegion.getNotes();
notes.forEach((n: KGMidiNote) => n.select());
core.addSelectedItems(notes);
// Update track to persist selection state in model/UI
updateTrack(parentTrack);
console.log(`Selected all notes: count=${notes.length}, regionId=${activeRegionId}`);
return true;
} catch (error) {
console.error('Select all notes failed:', error);
return false;
}
};