@opendaw/studio-adapters 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/AudioData.d.ts +7 -0
- package/dist/AudioData.d.ts.map +1 -0
- package/dist/AudioData.js +1 -0
- package/dist/AudioFileBoxAdapter.d.ts +22 -0
- package/dist/AudioFileBoxAdapter.d.ts.map +1 -0
- package/dist/AudioFileBoxAdapter.js +19 -0
- package/dist/AudioLoader.d.ts +26 -0
- package/dist/AudioLoader.d.ts.map +1 -0
- package/dist/AudioLoader.js +1 -0
- package/dist/AudioMetaData.d.ts +8 -0
- package/dist/AudioMetaData.d.ts.map +1 -0
- package/dist/AudioMetaData.js +1 -0
- package/dist/AudioSample.d.ts +5 -0
- package/dist/AudioSample.d.ts.map +1 -0
- package/dist/AudioSample.js +1 -0
- package/dist/AutomatableParameterFieldAdapter.d.ts +35 -0
- package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -0
- package/dist/AutomatableParameterFieldAdapter.js +161 -0
- package/dist/BoxAdapter.d.ts +7 -0
- package/dist/BoxAdapter.d.ts.map +1 -0
- package/dist/BoxAdapter.js +1 -0
- package/dist/BoxAdapterCollection.d.ts +19 -0
- package/dist/BoxAdapterCollection.d.ts.map +1 -0
- package/dist/BoxAdapterCollection.js +35 -0
- package/dist/BoxAdapters.d.ts +11 -0
- package/dist/BoxAdapters.d.ts.map +1 -0
- package/dist/BoxAdapters.js +129 -0
- package/dist/BoxAdaptersContext.d.ts +24 -0
- package/dist/BoxAdaptersContext.d.ts.map +1 -0
- package/dist/BoxAdaptersContext.js +1 -0
- package/dist/ClipNotifications.d.ts +14 -0
- package/dist/ClipNotifications.d.ts.map +1 -0
- package/dist/ClipNotifications.js +1 -0
- package/dist/ClipSequencing.d.ts +12 -0
- package/dist/ClipSequencing.d.ts.map +1 -0
- package/dist/ClipSequencing.js +1 -0
- package/dist/EngineProcessorOptions.d.ts +18 -0
- package/dist/EngineProcessorOptions.d.ts.map +1 -0
- package/dist/EngineProcessorOptions.js +26 -0
- package/dist/EngineStateSchema.d.ts +7 -0
- package/dist/EngineStateSchema.d.ts.map +1 -0
- package/dist/EngineStateSchema.js +5 -0
- package/dist/FieldAdapter.d.ts +26 -0
- package/dist/FieldAdapter.d.ts.map +1 -0
- package/dist/FieldAdapter.js +59 -0
- package/dist/IconSymbol.d.ts +119 -0
- package/dist/IconSymbol.d.ts.map +1 -0
- package/dist/IconSymbol.js +119 -0
- package/dist/IndexComparator.d.ts +3 -0
- package/dist/IndexComparator.d.ts.map +1 -0
- package/dist/IndexComparator.js +11 -0
- package/dist/ManadatoryBoxes.d.ts +9 -0
- package/dist/ManadatoryBoxes.d.ts.map +1 -0
- package/dist/ManadatoryBoxes.js +1 -0
- package/dist/NoteBroadcaster.d.ts +14 -0
- package/dist/NoteBroadcaster.d.ts.map +1 -0
- package/dist/NoteBroadcaster.js +23 -0
- package/dist/NoteSender.d.ts +9 -0
- package/dist/NoteSender.d.ts.map +1 -0
- package/dist/NoteSender.js +15 -0
- package/dist/NoteStreamReceiver.d.ts +12 -0
- package/dist/NoteStreamReceiver.d.ts.map +1 -0
- package/dist/NoteStreamReceiver.js +23 -0
- package/dist/ParameterAdapterSet.d.ts +14 -0
- package/dist/ParameterAdapterSet.d.ts.map +1 -0
- package/dist/ParameterAdapterSet.js +27 -0
- package/dist/ParameterFieldAdapters.d.ts +11 -0
- package/dist/ParameterFieldAdapters.d.ts.map +1 -0
- package/dist/ParameterFieldAdapters.js +13 -0
- package/dist/PeakMeterProcessorOptions.d.ts +8 -0
- package/dist/PeakMeterProcessorOptions.d.ts.map +1 -0
- package/dist/PeakMeterProcessorOptions.js +1 -0
- package/dist/PianoModeAdapter.d.ts +15 -0
- package/dist/PianoModeAdapter.d.ts.map +1 -0
- package/dist/PianoModeAdapter.js +28 -0
- package/dist/ProjectDecoder.d.ts +13 -0
- package/dist/ProjectDecoder.d.ts.map +1 -0
- package/dist/ProjectDecoder.js +27 -0
- package/dist/RecordingProcessorOptions.d.ts +4 -0
- package/dist/RecordingProcessorOptions.d.ts.map +1 -0
- package/dist/RecordingProcessorOptions.js +1 -0
- package/dist/RingBuffer.d.ts +19 -0
- package/dist/RingBuffer.d.ts.map +1 -0
- package/dist/RingBuffer.js +92 -0
- package/dist/RootBoxAdapter.d.ts +30 -0
- package/dist/RootBoxAdapter.d.ts.map +1 -0
- package/dist/RootBoxAdapter.js +43 -0
- package/dist/SortedBoxAdapterCollection.d.ts +29 -0
- package/dist/SortedBoxAdapterCollection.d.ts.map +1 -0
- package/dist/SortedBoxAdapterCollection.js +100 -0
- package/dist/UnionAdapterTypes.d.ts +15 -0
- package/dist/UnionAdapterTypes.d.ts.map +1 -0
- package/dist/UnionAdapterTypes.js +5 -0
- package/dist/UpdateClockRate.d.ts +2 -0
- package/dist/UpdateClockRate.d.ts.map +1 -0
- package/dist/UpdateClockRate.js +2 -0
- package/dist/audio-unit/AudioBusBoxAdapter.d.ts +28 -0
- package/dist/audio-unit/AudioBusBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioBusBoxAdapter.js +33 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +55 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitBoxAdapter.js +97 -0
- package/dist/audio-unit/AudioUnitInput.d.ts +21 -0
- package/dist/audio-unit/AudioUnitInput.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitInput.js +74 -0
- package/dist/audio-unit/AudioUnitInputAdapter.d.ts +4 -0
- package/dist/audio-unit/AudioUnitInputAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitInputAdapter.js +1 -0
- package/dist/audio-unit/AudioUnitOutput.d.ts +14 -0
- package/dist/audio-unit/AudioUnitOutput.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitOutput.js +42 -0
- package/dist/audio-unit/AudioUnitTracks.d.ts +21 -0
- package/dist/audio-unit/AudioUnitTracks.d.ts.map +1 -0
- package/dist/audio-unit/AudioUnitTracks.js +62 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts +23 -0
- package/dist/audio-unit/AuxSendBoxAdapter.d.ts.map +1 -0
- package/dist/audio-unit/AuxSendBoxAdapter.js +58 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/DelayDeviceBoxAdapter.js +50 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts +31 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/ModularDeviceBoxAdapter.js +38 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts +52 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/RevampDeviceBoxAdapter.js +66 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js +44 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts +33 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.js +41 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +32 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/NanoDeviceBoxAdapter.js +40 -0
- package/dist/devices/instruments/Playfield/Gate.d.ts +6 -0
- package/dist/devices/instruments/Playfield/Gate.d.ts.map +1 -0
- package/dist/devices/instruments/Playfield/Gate.js +6 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +63 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +128 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts +35 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js +40 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts +34 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/TapeDeviceBoxAdapter.js +42 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts +39 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.js +47 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts +37 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.js +51 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts +32 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/PitchDeviceBoxAdapter.js +39 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts +28 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts.map +1 -0
- package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.js +35 -0
- package/dist/devices.d.ts +68 -0
- package/dist/devices.d.ts.map +1 -0
- package/dist/devices.js +55 -0
- package/dist/editing/UserEditing.d.ts +15 -0
- package/dist/editing/UserEditing.d.ts.map +1 -0
- package/dist/editing/UserEditing.js +39 -0
- package/dist/editing/UserEditingManager.d.ts +14 -0
- package/dist/editing/UserEditingManager.d.ts.map +1 -0
- package/dist/editing/UserEditingManager.js +23 -0
- package/dist/grooves/GrooveBoxAdapter.d.ts +10 -0
- package/dist/grooves/GrooveBoxAdapter.d.ts.map +1 -0
- package/dist/grooves/GrooveBoxAdapter.js +4 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.d.ts +27 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.d.ts.map +1 -0
- package/dist/grooves/GrooveShuffleBoxAdapter.js +43 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +99 -0
- package/dist/modular/abstract.d.ts +30 -0
- package/dist/modular/abstract.d.ts.map +1 -0
- package/dist/modular/abstract.js +39 -0
- package/dist/modular/connection.d.ts +15 -0
- package/dist/modular/connection.d.ts.map +1 -0
- package/dist/modular/connection.js +12 -0
- package/dist/modular/connector.d.ts +21 -0
- package/dist/modular/connector.d.ts.map +1 -0
- package/dist/modular/connector.js +42 -0
- package/dist/modular/modular.d.ts +30 -0
- package/dist/modular/modular.d.ts.map +1 -0
- package/dist/modular/modular.js +68 -0
- package/dist/modular/module.d.ts +21 -0
- package/dist/modular/module.d.ts.map +1 -0
- package/dist/modular/module.js +23 -0
- package/dist/modular/modules/audio-input.d.ts +14 -0
- package/dist/modular/modules/audio-input.d.ts.map +1 -0
- package/dist/modular/modules/audio-input.js +17 -0
- package/dist/modular/modules/audio-output.d.ts +14 -0
- package/dist/modular/modules/audio-output.d.ts.map +1 -0
- package/dist/modular/modules/audio-output.js +17 -0
- package/dist/modular/modules/delay.d.ts +17 -0
- package/dist/modular/modules/delay.d.ts.map +1 -0
- package/dist/modular/modules/delay.js +23 -0
- package/dist/modular/modules/gain.d.ts +17 -0
- package/dist/modular/modules/gain.d.ts.map +1 -0
- package/dist/modular/modules/gain.js +23 -0
- package/dist/modular/modules/multiplier.d.ts +13 -0
- package/dist/modular/modules/multiplier.d.ts.map +1 -0
- package/dist/modular/modules/multiplier.js +19 -0
- package/dist/modular/user-interface.d.ts +21 -0
- package/dist/modular/user-interface.d.ts.map +1 -0
- package/dist/modular/user-interface.js +23 -0
- package/dist/protocols.d.ts +25 -0
- package/dist/protocols.d.ts.map +1 -0
- package/dist/protocols.js +1 -0
- package/dist/selection/FilteredSelection.d.ts +20 -0
- package/dist/selection/FilteredSelection.d.ts.map +1 -0
- package/dist/selection/FilteredSelection.js +58 -0
- package/dist/selection/SelectableVertex.d.ts +4 -0
- package/dist/selection/SelectableVertex.d.ts.map +1 -0
- package/dist/selection/SelectableVertex.js +1 -0
- package/dist/selection/SelectionEntry.d.ts +7 -0
- package/dist/selection/SelectionEntry.d.ts.map +1 -0
- package/dist/selection/SelectionEntry.js +1 -0
- package/dist/selection/VertexSelection.d.ts +29 -0
- package/dist/selection/VertexSelection.d.ts.map +1 -0
- package/dist/selection/VertexSelection.js +120 -0
- package/dist/selection/isVertexOfBox.d.ts +5 -0
- package/dist/selection/isVertexOfBox.d.ts.map +1 -0
- package/dist/selection/isVertexOfBox.js +1 -0
- package/dist/timeline/ClipBoxAdapter.d.ts +38 -0
- package/dist/timeline/ClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/ClipBoxAdapter.js +11 -0
- package/dist/timeline/MarkerBoxAdapter.d.ts +24 -0
- package/dist/timeline/MarkerBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/MarkerBoxAdapter.js +41 -0
- package/dist/timeline/MarkerTrackAdapter.d.ts +19 -0
- package/dist/timeline/MarkerTrackAdapter.d.ts.map +1 -0
- package/dist/timeline/MarkerTrackAdapter.js +45 -0
- package/dist/timeline/RegionBoxAdapter.d.ts +48 -0
- package/dist/timeline/RegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/RegionBoxAdapter.js +12 -0
- package/dist/timeline/RegionEditing.d.ts +7 -0
- package/dist/timeline/RegionEditing.d.ts.map +1 -0
- package/dist/timeline/RegionEditing.js +40 -0
- package/dist/timeline/TimelineBoxAdapter.d.ts +16 -0
- package/dist/timeline/TimelineBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/TimelineBoxAdapter.js +14 -0
- package/dist/timeline/TrackBoxAdapter.d.ts +32 -0
- package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/TrackBoxAdapter.js +167 -0
- package/dist/timeline/TrackClips.d.ts +16 -0
- package/dist/timeline/TrackClips.d.ts.map +1 -0
- package/dist/timeline/TrackClips.js +26 -0
- package/dist/timeline/TrackRegions.d.ts +17 -0
- package/dist/timeline/TrackRegions.d.ts.map +1 -0
- package/dist/timeline/TrackRegions.js +41 -0
- package/dist/timeline/TrackType.d.ts +12 -0
- package/dist/timeline/TrackType.d.ts.map +1 -0
- package/dist/timeline/TrackType.js +37 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts +39 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/AudioClipBoxAdapter.js +87 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.d.ts +39 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/NoteClipBoxAdapter.js +92 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.d.ts +40 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/clip/ValueClipBoxAdapter.js +98 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts +40 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/collection/NoteEventCollectionBoxAdapter.js +136 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts +33 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/collection/ValueEventCollectionBoxAdapter.js +139 -0
- package/dist/timeline/event/InterpolationFieldAdapter.d.ts +8 -0
- package/dist/timeline/event/InterpolationFieldAdapter.d.ts.map +1 -0
- package/dist/timeline/event/InterpolationFieldAdapter.js +47 -0
- package/dist/timeline/event/NoteEventBoxAdapter.d.ts +45 -0
- package/dist/timeline/event/NoteEventBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/event/NoteEventBoxAdapter.js +106 -0
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts +39 -0
- package/dist/timeline/event/ValueEventBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/event/ValueEventBoxAdapter.js +113 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts +53 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/AudioRegionBoxAdapter.js +143 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts +53 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/NoteRegionBoxAdapter.js +186 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts +59 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.d.ts.map +1 -0
- package/dist/timeline/region/ValueRegionBoxAdapter.js +193 -0
- package/dist/unions.d.ts +11 -0
- package/dist/unions.d.ts.map +1 -0
- package/dist/unions.js +17 -0
- package/package.json +38 -0
@@ -0,0 +1,120 @@
|
|
1
|
+
import { asInstanceOf, assert, Listeners, Option, Terminator, UUID } from "@opendaw/lib-std";
|
2
|
+
import { Address } from "@opendaw/lib-box";
|
3
|
+
import { Pointers } from "@opendaw/studio-enums";
|
4
|
+
import { SelectionBox } from "@opendaw/studio-boxes";
|
5
|
+
import { FilteredSelection } from "./FilteredSelection";
|
6
|
+
/**
|
7
|
+
* Represents the main selection management within a document.
|
8
|
+
* This class maintains selections for different users, with each user having their own unique selection.
|
9
|
+
*/
|
10
|
+
export class VertexSelection {
|
11
|
+
editing;
|
12
|
+
owner;
|
13
|
+
#lifeTime;
|
14
|
+
#entityMap; // sorted on entity
|
15
|
+
#selectableMap; // sorted on selectable
|
16
|
+
#listeners;
|
17
|
+
#target = Option.None;
|
18
|
+
constructor(editing, owner) {
|
19
|
+
this.editing = editing;
|
20
|
+
this.owner = owner;
|
21
|
+
this.#lifeTime = new Terminator();
|
22
|
+
this.#entityMap = UUID.newSet(entry => entry.box.address.uuid);
|
23
|
+
this.#selectableMap = Address.newSet(entry => entry.selectable.address);
|
24
|
+
this.#listeners = new Listeners();
|
25
|
+
}
|
26
|
+
switch(target) {
|
27
|
+
this.release();
|
28
|
+
console.debug(`VertexSelection.switch(${target.address.toString()})`);
|
29
|
+
this.#target = Option.wrap(target);
|
30
|
+
this.#lifeTime.own(this.#watch(target));
|
31
|
+
return this;
|
32
|
+
}
|
33
|
+
release() {
|
34
|
+
if (this.#target.isEmpty()) {
|
35
|
+
return;
|
36
|
+
}
|
37
|
+
this.#target = Option.None;
|
38
|
+
this.#lifeTime.terminate();
|
39
|
+
this.#selectableMap.forEach(entry => this.#listeners.proxy.onDeselected(entry.selectable));
|
40
|
+
this.#selectableMap.clear();
|
41
|
+
this.#entityMap.clear();
|
42
|
+
}
|
43
|
+
createFilteredSelection(affiliate, map) {
|
44
|
+
return new FilteredSelection(this, affiliate, map);
|
45
|
+
}
|
46
|
+
select(...selectables) {
|
47
|
+
if (this.#target.isEmpty()) {
|
48
|
+
console.debug(`Cannot select without a user`);
|
49
|
+
return;
|
50
|
+
}
|
51
|
+
if (selectables.length === 0) {
|
52
|
+
return;
|
53
|
+
}
|
54
|
+
this.editing.modify(() => {
|
55
|
+
const selection = this.#target.unwrap();
|
56
|
+
for (const selectable of selectables) {
|
57
|
+
if (!this.#selectableMap.hasKey(selectable.address)) {
|
58
|
+
SelectionBox.create(this.owner, UUID.generate(), box => {
|
59
|
+
box.selectable.refer(selectable);
|
60
|
+
box.selection.refer(selection);
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}, false);
|
65
|
+
}
|
66
|
+
deselect(...selectables) {
|
67
|
+
if (this.#target.isEmpty()) {
|
68
|
+
console.debug(`Cannot deselect without a user`);
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
if (selectables.length === 0) {
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
this.editing.modify(() => selectables
|
75
|
+
.forEach(selectable => this.#selectableMap.get(selectable.address).box.delete()), false);
|
76
|
+
}
|
77
|
+
deselectAll() {
|
78
|
+
this.deselect(...this.#selectableMap.values().map(entry => entry.selectable));
|
79
|
+
}
|
80
|
+
distance(inventory) {
|
81
|
+
const excludes = [];
|
82
|
+
for (const selectable of inventory) {
|
83
|
+
if (!this.#selectableMap.hasKey(selectable.address)) {
|
84
|
+
excludes.push(selectable);
|
85
|
+
}
|
86
|
+
}
|
87
|
+
return excludes;
|
88
|
+
}
|
89
|
+
isEmpty() { return this.#selectableMap.size() === 0; }
|
90
|
+
count() { return this.#selectableMap.size(); }
|
91
|
+
isSelected(selectable) { return this.#selectableMap.hasKey(selectable.address); }
|
92
|
+
selected() { return this.#selectableMap.values().map(entry => entry.selectable); }
|
93
|
+
subscribe(listener) { return this.#listeners.subscribe(listener); }
|
94
|
+
catchupAndSubscribe(listener) {
|
95
|
+
this.selected().forEach(element => listener.onSelected(element));
|
96
|
+
return this.#listeners.subscribe(listener);
|
97
|
+
}
|
98
|
+
#watch(target) {
|
99
|
+
const listener = {
|
100
|
+
onAdd: (pointer) => {
|
101
|
+
const box = asInstanceOf(pointer.box, SelectionBox);
|
102
|
+
const selectable = box.selectable.targetVertex.unwrap();
|
103
|
+
const entry = { box, selectable };
|
104
|
+
this.#listeners.proxy.onSelected(selectable);
|
105
|
+
assert(this.#entityMap.add(entry), "Could not add to entityMap");
|
106
|
+
assert(this.#selectableMap.add(entry), "Could not add to selectableMap");
|
107
|
+
},
|
108
|
+
onRemove: (pointer) => {
|
109
|
+
const box = asInstanceOf(pointer.box, SelectionBox);
|
110
|
+
const entry = this.#entityMap.removeByKey(box.address.uuid);
|
111
|
+
assert(entry.box === box, "Broken selection");
|
112
|
+
const selectable = entry.selectable;
|
113
|
+
this.#listeners.proxy.onDeselected(selectable);
|
114
|
+
this.#selectableMap.removeByKey(selectable.address);
|
115
|
+
}
|
116
|
+
};
|
117
|
+
target.pointerHub.filter(Pointers.Selection).forEach(pointer => listener.onAdd(pointer));
|
118
|
+
return target.pointerHub.subscribeTransactual(listener, Pointers.Selection);
|
119
|
+
}
|
120
|
+
}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { Predicate } from "@opendaw/lib-std";
|
2
|
+
import { Box } from "@opendaw/lib-box";
|
3
|
+
import { SelectableVertex } from "./SelectableVertex";
|
4
|
+
export declare const isVertexOfBox: (predicate: Predicate<Box>) => Predicate<SelectableVertex>;
|
5
|
+
//# sourceMappingURL=isVertexOfBox.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"isVertexOfBox.d.ts","sourceRoot":"","sources":["../../src/selection/isVertexOfBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAEnD,eAAO,MAAM,aAAa,GAAI,WAAW,SAAS,CAAC,GAAG,CAAC,KAAG,SAAS,CAAC,gBAAgB,CAA8C,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export const isVertexOfBox = (predicate) => (vertex) => predicate(vertex.box);
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { int, Nullish, ObservableValue, Observer, Option, Selectable, Subscription } from "@opendaw/lib-std";
|
2
|
+
import { Box } from "@opendaw/lib-box";
|
3
|
+
import { ValueClipBoxAdapter } from "./clip/ValueClipBoxAdapter";
|
4
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
5
|
+
import { AudioClipBoxAdapter } from "./clip/AudioClipBoxAdapter";
|
6
|
+
import { AnyClipBox } from "../unions";
|
7
|
+
import { NoteClipBoxAdapter } from "./clip/NoteClipBoxAdapter";
|
8
|
+
import { BoxAdapter } from "../BoxAdapter";
|
9
|
+
import { TrackBoxAdapter } from "./TrackBoxAdapter";
|
10
|
+
import { AnyClipBoxAdapter } from "../UnionAdapterTypes";
|
11
|
+
import { BoxAdapters } from "../BoxAdapters";
|
12
|
+
export interface ClipBoxAdapterVisitor<R> {
|
13
|
+
visitAudioClipBoxAdapter?(adapter: AudioClipBoxAdapter): R;
|
14
|
+
visitNoteClipBoxAdapter?(adapter: NoteClipBoxAdapter): R;
|
15
|
+
visitValueClipBoxAdapter?(adapter: ValueClipBoxAdapter): R;
|
16
|
+
}
|
17
|
+
export interface ClipBoxAdapter<CONTENT> extends BoxAdapter, Selectable {
|
18
|
+
get box(): AnyClipBox;
|
19
|
+
get isSelected(): boolean;
|
20
|
+
get hasCollection(): boolean;
|
21
|
+
get duration(): ppqn;
|
22
|
+
get hue(): int;
|
23
|
+
get mute(): boolean;
|
24
|
+
get label(): string;
|
25
|
+
get isMirrowed(): boolean;
|
26
|
+
get canMirror(): boolean;
|
27
|
+
get optCollection(): Option<CONTENT>;
|
28
|
+
get trackBoxAdapter(): Option<TrackBoxAdapter>;
|
29
|
+
consolidate(): void;
|
30
|
+
clone(consolidate: boolean): void;
|
31
|
+
catchupAndSubscribeSelected(observer: Observer<ObservableValue<boolean>>): Subscription;
|
32
|
+
subscribeChange(observer: Observer<void>): Subscription;
|
33
|
+
accept<VISITOR extends ClipBoxAdapterVisitor<any>>(visitor: VISITOR): VISITOR extends ClipBoxAdapterVisitor<infer R> ? Nullish<R> : void;
|
34
|
+
}
|
35
|
+
export declare const ClipAdapters: {
|
36
|
+
for: (boxAdapters: BoxAdapters, box: Box) => AnyClipBoxAdapter;
|
37
|
+
};
|
38
|
+
//# sourceMappingURL=ClipBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ClipBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/ClipBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAErH,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAA;AACpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,wBAAwB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,CAAC,CAAA;IAC1D,uBAAuB,CAAC,CAAC,OAAO,EAAE,kBAAkB,GAAG,CAAC,CAAA;IACxD,wBAAwB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,CAAE,SAAQ,UAAU,EAAE,UAAU;IACnE,IAAI,GAAG,IAAI,UAAU,CAAA;IACrB,IAAI,UAAU,IAAI,OAAO,CAAA;IACzB,IAAI,aAAa,IAAI,OAAO,CAAA;IAC5B,IAAI,QAAQ,IAAI,IAAI,CAAA;IACpB,IAAI,GAAG,IAAI,GAAG,CAAA;IACd,IAAI,IAAI,IAAI,OAAO,CAAA;IACnB,IAAI,KAAK,IAAI,MAAM,CAAA;IACnB,IAAI,UAAU,IAAI,OAAO,CAAA;IACzB,IAAI,SAAS,IAAI,OAAO,CAAA;IACxB,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,CAAA;IAE9C,WAAW,IAAI,IAAI,CAAA;IACnB,KAAK,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;IACjC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAA;IACvF,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;IACvD,MAAM,CAAC,OAAO,SAAS,qBAAqB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,GAC7D,OAAO,SAAS,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;CAC3E;AAED,eAAO,MAAM,YAAY;uBACF,WAAW,OAAO,GAAG,KAAG,iBAAiB;CAK/D,CAAA"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { asDefined } from "@opendaw/lib-std";
|
2
|
+
import { ValueClipBoxAdapter } from "./clip/ValueClipBoxAdapter";
|
3
|
+
import { AudioClipBoxAdapter } from "./clip/AudioClipBoxAdapter";
|
4
|
+
import { NoteClipBoxAdapter } from "./clip/NoteClipBoxAdapter";
|
5
|
+
export const ClipAdapters = {
|
6
|
+
for: (boxAdapters, box) => asDefined(box.accept({
|
7
|
+
visitNoteClipBox: (box) => boxAdapters.adapterFor(box, NoteClipBoxAdapter),
|
8
|
+
visitValueClipBox: (box) => boxAdapters.adapterFor(box, ValueClipBoxAdapter),
|
9
|
+
visitAudioClipBox: (box) => boxAdapters.adapterFor(box, AudioClipBoxAdapter)
|
10
|
+
}), "")
|
11
|
+
};
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Comparator, int, Option, UUID } from "@opendaw/lib-std";
|
2
|
+
import { Address } from "@opendaw/lib-box";
|
3
|
+
import { Event } from "@opendaw/lib-dsp";
|
4
|
+
import { MarkerBox } from "@opendaw/studio-boxes";
|
5
|
+
import { BoxAdapter } from "../BoxAdapter";
|
6
|
+
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
7
|
+
import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
|
8
|
+
export declare class MarkerBoxAdapter implements BoxAdapter, Event {
|
9
|
+
#private;
|
10
|
+
static readonly Comparator: Comparator<MarkerBoxAdapter>;
|
11
|
+
readonly type = "marker-event";
|
12
|
+
constructor(context: BoxAdaptersContext, box: MarkerBox);
|
13
|
+
get box(): MarkerBox;
|
14
|
+
get uuid(): UUID.Format;
|
15
|
+
get address(): Address;
|
16
|
+
get position(): int;
|
17
|
+
get plays(): int;
|
18
|
+
get hue(): int;
|
19
|
+
get label(): string;
|
20
|
+
get trackAdapter(): Option<MarkerTrackAdapter>;
|
21
|
+
terminate(): void;
|
22
|
+
toString(): string;
|
23
|
+
}
|
24
|
+
//# sourceMappingURL=MarkerBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MarkerBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/MarkerBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAc,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAsB,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAGvD,qBAAa,gBAAiB,YAAW,UAAU,EAAE,KAAK;;IACtD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAoC;IAE5F,QAAQ,CAAC,IAAI,kBAAiB;gBAOlB,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS;IAiBvD,IAAI,GAAG,IAAI,SAAS,CAAmB;IACvC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,QAAQ,IAAI,GAAG,CAAuC;IAC1D,IAAI,KAAK,IAAI,GAAG,CAAoC;IACpD,IAAI,GAAG,IAAI,GAAG,CAAkC;IAChD,IAAI,KAAK,IAAI,MAAM,CAAoC;IACvD,IAAI,YAAY,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAG7C;IAED,SAAS;IACT,QAAQ,IAAI,MAAM;CACrB"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { Terminator, UUID } from "@opendaw/lib-std";
|
2
|
+
import { Propagation } from "@opendaw/lib-box";
|
3
|
+
import { TimelineBoxAdapter } from "./TimelineBoxAdapter";
|
4
|
+
export class MarkerBoxAdapter {
|
5
|
+
static Comparator = (a, b) => a.position - b.position;
|
6
|
+
type = "marker-event";
|
7
|
+
#terminator = new Terminator();
|
8
|
+
#context;
|
9
|
+
#box;
|
10
|
+
constructor(context, box) {
|
11
|
+
this.#context = context;
|
12
|
+
this.#box = box;
|
13
|
+
this.#terminator.own(this.#box.subscribe(Propagation.Children, (update) => {
|
14
|
+
if (this.trackAdapter.isEmpty()) {
|
15
|
+
return;
|
16
|
+
}
|
17
|
+
if (update.type === "primitive" || update.type === "pointer") {
|
18
|
+
const track = this.trackAdapter.unwrap();
|
19
|
+
if (this.#box.position.address.equals(update.address)) {
|
20
|
+
track.onSortingChanged();
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
track.dispatchChange();
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}));
|
27
|
+
}
|
28
|
+
get box() { return this.#box; }
|
29
|
+
get uuid() { return this.#box.address.uuid; }
|
30
|
+
get address() { return this.#box.address; }
|
31
|
+
get position() { return this.#box.position.getValue(); }
|
32
|
+
get plays() { return this.#box.plays.getValue(); }
|
33
|
+
get hue() { return this.#box.hue.getValue(); }
|
34
|
+
get label() { return this.#box.label.getValue(); }
|
35
|
+
get trackAdapter() {
|
36
|
+
return this.#box.track.targetVertex
|
37
|
+
.map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TimelineBoxAdapter).markerTrack);
|
38
|
+
}
|
39
|
+
terminate() { this.#terminator.terminate(); }
|
40
|
+
toString() { return `{MarkerBoxAdapter ${UUID.toString(this.#box.address.uuid).substring(0, 4)}, plays: ${this.plays}`; }
|
41
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { Notifier, Observer, Subscription, Terminable } from "@opendaw/lib-std";
|
2
|
+
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
3
|
+
import { EventCollection } from "@opendaw/lib-dsp";
|
4
|
+
import { MarkerBoxAdapter } from "./MarkerBoxAdapter";
|
5
|
+
import { MarkerTrack } from "@opendaw/studio-boxes";
|
6
|
+
export declare class MarkerTrackAdapter implements Terminable {
|
7
|
+
#private;
|
8
|
+
readonly changeNotifier: Notifier<void>;
|
9
|
+
constructor(context: BoxAdaptersContext, object: MarkerTrack);
|
10
|
+
subscribe(observer: Observer<void>): Subscription;
|
11
|
+
get context(): BoxAdaptersContext;
|
12
|
+
get enabled(): boolean;
|
13
|
+
get events(): EventCollection<MarkerBoxAdapter>;
|
14
|
+
get object(): MarkerTrack;
|
15
|
+
dispatchChange(): void;
|
16
|
+
onSortingChanged(): void;
|
17
|
+
terminate(): void;
|
18
|
+
}
|
19
|
+
//# sourceMappingURL=MarkerTrackAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MarkerTrackAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/MarkerTrackAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,QAAQ,EAAa,YAAY,EAAE,UAAU,EAAO,MAAM,kBAAkB,CAAA;AACtG,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAY,WAAW,EAAC,MAAM,uBAAuB,CAAA;AAE5D,qBAAa,kBAAmB,YAAW,UAAU;;IAIjD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAK3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW;IAyB5D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEjD,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IACxD,IAAI,OAAO,IAAI,OAAO,CAAyC;IAC/D,IAAI,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAsB;IACrE,IAAI,MAAM,IAAI,WAAW,CAAsB;IAE/C,cAAc,IAAI,IAAI;IAEtB,gBAAgB,IAAI,IAAI;IAKxB,SAAS,IAAI,IAAI;CACpB"}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { assert, Notifier, UUID } from "@opendaw/lib-std";
|
2
|
+
import { EventCollection } from "@opendaw/lib-dsp";
|
3
|
+
import { MarkerBoxAdapter } from "./MarkerBoxAdapter";
|
4
|
+
import { MarkerBox } from "@opendaw/studio-boxes";
|
5
|
+
export class MarkerTrackAdapter {
|
6
|
+
#context;
|
7
|
+
#object;
|
8
|
+
changeNotifier;
|
9
|
+
#adapters;
|
10
|
+
#events;
|
11
|
+
#subscription;
|
12
|
+
constructor(context, object) {
|
13
|
+
this.#context = context;
|
14
|
+
this.#object = object;
|
15
|
+
this.changeNotifier = new Notifier();
|
16
|
+
this.#adapters = UUID.newSet(adapter => adapter.uuid);
|
17
|
+
this.#events = EventCollection.create(MarkerBoxAdapter.Comparator);
|
18
|
+
this.#subscription = this.#object.markers.pointerHub.catchupAndSubscribeTransactual({
|
19
|
+
onAdd: ({ box }) => {
|
20
|
+
if (box instanceof MarkerBox) {
|
21
|
+
const adapter = this.#context.boxAdapters.adapterFor(box, MarkerBoxAdapter);
|
22
|
+
const added = this.#adapters.add(adapter);
|
23
|
+
assert(added, "Could not add adapter");
|
24
|
+
this.#events.add(adapter);
|
25
|
+
this.dispatchChange();
|
26
|
+
}
|
27
|
+
},
|
28
|
+
onRemove: ({ box: { address: { uuid } } }) => {
|
29
|
+
this.#events.remove(this.#adapters.removeByKey(uuid));
|
30
|
+
this.dispatchChange();
|
31
|
+
}
|
32
|
+
});
|
33
|
+
}
|
34
|
+
subscribe(observer) { return this.changeNotifier.subscribe(observer); }
|
35
|
+
get context() { return this.#context; }
|
36
|
+
get enabled() { return this.#object.enabled.getValue(); }
|
37
|
+
get events() { return this.#events; }
|
38
|
+
get object() { return this.#object; }
|
39
|
+
dispatchChange() { this.changeNotifier.notify(); }
|
40
|
+
onSortingChanged() {
|
41
|
+
this.#events.onIndexingChanged();
|
42
|
+
this.dispatchChange();
|
43
|
+
}
|
44
|
+
terminate() { this.#subscription.terminate(); }
|
45
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import { LoopableRegion, ppqn, Region } from "@opendaw/lib-dsp";
|
2
|
+
import { Comparator, int, Nullish, Observer, Option, Selectable, Subscription } from "@opendaw/lib-std";
|
3
|
+
import { AudioRegionBoxAdapter } from "./region/AudioRegionBoxAdapter";
|
4
|
+
import { Box, Field } from "@opendaw/lib-box";
|
5
|
+
import { NoteRegionBoxAdapter } from "./region/NoteRegionBoxAdapter";
|
6
|
+
import { Pointers } from "@opendaw/studio-enums";
|
7
|
+
import { ValueRegionBoxAdapter } from "./region/ValueRegionBoxAdapter";
|
8
|
+
import { AnyRegionBox } from "../unions";
|
9
|
+
import { BoxAdapter } from "../BoxAdapter";
|
10
|
+
import { TrackBoxAdapter } from "./TrackBoxAdapter";
|
11
|
+
import { AnyRegionBoxAdapter } from "../UnionAdapterTypes";
|
12
|
+
import { BoxAdapters } from "../BoxAdapters";
|
13
|
+
export interface RegionBoxAdapterVisitor<R> {
|
14
|
+
visitNoteRegionBoxAdapter?(adapter: NoteRegionBoxAdapter): R;
|
15
|
+
visitAudioRegionBoxAdapter?(adapter: AudioRegionBoxAdapter): R;
|
16
|
+
visitValueRegionBoxAdapter?(adapter: ValueRegionBoxAdapter): R;
|
17
|
+
}
|
18
|
+
export interface RegionBoxAdapter<CONTENT> extends BoxAdapter, Region, Selectable {
|
19
|
+
get box(): AnyRegionBox;
|
20
|
+
get isSelected(): boolean;
|
21
|
+
get hue(): int;
|
22
|
+
get mute(): boolean;
|
23
|
+
get label(): string;
|
24
|
+
get isMirrowed(): boolean;
|
25
|
+
get canMirror(): boolean;
|
26
|
+
get trackBoxAdapter(): Option<TrackBoxAdapter>;
|
27
|
+
get hasCollection(): boolean;
|
28
|
+
get optCollection(): Option<CONTENT>;
|
29
|
+
subscribeChange(observer: Observer<void>): Subscription;
|
30
|
+
copyTo(target?: {
|
31
|
+
track?: Field<Pointers.RegionCollection>;
|
32
|
+
position?: ppqn;
|
33
|
+
}): AnyRegionBoxAdapter;
|
34
|
+
consolidate(): void;
|
35
|
+
flatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): void;
|
36
|
+
canFlatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
|
37
|
+
accept<VISITOR extends RegionBoxAdapterVisitor<any>>(visitor: VISITOR): VISITOR extends RegionBoxAdapterVisitor<infer R> ? Nullish<R> : void;
|
38
|
+
}
|
39
|
+
export interface LoopableRegionBoxAdapter<CONTENT> extends RegionBoxAdapter<CONTENT>, LoopableRegion {
|
40
|
+
get offset(): ppqn;
|
41
|
+
get loopOffset(): ppqn;
|
42
|
+
get loopDuration(): ppqn;
|
43
|
+
}
|
44
|
+
export declare const RegionComparator: Comparator<AnyRegionBoxAdapter>;
|
45
|
+
export declare const RegionAdapters: {
|
46
|
+
for: (boxAdapters: BoxAdapters, box: Box) => AnyRegionBoxAdapter;
|
47
|
+
};
|
48
|
+
//# sourceMappingURL=RegionBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"RegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/RegionBoxAdapter.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { asDefined } from "@opendaw/lib-std";
|
2
|
+
import { AudioRegionBoxAdapter } from "./region/AudioRegionBoxAdapter";
|
3
|
+
import { NoteRegionBoxAdapter } from "./region/NoteRegionBoxAdapter";
|
4
|
+
import { ValueRegionBoxAdapter } from "./region/ValueRegionBoxAdapter";
|
5
|
+
export const RegionComparator = (a, b) => a.position - b.position;
|
6
|
+
export const RegionAdapters = {
|
7
|
+
for: (boxAdapters, box) => asDefined(box.accept({
|
8
|
+
visitNoteRegionBox: (box) => boxAdapters.adapterFor(box, NoteRegionBoxAdapter),
|
9
|
+
visitAudioRegionBox: (box) => boxAdapters.adapterFor(box, AudioRegionBoxAdapter),
|
10
|
+
visitValueRegionBox: (box) => boxAdapters.adapterFor(box, ValueRegionBoxAdapter)
|
11
|
+
}), "")
|
12
|
+
};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
2
|
+
import { AnyRegionBoxAdapter } from "../UnionAdapterTypes";
|
3
|
+
export declare namespace RegionEditing {
|
4
|
+
const cut: (region: AnyRegionBoxAdapter, cut: ppqn, consolidate: boolean) => void;
|
5
|
+
const clip: (region: AnyRegionBoxAdapter, begin: ppqn, end: ppqn) => void;
|
6
|
+
}
|
7
|
+
//# sourceMappingURL=RegionEditing.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"RegionEditing.d.ts","sourceRoot":"","sources":["../../src/timeline/RegionEditing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,OAAO,EAAC,mBAAmB,EAAoB,MAAM,sBAAsB,CAAA;AAE3E,yBAAiB,aAAa,CAAC;IACpB,MAAM,GAAG,GAAI,QAAQ,mBAAmB,EAAE,KAAK,IAAI,EAAE,aAAa,OAAO,KAAG,IAclF,CAAA;IAEM,MAAM,IAAI,GAAI,QAAQ,mBAAmB,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI,KAAG,IAa1E,CAAA;CACJ"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { mod, panic } from "@opendaw/lib-std";
|
2
|
+
import { UnionAdapterTypes } from "../UnionAdapterTypes";
|
3
|
+
export var RegionEditing;
|
4
|
+
(function (RegionEditing) {
|
5
|
+
RegionEditing.cut = (region, cut, consolidate) => {
|
6
|
+
if (region.position >= cut || cut >= region.complete) {
|
7
|
+
return;
|
8
|
+
}
|
9
|
+
if (UnionAdapterTypes.isLoopableRegion(region)) {
|
10
|
+
const { position, complete, loopOffset, loopDuration } = region;
|
11
|
+
region.box.duration.setValue(cut - position);
|
12
|
+
region.copyTo({
|
13
|
+
position: cut,
|
14
|
+
duration: complete - cut,
|
15
|
+
loopOffset: mod(loopOffset + (cut - position), loopDuration),
|
16
|
+
consolidate
|
17
|
+
});
|
18
|
+
}
|
19
|
+
else {
|
20
|
+
return panic("Not yet implemented");
|
21
|
+
}
|
22
|
+
};
|
23
|
+
RegionEditing.clip = (region, begin, end) => {
|
24
|
+
if (UnionAdapterTypes.isLoopableRegion(region)) {
|
25
|
+
const { position, complete, loopOffset, loopDuration } = region;
|
26
|
+
if (complete - end <= 0) {
|
27
|
+
return panic(`duration will zero or negative(${complete - end})`);
|
28
|
+
}
|
29
|
+
region.box.duration.setValue(begin - position);
|
30
|
+
region.copyTo({
|
31
|
+
position: end,
|
32
|
+
duration: complete - end,
|
33
|
+
loopOffset: mod(loopOffset + (end - position), loopDuration)
|
34
|
+
});
|
35
|
+
}
|
36
|
+
else {
|
37
|
+
return panic("Not yet implemented");
|
38
|
+
}
|
39
|
+
};
|
40
|
+
})(RegionEditing || (RegionEditing = {}));
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { TimelineBox } from "@opendaw/studio-boxes";
|
2
|
+
import { UUID } from "@opendaw/lib-std";
|
3
|
+
import { Address } from "@opendaw/lib-box";
|
4
|
+
import { BoxAdapter } from "../BoxAdapter";
|
5
|
+
import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
|
6
|
+
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
7
|
+
export declare class TimelineBoxAdapter implements BoxAdapter {
|
8
|
+
#private;
|
9
|
+
constructor(context: BoxAdaptersContext, box: TimelineBox);
|
10
|
+
terminate(): void;
|
11
|
+
get box(): TimelineBox;
|
12
|
+
get uuid(): UUID.Format;
|
13
|
+
get address(): Address;
|
14
|
+
get markerTrack(): MarkerTrackAdapter;
|
15
|
+
}
|
16
|
+
//# sourceMappingURL=TimelineBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TimelineBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TimelineBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AAExD,qBAAa,kBAAmB,YAAW,UAAU;;gBAIrC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IAKzD,SAAS,IAAI,IAAI;IAEjB,IAAI,GAAG,IAAI,WAAW,CAAmB;IACzC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,WAAW,IAAI,kBAAkB,CAA2B;CACnE"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
|
2
|
+
export class TimelineBoxAdapter {
|
3
|
+
#box;
|
4
|
+
#markerTrack;
|
5
|
+
constructor(context, box) {
|
6
|
+
this.#box = box;
|
7
|
+
this.#markerTrack = new MarkerTrackAdapter(context, this.#box.markerTrack);
|
8
|
+
}
|
9
|
+
terminate() { }
|
10
|
+
get box() { return this.#box; }
|
11
|
+
get uuid() { return this.#box.address.uuid; }
|
12
|
+
get address() { return this.#box.address; }
|
13
|
+
get markerTrack() { return this.#markerTrack; }
|
14
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { int, Observer, Option, Subscription, unitValue, UUID } from "@opendaw/lib-std";
|
2
|
+
import { Address, BooleanField, Int32Field, PointerField } from "@opendaw/lib-box";
|
3
|
+
import { ppqn } from "@opendaw/lib-dsp";
|
4
|
+
import { BoxAdapter } from "../BoxAdapter";
|
5
|
+
import { BoxAdaptersContext } from "../BoxAdaptersContext";
|
6
|
+
import { TrackClips } from "./TrackClips";
|
7
|
+
import { TrackRegions } from "./TrackRegions";
|
8
|
+
import { TrackType } from "./TrackType";
|
9
|
+
import { AnyClipBoxAdapter, AnyRegionBoxAdapter } from "../UnionAdapterTypes";
|
10
|
+
import { AudioUnitBox, TrackBox } from "@opendaw/studio-boxes";
|
11
|
+
import { Pointers } from "@opendaw/studio-enums";
|
12
|
+
export declare class TrackBoxAdapter implements BoxAdapter {
|
13
|
+
#private;
|
14
|
+
constructor(context: BoxAdaptersContext, box: TrackBox);
|
15
|
+
catchupAndSubscribePath(observer: Observer<Option<[string, string]>>): Subscription;
|
16
|
+
terminate(): void;
|
17
|
+
get audioUnit(): AudioUnitBox;
|
18
|
+
get target(): PointerField<Pointers.Automation>;
|
19
|
+
get clips(): TrackClips;
|
20
|
+
get regions(): TrackRegions;
|
21
|
+
get enabled(): BooleanField;
|
22
|
+
get indexField(): Int32Field;
|
23
|
+
get type(): TrackType;
|
24
|
+
get box(): TrackBox;
|
25
|
+
get uuid(): UUID.Format;
|
26
|
+
get address(): Address;
|
27
|
+
get listIndex(): int;
|
28
|
+
set listIndex(value: int);
|
29
|
+
accepts(subject: AnyClipBoxAdapter | AnyRegionBoxAdapter): boolean;
|
30
|
+
valueAt(position: ppqn, fallback: unitValue): unitValue;
|
31
|
+
}
|
32
|
+
//# sourceMappingURL=TrackBoxAdapter.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAI3E,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAyEnF,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAAgF;IAC7G,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IAEjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAiBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;CAgC1D"}
|