Loading...
Searching...
No Matches
EditHandler.hpp
1#pragma once
2#include <Vst3/Commands.hpp>
3#include <Vst3/Control.hpp>
4#include <Vst3/EffectModel.hpp>
5
6#include <QDebug>
7
8#include <pluginterfaces/vst/ivstcomponent.h>
9#include <pluginterfaces/vst/ivsteditcontroller.h>
10
11namespace vst3
12{
13class Model;
15 : virtual public Steinberg::Vst::IComponentHandler
16 , virtual public Steinberg::Vst::IComponentHandler2
17{
18 vst3::Model& m_model;
19
20public:
22 : m_model{fx}
23 {
24 }
25
27
28 Steinberg::tresult PLUGIN_API queryInterface(const Steinberg::TUID _iid, void** obj) override
29 {
30 using namespace Steinberg;
31 if(FUID::fromTUID(_iid) == Steinberg::Vst::IComponentHandler2::iid)
32 {
33 *obj = static_cast<Steinberg::Vst::IComponentHandler2*>(this);
34 return kResultOk;
35 }
36 *obj = nullptr;
37 return kResultFalse;
38 }
39 Steinberg::uint32 PLUGIN_API addRef() override { return 1; }
40 Steinberg::uint32 PLUGIN_API release() override { return 1; }
41
42 Steinberg::tresult PLUGIN_API beginEdit(Steinberg::Vst::ParamID id) override
43 {
44 // TODO implement ongoingdispatcher
45 if(auto ctrl = m_model.controls.find(id); ctrl == m_model.controls.end())
46 {
47 ossia::qt::run_async(&m_model, [&proc = m_model, id] {
48 if(auto ctrl = proc.controls.find(id); ctrl == proc.controls.end())
49 {
50 auto& ctx = score::IDocument::documentContext(proc);
51 CommandDispatcher<>{ctx.commandStack}.submit<CreateControl>(proc, id);
52 }
53 });
54 }
55 return Steinberg::kResultOk;
56 }
57
58 Steinberg::tresult PLUGIN_API performEdit(
59 Steinberg::Vst::ParamID id, Steinberg::Vst::ParamValue valueNormalized) override
60 {
61 // The editor set it on the controller only: the host hands it to the
62 // processor
63 m_model.fx.unsentParameters.insert(id);
64 if(auto ctrl = m_model.controls.find(id); ctrl != m_model.controls.end())
65 {
66 ctrl->second->setValue(valueNormalized);
67 }
68 return Steinberg::kResultOk;
69 }
70
71 Steinberg::tresult PLUGIN_API endEdit(Steinberg::Vst::ParamID id) override
72 {
73 return Steinberg::kResultOk;
74 }
75
76 Steinberg::tresult PLUGIN_API restartComponent(Steinberg::int32 flags) override
77 {
78 return m_model.restartComponent(flags);
79 }
80
81 Steinberg::tresult PLUGIN_API setDirty(Steinberg::TBool state) override
82 {
83 return Steinberg::kResultOk;
84 }
85
86 Steinberg::tresult PLUGIN_API requestOpenEditor(Steinberg::FIDString name) override
87 {
88 Process::setupExternalUI(m_model, score::IDocument::documentContext(m_model), true);
89 return Steinberg::kResultOk;
90 }
91
92 Steinberg::tresult PLUGIN_API startGroupEdit() override { return Steinberg::kResultOk; }
93
94 Steinberg::tresult PLUGIN_API finishGroupEdit() override { return Steinberg::kResultOk; }
95};
96}
The CommandDispatcher class.
Definition CommandDispatcher.hpp:13
Definition EditHandler.hpp:17
Definition plugins/score-plugin-vst3/Vst3/commands.hpp:41
Definition score-plugin-vst3/Vst3/EffectModel.hpp:45