iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
IPlugVST3_Controller.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the iPlug 2 library. Copyright (C) the iPlug 2 developers.
5
6 See LICENSE.txt for more info.
7
8 ==============================================================================
9*/
10
11#ifndef _IPLUGAPI_
12#define _IPLUGAPI_
13
19#undef stricmp
20#undef strnicmp
21#include "public.sdk/source/vst/vsteditcontroller.h"
22#include "pluginterfaces/vst/ivstchannelcontextinfo.h"
23
24#include "IPlugAPIBase.h"
25
26#include "IPlugVST3_View.h"
27#include "IPlugVST3_ControllerBase.h"
28#include "IPlugVST3_Common.h"
29
30BEGIN_IPLUG_NAMESPACE
31
34class IPlugVST3Controller : public Steinberg::Vst::EditControllerEx1
35 , public Steinberg::Vst::IMidiMapping
36 , public Steinberg::Vst::ChannelContext::IInfoListener
37 , public IPlugAPIBase
39{
40public:
41 using ViewType = IPlugVST3View<IPlugVST3Controller>;
42
43 struct InstanceInfo
44 {
45 Steinberg::FUID mOtherGUID;
46 };
47
48 IPlugVST3Controller(const InstanceInfo& info, const Config& config);
49 virtual ~IPlugVST3Controller();
50
51 // IEditController
52 Steinberg::tresult PLUGIN_API initialize(Steinberg::FUnknown* context) override;
53 Steinberg::IPlugView* PLUGIN_API createView(Steinberg::FIDString name) override;
54 Steinberg::tresult PLUGIN_API setComponentState(Steinberg::IBStream* pState) override; // receives the processor's state
55 Steinberg::tresult PLUGIN_API setState(Steinberg::IBStream* pState) override;
56 Steinberg::tresult PLUGIN_API getState(Steinberg::IBStream* pState) override;
57
58 Steinberg::Vst::ParamValue PLUGIN_API getParamNormalized (Steinberg::Vst::ParamID tag) override;
59 Steinberg::tresult PLUGIN_API setParamNormalized(Steinberg::Vst::ParamID tag, Steinberg::Vst::ParamValue value) override;
60 // ComponentBase
61 Steinberg::tresult PLUGIN_API notify(Steinberg::Vst::IMessage* message) override;
62
63 // IMidiMapping
64 Steinberg::tresult PLUGIN_API getMidiControllerAssignment(Steinberg::int32 busIndex, Steinberg::int16 channel, Steinberg::Vst::CtrlNumber midiCCNumber, Steinberg::Vst::ParamID& tag) override;
65
66 // IUnitInfo
67 Steinberg::tresult PLUGIN_API getProgramName(Steinberg::Vst::ProgramListID listId, Steinberg::int32 programIndex, Steinberg::Vst::String128 name /*out*/) override
68 {
69 return GetProgramName(this, listId, programIndex, name);
70 }
71
72 Steinberg::int32 PLUGIN_API getProgramListCount() override
73 {
74 return GetProgramListCount(this);
75 }
76
77 Steinberg::tresult PLUGIN_API getProgramListInfo(Steinberg::int32 listIndex, Steinberg::Vst::ProgramListInfo& info) override
78 {
79 return GetProgramListInfo(this, listIndex, info);
80 }
81
82 // IInfoListener
83 Steinberg::tresult PLUGIN_API setChannelContextInfos(Steinberg::Vst::IAttributeList* list) override;
84
86 void GetTrackColor(int& r, int& g, int& b) override { r = (mChannelColor>>16)&0xff; g = (mChannelColor>>8)&0xff; b = mChannelColor&0xff; };
87
89 void GetTrackName(WDL_String& str) override { str = mChannelName; };
90
92 int GetTrackIndex() override { return mChannelIndex; };
93
95 void GetTrackNamespace(WDL_String& str) override { str = mChannelNamespace; };
96
98 int GetTrackNamespaceIndex() override { return mChannelNamespaceIndex; };
99
100 // Interface
101 OBJ_METHODS(IPlugVST3Controller, EditControllerEx1)
102 DEFINE_INTERFACES
103 DEF_INTERFACE(IMidiMapping)
104 DEF_INTERFACE(IInfoListener)
105 END_DEFINE_INTERFACES(EditControllerEx1)
106 REFCOUNT_METHODS(EditControllerEx1)
107
108 // IPlugAPIBase
109 void BeginInformHostOfParamChange(int idx) override { beginEdit(idx); }
110 void InformHostOfParamChange(int idx, double normalizedValue) override { performEdit(idx, normalizedValue); }
111 void EndInformHostOfParamChange(int idx) override { endEdit(idx); }
112 void InformHostOfPresetChange() override { /* TODO: */}
113 bool EditorResize(int viewWidth, int viewHeight) override;
114 void DirtyParametersFromUI() override;
115
116 // IEditorDelegate
117 void SendMidiMsgFromUI(const IMidiMsg& msg) override;
118 void SendSysexMsgFromUI(const ISysEx& msg) override;
119 void SendArbitraryMsgFromUI(int msgTag, int ctrlTag = kNoTag, int dataSize = 0, const void* pData = nullptr) override;
120 void SendParameterValueFromUI(int paramIdx, double normalisedValue) override;
121
122 Steinberg::Vst::IComponentHandler* GetComponentHandler() const { return componentHandler; }
123 ViewType* GetView() const { return mView; }
124
125private:
126 ViewType* mView = nullptr;
127 bool mPlugIsInstrument;
128 bool mDoesMidiIn;
129 Steinberg::FUID mProcessorGUID;
130};
131
132END_IPLUG_NAMESPACE
133
134#endif // _IPLUGAPI_
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Definition: IPlugAPIBase.h:43
Shared VST3 controller code.
VST3 Controller API-base class for a distributed IPlug VST3 plug-in.
void GetTrackColor(int &r, int &g, int &b) override
Get the color of the track that the plug-in is inserted on.
void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e....
void GetTrackName(WDL_String &str) override
Get the name of the track that the plug-in is inserted on.
int GetTrackNamespaceIndex() override
Get the namespace index of the track that the plug-in is inserted on.
int GetTrackIndex() override
Get the index of the track that the plug-in is inserted on.
void EndInformHostOfParamChange(int idx) override
Implemented by the API class, called by the UI (or by a delegate) at the end of a parameter change ge...
void GetTrackNamespace(WDL_String &str) override
Get the namespace of the track that the plug-in is inserted on.
void InformHostOfPresetChange() override
Implemented by the API class, called by the UI (etc) when the plug-in initiates a program/preset chan...
DEFINE_INTERFACES void BeginInformHostOfParamChange(int idx) override
Implemented by the API class, called by the UI (or by a delegate) at the beginning of a parameter cha...
void InformHostOfParamChange(int idx, double normalizedValue) override
Implemented by the API class, called by the UI via SetParameterValue() with the value of a parameter ...
bool EditorResize(int viewWidth, int viewHeight) override
Implementations call into the APIs resize hooks returns a bool to indicate whether the DAW or plugin ...
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:31
A struct for dealing with SysEx messages.
Definition: IPlugMidi.h:539