Stw/liquidsfz api export - #82
Open
swesterfeld wants to merge 101 commits into
Open
Conversation
* Branch commit log: ui/b/trackview.js: add 'Add MIDI Clip' menu item to track context menu ase/project.cc: emit all_tracks notification on track add/remove ase/track.cc: emit launcher_clips notification on clip added/removal ase/track.cc: only collect MIDI clips when listing launcher_clips ui/startup.js: include exception stack trace in test error logging ui/wrapper.js: expand JSDoc for wrap_ase_object to document reactive caching behavior electron/main.js: refactor trycatch & tryelse to handle sync and async errors electron/main.js: resolve source code locations in exception stack traces
Move the remove_self() method from Device to Gadget so that all gadget types (Device, Clip, Monitor, etc.) can be removed from their parent container.
…mpl::remove_self()
…rectly - Remove Project::remove_track() from the API interface - Update UI caller (trackview.js) to use track.remove_self() directly - Auto-generated IPC bindings updated accordingly
…s/test-setup.cc - Moved load_audio_file_as_clip, loop_around_clip, and test_setup from project.cc to ase/tests/test-setup.cc - Removed test_setup call from ProjectImpl constructor - Added friend declaration for test_audio_sample_load in project.hh - Added test to TestList.g.mk
…ualBase*ase_obj_; pointer
- Add register_ase_obj, unregister_ase_obj and find_ase_obj helpers to use ase_obj_ field - Replace SelectableHandle with ase_obj_ pointer registration - Update ClipImpl, ProjectImpl, and TrackImpl to use new registration helpers - Remove SelectableHandle class and its associated map-based lookup logic
* Branch commit log: ase/: refactor Ase object registration with trkn objects - Add register_ase_obj, unregister_ase_obj and find_ase_obj helpers to use ase_obj_ field - Replace SelectableHandle with ase_obj_ pointer registration - Update ClipImpl, ProjectImpl, and TrackImpl to use new registration helpers - Remove SelectableHandle class and its associated map-based lookup logic trkn/tracktion_engine/selection/tracktion_Selectable.h: add Ase::VirtualBase*ase_obj_; pointer trkn/tracktion_decls.hh: add Ase::VirtualBase forward declaration ase/project.cc: move test_setup test code from project.cc to ase/tests/test-setup.cc - Moved load_audio_file_as_clip, loop_around_clip, and test_setup from project.cc to ase/tests/test-setup.cc - Removed test_setup call from ProjectImpl constructor - Added friend declaration for test_audio_sample_load in project.hh - Added test to TestList.g.mk ase/clip.cc: simplify, use clip->removeFromParent() ase/track.cc: simplify, use edit.deleteTrack() directly ui/tests/project_test.ts: add test for track removal ase/api.hh: remove Track::remove_track(), use Track::remove_self() directly - Remove Project::remove_track() from the API interface - Update UI caller (trackview.js) to use track.remove_self() directly - Auto-generated IPC bindings updated accordingly ase/track.cc: make TrackImpl::remove_self() self-contained like ClipImpl::remove_self() ase/: move remove_self() from Device to Gadget Move the remove_self() method from Device to Gadget so that all gadget types (Device, Clip, Monitor, etc.) can be removed from their parent container.
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
* Branch commit log: ase/Makefile.mk: use libsndfile dependencies from SNDFILEDEPS_PACKAGES misc/config-checks.mk: use pkg-config for SNDFILEDEPS_PACKAGES ase/Makefile.mk: fix libsndfile support for flac, ogg and opus files
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
* Branch commit log: ase/liquidsfz.cc: update liquidsfz to 0.4.1 external/Makefile.mk: update liquidsfz to 0.4.1 external/Makefile.mk: update liquidsfz to 0.4.0
Replace the Lit <b-aboutdialog> custom element with a SolidJS AboutDialog component. The component uses createSignal for reactive info pairs, onMount for async data loading, and Dom.show_modal() for imperative dialog control. Shell template now imports AboutDialog directly instead of using the <b-aboutdialog> element. onMount: Defer dialog show until version data is loaded. Await about_pairs() before calling Dom.show_modal() so the dialog appears at full size immediately instead of starting small and growing when async IPC data arrives.
…fecycle Per SolidJS best practices (solid-modal, solid-dialog, solid-blocks): - onCleanup runs synchronously before DOM removal, ensuring dialogRef.close() fires the native 'close' event for Dom.show_modal() listener cleanup - cancelled flag guards against showModal() after unmount during async load - Dom.show_modal() gets idempotency guard to prevent double closefunc() when onCleanup and native close event both trigger
Replace the Lit <b-statusbar> custom element with a SolidJS StatusBar component. Uses createSignal for kbd/status state, onMount/onCleanup for zmove subscription, and a DOM ref for imperative Dom.markdown_to_html() rendering. Shell template now imports StatusBar directly instead of using the <b-statusbar> element.
* Branch commit log: ui/b/statusbar: port from Lit to SolidJS Replace the Lit <b-statusbar> custom element with a SolidJS StatusBar component. Uses createSignal for kbd/status state, onMount/onCleanup for zmove subscription, and a DOM ref for imperative Dom.markdown_to_html() rendering. Shell template now imports StatusBar directly instead of using the <b-statusbar> element. ui/b/statusbar.jsx: rename .js to .jsx ui/b/aboutdialog: add onCleanup + cancelled-flag for robust dialog lifecycle Per SolidJS best practices (solid-modal, solid-dialog, solid-blocks): - onCleanup runs synchronously before DOM removal, ensuring dialogRef.close() fires the native 'close' event for Dom.show_modal() listener cleanup - cancelled flag guards against showModal() after unmount during async load - Dom.show_modal() gets idempotency guard to prevent double closefunc() when onCleanup and native close event both trigger ui/b/aboutdialog: port from Lit to SolidJS Replace the Lit <b-aboutdialog> custom element with a SolidJS AboutDialog component. The component uses createSignal for reactive info pairs, onMount for async data loading, and Dom.show_modal() for imperative dialog control. Shell template now imports AboutDialog directly instead of using the <b-aboutdialog> element. onMount: Defer dialog show until version data is loaded. Await about_pairs() before calling Dom.show_modal() so the dialog appears at full size immediately instead of starting small and growing when async IPC data arrives. ui/b/aboutdialog.jsx: rename .js to .jsx
* Branch commit log: ui/b/shell: use SolidJS TreeBrowser component ui/b/treebrowser: migrate from Lit to SolidJS ui/b/treebrowser: rename .js -> .jsx (pre-migration rename for clear diff) ui/b/shell: use SolidJS Noticeboard component ui/b/noticeboard: migrate from Lit to SolidJS ui/b/noticeboard: rename .js -> .jsx (pre-migration rename for clear diff)
* Branch commit log: ui/b/preferencesdialog: port from Lit to SolidJS ui/b/preferencesdialog: rename .js to .jsx in preparation for SolidJS port ui/b/menubar: port from Lit to SolidJS ui/b/menubar: rename .js to .jsx in preparation for SolidJS migration
- Replaced LitComponent class with function component returning JSX - track prop drives async device fetching via createEffect - devicetypes/chain stored as createSignal for reactive updates - menu_sibling as createSignal for context menu sibling tracking - activate/isactive/menuopen as local functions (no longer class methods) - b-contextmenu activate/isactive callbacks set via ref (function props don't flow through JSX to web components) - shell.jsx: import DevicePanel, wrap in <Show> for hidden control
- Replaced LitComponent class with function component returning JSX - project prop drives track fetching via createEffect - all_tracks stored in createSignal, fetched on project change - notify:all_tracks listener for reactive track list updates - For directive replaces Lit repeat() for track iteration - Scroll sync (3 columns) via refs + createEffect - dblclick handler for create_track on trackviews column - wrap_ase_object pattern replaced with direct signal + notification listener (SolidJS native reactivity)
* Branch commit log: ui/b/tracklist: port from Lit to SolidJS - Replaced LitComponent class with function component returning JSX - project prop drives track fetching via createEffect - all_tracks stored in createSignal, fetched on project change - notify:all_tracks listener for reactive track list updates - For directive replaces Lit repeat() for track iteration - Scroll sync (3 columns) via refs + createEffect - dblclick handler for create_track on trackviews column - wrap_ase_object pattern replaced with direct signal + notification listener (SolidJS native reactivity) ui/b/tracklist: rename .js to .jsx in preparation for SolidJS port ui/b/devicepanel: port from Lit to SolidJS - Replaced LitComponent class with function component returning JSX - track prop drives async device fetching via createEffect - devicetypes/chain stored as createSignal for reactive updates - menu_sibling as createSignal for context menu sibling tracking - activate/isactive/menuopen as local functions (no longer class methods) - b-contextmenu activate/isactive callbacks set via ref (function props don't flow through JSX to web components) - shell.jsx: import DevicePanel, wrap in <Show> for hidden control ui/b/devicepanel: rename .js to .jsx in preparation for SolidJS port
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
Contributor
There was a problem hiding this comment.
Code Review
This pull request introduces the LiquidSFZPlugin interface and its implementation, LiquidSFZPluginImpl, to support SFZ file loading within the ASE framework. It renames the existing Tracktion-specific class to LiquidSFZTracktionPlugin for clarity and updates the JSON-IPC layer to expose the load functionality. A critical issue was identified in the LiquidSFZPluginImpl::load method where a potential null pointer dereference could occur when accessing the underlying plugin, necessitating a safety check for the result of plugin_.get() and the subsequent cast.
Signed-off-by: Stefan Westerfeld <stefan@space.twc.de>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I tried to do a language binding to be able to load .sfz files from JavaScript.
So please review and let me know if that is ok to merge like I did it.