iPlug2 - C++ Audio Plug-in Framework
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 
30 BEGIN_IPLUG_NAMESPACE
31 
34 class IPlugVST3Controller : public Steinberg::Vst::EditControllerEx1
35  , public Steinberg::Vst::IMidiMapping
36  , public Steinberg::Vst::ChannelContext::IInfoListener
37  , public IPlugAPIBase
39 {
40 public:
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  virtual void GetTrackColor(int& r, int& g, int& b) override { r = (mChannelColor>>16)&0xff; g = (mChannelColor>>8)&0xff; b = mChannelColor&0xff; };
87 
89  virtual void GetTrackName(WDL_String& str) override { str = mChannelName; };
90 
92  virtual int GetTrackIndex() override { return mChannelIndex; };
93 
95  virtual void GetTrackNamespace(WDL_String& str) override { str = mChannelNamespace; };
96 
98  virtual 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 
125 private:
126  ViewType* mView = nullptr;
127  bool mPlugIsInstrument;
128  bool mDoesMidiIn;
129  Steinberg::FUID mProcessorGUID;
130 };
131 
132 END_IPLUG_NAMESPACE
133 
134 #endif // _IPLUGAPI_
void DirtyParametersFromUI() override
In a distributed VST3 or WAM plugin, if you modify the parameters on the UI side (e.g.
virtual int GetTrackNamespaceIndex() override
Get the namespace index of the track that the plug-in is inserted on.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
Definition: IPlugAPIBase.h:42
Encapsulates a MIDI message and provides helper functions.
Definition: IPlugMidi.h:30
Shared VST3 controller code.
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...
virtual int GetTrackIndex() override
Get the index of the track that the plug-in is inserted on.
virtual void GetTrackColor(int &r, int &g, int &b) override
Get the color of the track that the plug-in is inserted on.
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 InformHostOfPresetChange() override
Implemented by the API class, called by the UI (etc) when the plug-in initiates a program/preset chan...
virtual void GetTrackName(WDL_String &str) override
Get the name of the track that the plug-in is inserted on.
The base class of an IPlug plug-in, which interacts with the different plug-in APIs.
void InformHostOfParamChange(int idx, double normalizedValue) override
Implemented by the API class, called by the UI via SetParameterValue() with the value of a parameter ...
VST3 Controller API-base class for a distributed IPlug VST3 plug-in.
virtual void GetTrackNamespace(WDL_String &str) override
Get the namespace of the track that the plug-in is inserted on.
A struct for dealing with SysEx messages.
Definition: IPlugMidi.h:538
bool EditorResize(int viewWidth, int viewHeight) override
Implementations call into the APIs resize hooks returns a bool to indicate whether the DAW or plugin ...