diff --git a/src/common/serialization/vst3/plugin-proxy.cpp b/src/common/serialization/vst3/plugin-proxy.cpp index 417b55ce..438fa0af 100644 --- a/src/common/serialization/vst3/plugin-proxy.cpp +++ b/src/common/serialization/vst3/plugin-proxy.cpp @@ -28,6 +28,7 @@ Vst3PluginProxy::ConstructArgs::ConstructArgs( edit_controller_args(object), edit_controller_2_args(object), plugin_base_args(object), + program_list_data_args(object), unit_info_args(object) {} Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args) @@ -37,6 +38,7 @@ Vst3PluginProxy::Vst3PluginProxy(const ConstructArgs&& args) YaEditController(std::move(args.edit_controller_args)), YaEditController2(std::move(args.edit_controller_2_args)), YaPluginBase(std::move(args.plugin_base_args)), + YaProgramListData(std::move(args.program_list_data_args)), YaUnitInfo(std::move(args.unit_info_args)), arguments(std::move(args)){FUNKNOWN_CTOR} @@ -89,6 +91,10 @@ tresult PLUGIN_API Vst3PluginProxy::queryInterface(Steinberg::FIDString _iid, QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IEditController2::iid, Steinberg::Vst::IEditController2) } + if (YaProgramListData::supported()) { + QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IProgramListData::iid, + Steinberg::Vst::IProgramListData) + } if (YaUnitInfo::supported()) { QUERY_INTERFACE(_iid, obj, Steinberg::Vst::IUnitInfo::iid, Steinberg::Vst::IUnitInfo) diff --git a/src/common/serialization/vst3/plugin-proxy.h b/src/common/serialization/vst3/plugin-proxy.h index 892f2239..e988445d 100644 --- a/src/common/serialization/vst3/plugin-proxy.h +++ b/src/common/serialization/vst3/plugin-proxy.h @@ -25,6 +25,7 @@ #include "plugin/edit-controller-2.h" #include "plugin/edit-controller.h" #include "plugin/plugin-base.h" +#include "plugin/program-list-data.h" #include "plugin/unit-info.h" #pragma GCC diagnostic push @@ -59,6 +60,7 @@ class Vst3PluginProxy : public YaAudioProcessor, public YaEditController, public YaEditController2, public YaPluginBase, + public YaProgramListData, public YaUnitInfo { public: /** @@ -84,6 +86,7 @@ class Vst3PluginProxy : public YaAudioProcessor, YaEditController::ConstructArgs edit_controller_args; YaEditController2::ConstructArgs edit_controller_2_args; YaPluginBase::ConstructArgs plugin_base_args; + YaProgramListData::ConstructArgs program_list_data_args; YaUnitInfo::ConstructArgs unit_info_args; template @@ -95,6 +98,7 @@ class Vst3PluginProxy : public YaAudioProcessor, s.object(edit_controller_args); s.object(edit_controller_2_args); s.object(plugin_base_args); + s.object(program_list_data_args); s.object(unit_info_args); } }; diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp index 615710cb..a9a32cb6 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.cpp +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.cpp @@ -444,6 +444,31 @@ tresult PLUGIN_API Vst3PluginProxyImpl::terminate() { YaPluginBase::Terminate{.instance_id = instance_id()}); } +tresult PLUGIN_API Vst3PluginProxyImpl::programDataSupported( + Steinberg::Vst::ProgramListID listId) { + // TODO: Implement + bridge.logger.log("TODO: IProgramListData::programDataSupported"); + return Steinberg::kNotImplemented; +} + +tresult PLUGIN_API +Vst3PluginProxyImpl::getProgramData(Steinberg::Vst::ProgramListID listId, + int32 programIndex, + Steinberg::IBStream* data) { + // TODO: Implement + bridge.logger.log("TODO: IProgramListData::getProgramData"); + return Steinberg::kNotImplemented; +} + +tresult PLUGIN_API +Vst3PluginProxyImpl::setProgramData(Steinberg::Vst::ProgramListID listId, + int32 programIndex, + Steinberg::IBStream* data) { + // TODO: Implement + bridge.logger.log("TODO: IProgramListData::setProgramData"); + return Steinberg::kNotImplemented; +} + int32 PLUGIN_API Vst3PluginProxyImpl::getUnitCount() { return bridge.send_message( YaUnitInfo::GetUnitCount{.instance_id = instance_id()}); diff --git a/src/plugin/bridges/vst3-impls/plugin-proxy.h b/src/plugin/bridges/vst3-impls/plugin-proxy.h index 24a7ae84..dcd35d34 100644 --- a/src/plugin/bridges/vst3-impls/plugin-proxy.h +++ b/src/plugin/bridges/vst3-impls/plugin-proxy.h @@ -124,6 +124,16 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy { tresult PLUGIN_API initialize(FUnknown* context) override; tresult PLUGIN_API terminate() override; + // From `IProgramListData` + tresult PLUGIN_API + programDataSupported(Steinberg::Vst::ProgramListID listId) override; + tresult PLUGIN_API getProgramData(Steinberg::Vst::ProgramListID listId, + int32 programIndex, + Steinberg::IBStream* data) override; + tresult PLUGIN_API setProgramData(Steinberg::Vst::ProgramListID listId, + int32 programIndex, + Steinberg::IBStream* data) override; + // From `IUnitInfo` int32 PLUGIN_API getUnitCount() override; tresult PLUGIN_API