diff --git a/src/common/serialization/vst3.h b/src/common/serialization/vst3.h index 8e568463..ac4e909a 100644 --- a/src/common/serialization/vst3.h +++ b/src/common/serialization/vst3.h @@ -172,6 +172,10 @@ using CallbackRequest = std::variant + component_handler_2; Steinberg::FUnknownPtr unit_handler; private: diff --git a/src/plugin/bridges/vst3.cpp b/src/plugin/bridges/vst3.cpp index cb82575c..7d9b60d6 100644 --- a/src/plugin/bridges/vst3.cpp +++ b/src/plugin/bridges/vst3.cpp @@ -72,11 +72,36 @@ Vst3PluginBridge::Vst3PluginBridge() .component_handler->endEdit(request.id); }, [&](const YaComponentHandler::RestartComponent& request) - -> YaComponentHandler::EndEdit::Response { + -> YaComponentHandler::RestartComponent::Response { return plugin_proxies.at(request.owner_instance_id) .get() .component_handler->restartComponent(request.flags); }, + [&](const YaComponentHandler2::SetDirty& request) + -> YaComponentHandler2::SetDirty::Response { + return plugin_proxies.at(request.owner_instance_id) + .get() + .component_handler_2->setDirty(request.state); + }, + [&](const YaComponentHandler2::RequestOpenEditor& request) + -> YaComponentHandler2::RequestOpenEditor::Response { + return plugin_proxies.at(request.owner_instance_id) + .get() + .component_handler_2->requestOpenEditor( + request.name.c_str()); + }, + [&](const YaComponentHandler2::StartGroupEdit& request) + -> YaComponentHandler2::StartGroupEdit::Response { + return plugin_proxies.at(request.owner_instance_id) + .get() + .component_handler_2->startGroupEdit(); + }, + [&](const YaComponentHandler2::FinishGroupEdit& request) + -> YaComponentHandler2::FinishGroupEdit::Response { + return plugin_proxies.at(request.owner_instance_id) + .get() + .component_handler_2->finishGroupEdit(); + }, [&](YaConnectionPoint::Notify& request) -> YaConnectionPoint::Notify::Response { return plugin_proxies.at(request.instance_id) diff --git a/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp b/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp index 65b85494..382cbde7 100644 --- a/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp +++ b/src/wine-host/bridges/vst3-impls/component-handler-proxy.cpp @@ -64,31 +64,31 @@ Vst3ComponentHandlerProxyImpl::restartComponent(int32 flags) { } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::setDirty(TBool state) { - // TODO: Implement - std::cerr << "TODO: Implement IComponentHandler2::setDirty()" << std::endl; - return Steinberg::kNotImplemented; + return bridge.send_message(YaComponentHandler2::SetDirty{ + .owner_instance_id = owner_instance_id(), .state = state}); } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::requestOpenEditor(Steinberg::FIDString name) { - // TODO: Implement - std::cerr << "TODO: Implement IComponentHandler2::requestOpenEditor()" - << std::endl; - return Steinberg::kNotImplemented; + if (name) { + return bridge.send_message(YaComponentHandler2::RequestOpenEditor{ + .owner_instance_id = owner_instance_id(), .name = name}); + } else { + std::cerr << "WARNING: Null pointer passed to " + "IComponentHandler2::requestOpenEditor()" + << std::endl; + return Steinberg::kInvalidArgument; + } } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::startGroupEdit() { - // TODO: Implement - std::cerr << "TODO: Implement IComponentHandler2::startGroupEdit()" - << std::endl; - return Steinberg::kNotImplemented; + return bridge.send_message(YaComponentHandler2::StartGroupEdit{ + .owner_instance_id = owner_instance_id()}); } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::finishGroupEdit() { - // TODO: Implement - std::cerr << "TODO: Implement IComponentHandler2::finishGroupEdit()" - << std::endl; - return Steinberg::kNotImplemented; + return bridge.send_message(YaComponentHandler2::FinishGroupEdit{ + .owner_instance_id = owner_instance_id()}); } tresult PLUGIN_API Vst3ComponentHandlerProxyImpl::notifyUnitSelection(