mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-05-07 03:50:11 +02:00
Fully implement IComponentHandler2
This commit is contained in:
@@ -172,6 +172,10 @@ using CallbackRequest = std::variant<WantsConfiguration,
|
||||
YaComponentHandler::PerformEdit,
|
||||
YaComponentHandler::EndEdit,
|
||||
YaComponentHandler::RestartComponent,
|
||||
YaComponentHandler2::SetDirty,
|
||||
YaComponentHandler2::RequestOpenEditor,
|
||||
YaComponentHandler2::StartGroupEdit,
|
||||
YaComponentHandler2::FinishGroupEdit,
|
||||
// Used when the host uses proxy objects,
|
||||
// and we have to route
|
||||
// `IConnectionPoint::notify` calls through
|
||||
|
||||
@@ -360,6 +360,7 @@ tresult PLUGIN_API Vst3PluginProxyImpl::setComponentHandler(
|
||||
|
||||
// Automatically converted smart pointers for when the plugin performs a
|
||||
// callback later
|
||||
component_handler_2 = component_handler;
|
||||
unit_handler = component_handler;
|
||||
|
||||
return bridge.send_message(YaEditController::SetComponentHandler{
|
||||
|
||||
@@ -244,6 +244,8 @@ class Vst3PluginProxyImpl : public Vst3PluginProxy {
|
||||
// The following pointers are cast from `component_handler` if
|
||||
// `IEditController::setComponentHandler()` has been called
|
||||
|
||||
Steinberg::FUnknownPtr<Steinberg::Vst::IComponentHandler2>
|
||||
component_handler_2;
|
||||
Steinberg::FUnknownPtr<Steinberg::Vst::IUnitHandler> unit_handler;
|
||||
|
||||
private:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user