LMMS
Loading...
Searching...
No Matches
vsteditcontroller.h
Go to the documentation of this file.
1//------------------------------------------------------------------------
2// Project : VST SDK
3//
4// Category : Helpers
5// Filename : public.sdk/source/vst/vsteditcontroller.h
6// Created by : Steinberg, 04/2005
7// Description : VST Edit Controller Implementation
8//
9//-----------------------------------------------------------------------------
10// LICENSE
11// (c) 2021, Steinberg Media Technologies GmbH, All Rights Reserved
12//-----------------------------------------------------------------------------
13// Redistribution and use in source and binary forms, with or without modification,
14// are permitted provided that the following conditions are met:
15//
16// * Redistributions of source code must retain the above copyright notice,
17// this list of conditions and the following disclaimer.
18// * Redistributions in binary form must reproduce the above copyright notice,
19// this list of conditions and the following disclaimer in the documentation
20// and/or other materials provided with the distribution.
21// * Neither the name of the Steinberg Media Technologies nor the names of its
22// contributors may be used to endorse or promote products derived from this
23// software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
28// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
29// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
32// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
33// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
34// OF THE POSSIBILITY OF SUCH DAMAGE.
35//-----------------------------------------------------------------------------
36
37#pragma once
38
42#include "base/source/fstring.h"
43
46
47#include <vector>
48#include <map>
49
50//------------------------------------------------------------------------
51namespace Steinberg {
52namespace Vst {
53
54class EditorView;
55
56//------------------------------------------------------------------------
62{
63public:
64//------------------------------------------------------------------------
66
67 //---from IEditController-------
69 tresult PLUGIN_API setState (IBStream* state) SMTG_OVERRIDE;
70 tresult PLUGIN_API getState (IBStream* state) SMTG_OVERRIDE;
73 tresult PLUGIN_API getParamStringByValue (ParamID tag, ParamValue valueNormalized, String128 string) SMTG_OVERRIDE;
74 tresult PLUGIN_API getParamValueByString (ParamID tag, TChar* string, ParamValue& valueNormalized) SMTG_OVERRIDE;
75 ParamValue PLUGIN_API normalizedParamToPlain (ParamID tag, ParamValue valueNormalized) SMTG_OVERRIDE;
80 IPlugView* PLUGIN_API createView (FIDString /*name*/) SMTG_OVERRIDE {return nullptr;}
81
82 //---from IEditController2-------
84 tresult PLUGIN_API openHelp (TBool /*onlyCheck*/) SMTG_OVERRIDE {return kResultFalse;}
85 tresult PLUGIN_API openAboutBox (TBool /*onlyCheck*/) SMTG_OVERRIDE {return kResultFalse;}
86
87 //---from ComponentBase---------
88 tresult PLUGIN_API initialize (FUnknown* context) SMTG_OVERRIDE;
89 tresult PLUGIN_API terminate () SMTG_OVERRIDE;
90
91 //---Internal Methods-------
92 virtual tresult beginEdit (ParamID tag);
93 virtual tresult performEdit (ParamID tag, ParamValue valueNormalized);
94 virtual tresult endEdit (ParamID tag);
95 virtual tresult startGroupEdit ();
96 virtual tresult finishGroupEdit ();
97
98 virtual void editorDestroyed (EditorView* /*editor*/) {}
99 virtual void editorAttached (EditorView* /*editor*/) {}
100 virtual void editorRemoved (EditorView* /*editor*/) {}
101
102 static KnobMode getHostKnobMode () { return hostKnobMode; }
103
105 virtual Parameter* getParameterObject (ParamID tag) { return parameters.getParameter (tag); }
106
109
111 virtual tresult setDirty (TBool state);
112
115
116 //---Accessor Methods-------
118
119 //---Interface---------
126//------------------------------------------------------------------------
127protected:
130
132
134};
135
136//------------------------------------------------------------------------
141{
142public:
143//------------------------------------------------------------------------
145 ~EditorView () override;
146
149
150 //---from CPluginView-------------
153
154//------------------------------------------------------------------------
155protected:
157};
158
159//------------------------------------------------------------------------
163class Unit : public FObject
164{
165public:
166//------------------------------------------------------------------------
167 Unit (const String128 name, UnitID unitId, UnitID parentUnitId = kRootUnitId,
168 ProgramListID programListId = kNoProgramListId);
169 Unit (const UnitInfo& unit);
170
172 const UnitInfo& getInfo () const { return info; }
173
175 UnitID getID () const { return info.id; }
176
178 void setID (UnitID newID) { info.id = newID; }
179
181 const TChar* getName () const { return info.name; }
182
184 void setName (const String128 newName);
185
187 ProgramListID getProgramListID () const { return info.programListId; }
188
190 void setProgramListID (ProgramListID newID) { info.programListId = newID; }
191
193//------------------------------------------------------------------------
194protected:
195 Unit ();
197};
198
199//------------------------------------------------------------------------
203class ProgramList : public FObject
204{
205public:
206//------------------------------------------------------------------------
208 ProgramList (const ProgramList& programList);
209
210 const ProgramListInfo& getInfo () const { return info; }
211 ProgramListID getID () const { return info.id; }
212 const TChar* getName () const { return info.name; }
213 int32 getCount () const { return info.programCount; }
214
215 virtual tresult getProgramName (int32 programIndex, String128 name /*out*/);
216 virtual tresult setProgramName (int32 programIndex, const String128 name /*in*/);
217 virtual tresult getProgramInfo (int32 programIndex, CString attributeId,
218 String128 value /*out*/);
219 virtual tresult hasPitchNames (int32 programIndex)
220 {
221 (void)programIndex;
222 return kResultFalse;
223 }
224 virtual tresult getPitchName (int32 programIndex, int16 midiPitch, String128 name /*out*/)
225 {
226 (void)programIndex;
227 (void)midiPitch;
228 (void)name;
229 return kResultFalse;
230 }
231
233 virtual int32 addProgram (const String128 name);
234
236 virtual bool setProgramInfo (int32 programIndex, CString attributeId, const String128 value);
237
239 virtual Parameter* getParameter ();
240
242//------------------------------------------------------------------------
243protected:
244 using StringMap = std::map<String, String>;
245 using StringVector = std::vector<String>;
246 using ProgramInfoVector = std::vector<StringMap>;
252};
253
254//------------------------------------------------------------------------
259{
260public:
262
264 bool setPitchName (int32 programIndex, int16 pitch, const String128 pitchName);
265
268 bool removePitchName (int32 programIndex, int16 pitch);
269
270 //---from ProgramList---------
273 tresult getPitchName (int32 programIndex, int16 midiPitch,
275
277protected:
278 using PitchNameMap = std::map<int16, String>;
279 using PitchNamesVector = std::vector<PitchNameMap>;
281};
282
283//------------------------------------------------------------------------
289{
290public:
292 ~EditControllerEx1 () override;
293
294 //---from ComponentBase---------
295 tresult PLUGIN_API terminate () SMTG_OVERRIDE;
296
298 bool addUnit (Unit* unit);
299
301 bool addProgramList (ProgramList* list);
302
305
308
309 //---from IUnitInfo------------------
310 int32 PLUGIN_API getUnitCount () SMTG_OVERRIDE { return static_cast<int32> (units.size ()); }
311 tresult PLUGIN_API getUnitInfo (int32 unitIndex, UnitInfo& info /*out*/) SMTG_OVERRIDE;
312
313 int32 PLUGIN_API getProgramListCount () SMTG_OVERRIDE;
314 tresult PLUGIN_API getProgramListInfo (int32 listIndex,
316 tresult PLUGIN_API getProgramName (ProgramListID listId, int32 programIndex,
318 tresult PLUGIN_API getProgramInfo (ProgramListID listId, int32 programIndex,
319 CString attributeId /*in*/,
320 String128 attributeValue /*out*/) SMTG_OVERRIDE;
321
322 tresult PLUGIN_API hasProgramPitchNames (ProgramListID listId,
323 int32 programIndex) SMTG_OVERRIDE;
324 tresult PLUGIN_API getProgramPitchName (ProgramListID listId, int32 programIndex,
325 int16 midiPitch, String128 name /*out*/) SMTG_OVERRIDE;
326
327 virtual tresult setProgramName (ProgramListID listId, int32 programIndex,
328 const String128 name /*in*/);
329
330 // units selection --------------------
333 {
334 selectedUnit = unitId;
335 return kResultTrue;
336 }
337
338 tresult PLUGIN_API getUnitByBus (MediaType /*type*/, BusDirection /*dir*/, int32 /*busIndex*/,
339 int32 /*channel*/, UnitID& /*unitId*/ /*out*/) SMTG_OVERRIDE
340 {
341 return kResultFalse;
342 }
343 tresult PLUGIN_API setUnitProgramData (int32 /*listOrUnitId*/, int32 /*programIndex*/,
344 IBStream* /*data*/) SMTG_OVERRIDE
345 {
346 return kResultFalse;
347 }
348
350 virtual tresult notifyUnitSelection ();
351
352 //---from IDependent------------------
353 void PLUGIN_API update (FUnknown* changedUnknown, int32 message) SMTG_OVERRIDE;
354
355 //---Interface---------
361
362protected:
363 using ProgramListVector = std::vector<IPtr<ProgramList>>;
364 using ProgramIndexMap = std::map<ProgramListID, ProgramListVector::size_type>;
365 using UnitVector = std::vector<IPtr<Unit>>;
370};
371
372//------------------------------------------------------------------------
373} // namespace Vst
374} // namespace Steinberg
static void message(int level, const char *fmt,...)
Definition adplugdb.cpp:120
CPluginView(const ViewRect *rect=nullptr)
Definition pluginview.cpp:44
Definition fobject.h:82
FObject()
default constructor...
Definition fobject.h:85
Definition funknown.h:361
Definition ibstream.h:30
Definition iplugview.h:123
Definition vstcomponentbase.h:55
ComponentBase()
Definition vstcomponentbase.cpp:46
Definition vsteditcontroller.h:289
int32 PLUGIN_API getUnitCount() SMTG_OVERRIDE
Definition vsteditcontroller.h:310
std::vector< IPtr< ProgramList > > ProgramListVector
Definition vsteditcontroller.h:363
UnitVector units
Definition vsteditcontroller.h:366
ProgramList * getProgramList(ProgramListID listId) const
Definition vsteditcontroller.cpp:407
ProgramListVector programLists
Definition vsteditcontroller.h:367
tresult PLUGIN_API setUnitProgramData(int32, int32, IBStream *) SMTG_OVERRIDE
Definition vsteditcontroller.h:343
EditControllerEx1()
Definition vsteditcontroller.cpp:343
UnitID selectedUnit
Definition vsteditcontroller.h:369
tresult PLUGIN_API getUnitByBus(MediaType, BusDirection, int32, int32, UnitID &) SMTG_OVERRIDE
Definition vsteditcontroller.h:338
UnitID PLUGIN_API getSelectedUnit() SMTG_OVERRIDE
Definition vsteditcontroller.h:331
tresult notifyProgramListChange(ProgramListID listId, int32 programIndex=kAllProgramInvalid)
Definition vsteditcontroller.cpp:414
tresult PLUGIN_API selectUnit(UnitID unitId) SMTG_OVERRIDE
Definition vsteditcontroller.h:332
std::vector< IPtr< Unit > > UnitVector
Definition vsteditcontroller.h:365
std::map< ProgramListID, ProgramListVector::size_type > ProgramIndexMap
Definition vsteditcontroller.h:364
tresult PLUGIN_API terminate() SMTG_OVERRIDE
Definition vsteditcontroller.cpp:354
bool addProgramList(ProgramList *list)
Definition vsteditcontroller.cpp:398
ProgramIndexMap programIndexMap
Definition vsteditcontroller.h:368
bool addUnit(Unit *unit)
Definition vsteditcontroller.cpp:370
Definition vsteditcontroller.h:62
tresult PLUGIN_API openAboutBox(TBool) SMTG_OVERRIDE
Definition vsteditcontroller.h:85
virtual Parameter * getParameterObject(ParamID tag)
Definition vsteditcontroller.h:105
virtual tresult getParameterInfoByTag(ParamID tag, ParameterInfo &info)
Definition vsteditcontroller.cpp:268
int32 PLUGIN_API getParameterCount() SMTG_OVERRIDE
Definition vsteditcontroller.cpp:100
tresult PLUGIN_API setComponentHandler(IComponentHandler *handler) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:185
IComponentHandler * componentHandler
Definition vsteditcontroller.h:128
virtual tresult performEdit(ParamID tag, ParamValue valueNormalized)
will inform the host about the value change
Definition vsteditcontroller.cpp:228
virtual void editorRemoved(EditorView *)
called from EditorView if it was removed from a parent
Definition vsteditcontroller.h:100
tresult PLUGIN_API setKnobMode(KnobMode mode) SMTG_OVERRIDE
Definition vsteditcontroller.h:83
virtual tresult finishGroupEdit()
calls IComponentHandler2::finishGroupEdit() if host supports it
Definition vsteditcontroller.cpp:258
ParameterContainer parameters
Definition vsteditcontroller.h:131
tresult PLUGIN_API initialize(FUnknown *context) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:56
virtual tresult startGroupEdit()
calls IComponentHandler2::startGroupEdit() if host supports it
Definition vsteditcontroller.cpp:248
ParamValue PLUGIN_API plainParamToNormalized(ParamID tag, ParamValue plainValue) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:154
tresult PLUGIN_API setParamNormalized(ParamID tag, ParamValue value) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:174
ParamValue PLUGIN_API normalizedParamToPlain(ParamID tag, ParamValue valueNormalized) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:143
virtual tresult requestOpenEditor(FIDString name=ViewType::kEditor)
Definition vsteditcontroller.cpp:289
tresult PLUGIN_API getState(IBStream *state) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:94
virtual void editorDestroyed(EditorView *)
called from EditorView if it was destroyed
Definition vsteditcontroller.h:98
virtual tresult setDirty(TBool state)
Definition vsteditcontroller.cpp:279
tresult PLUGIN_API getParamValueByString(ParamID tag, TChar *string, ParamValue &valueNormalized) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:129
static KnobMode hostKnobMode
Definition vsteditcontroller.h:133
tresult PLUGIN_API openHelp(TBool) SMTG_OVERRIDE
Definition vsteditcontroller.h:84
tresult PLUGIN_API getParameterInfo(int32 paramIndex, ParameterInfo &info) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:106
virtual tresult beginEdit(ParamID tag)
to be called before a serie of performEdit
Definition vsteditcontroller.cpp:218
tresult PLUGIN_API getParamStringByValue(ParamID tag, ParamValue valueNormalized, String128 string) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:117
ParamValue PLUGIN_API getParamNormalized(ParamID tag) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:164
tresult PLUGIN_API terminate() SMTG_OVERRIDE
Definition vsteditcontroller.cpp:62
IComponentHandler * getComponentHandler() const
Definition vsteditcontroller.h:117
virtual tresult endEdit(ParamID tag)
to be called after a serie of performEdit
Definition vsteditcontroller.cpp:238
virtual void editorAttached(EditorView *)
called from EditorView if it was attached to a parent
Definition vsteditcontroller.h:99
IPlugView *PLUGIN_API createView(FIDString) SMTG_OVERRIDE
Definition vsteditcontroller.h:80
static KnobMode getHostKnobMode()
return host knob mode
Definition vsteditcontroller.h:102
tresult PLUGIN_API setComponentState(IBStream *state) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:82
tresult PLUGIN_API setState(IBStream *state) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:88
IComponentHandler2 * componentHandler2
Definition vsteditcontroller.h:129
EditController()
Definition vsteditcontroller.cpp:51
Definition vsteditcontroller.h:141
void attachedToParent() SMTG_OVERRIDE
Definition vsteditcontroller.cpp:322
EditorView(EditController *controller, ViewRect *size=nullptr)
Definition vsteditcontroller.cpp:302
EditController * controller
Definition vsteditcontroller.h:156
void removedFromParent() SMTG_OVERRIDE
Definition vsteditcontroller.cpp:331
EditController * getController() const
Definition vsteditcontroller.h:148
~EditorView() override
Definition vsteditcontroller.cpp:312
Definition ivsteditcontroller.h:249
Definition ivsteditcontroller.h:165
Definition ivsteditcontroller.h:475
Definition ivsteditcontroller.h:392
Definition ivstunits.h:145
Definition vstparameters.h:190
Definition vstparameters.h:55
Definition vsteditcontroller.h:204
std::vector< String > StringVector
Definition vsteditcontroller.h:245
virtual tresult getPitchName(int32 programIndex, int16 midiPitch, String128 name)
Definition vsteditcontroller.h:224
StringVector programNames
Definition vsteditcontroller.h:249
virtual tresult hasPitchNames(int32 programIndex)
Definition vsteditcontroller.h:219
const TChar * getName() const
Definition vsteditcontroller.h:212
ProgramListInfo info
Definition vsteditcontroller.h:247
ProgramList(const String128 name, ProgramListID listId, UnitID unitId)
Definition vsteditcontroller.cpp:543
int32 getCount() const
Definition vsteditcontroller.h:213
std::map< String, String > StringMap
Definition vsteditcontroller.h:244
ProgramInfoVector programInfos
Definition vsteditcontroller.h:250
std::vector< StringMap > ProgramInfoVector
Definition vsteditcontroller.h:246
Parameter * parameter
Definition vsteditcontroller.h:251
const ProgramListInfo & getInfo() const
Definition vsteditcontroller.h:210
ProgramListID getID() const
Definition vsteditcontroller.h:211
UnitID unitId
Definition vsteditcontroller.h:248
int32 addProgram(const String128 name) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:653
bool setPitchName(int32 programIndex, int16 pitch, const String128 pitchName)
Definition vsteditcontroller.cpp:662
bool removePitchName(int32 programIndex, int16 pitch)
Definition vsteditcontroller.cpp:685
tresult hasPitchNames(int32 programIndex) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:698
std::vector< PitchNameMap > PitchNamesVector
Definition vsteditcontroller.h:279
std::map< int16, String > PitchNameMap
Definition vsteditcontroller.h:278
PitchNamesVector pitchNames
Definition vsteditcontroller.h:280
ProgramListWithPitchNames(const String128 name, ProgramListID listId, UnitID unitId)
Definition vsteditcontroller.cpp:646
tresult getPitchName(int32 programIndex, int16 midiPitch, String128 name) SMTG_OVERRIDE
Definition vsteditcontroller.cpp:706
Definition vsteditcontroller.h:164
void setID(UnitID newID)
Definition vsteditcontroller.h:178
void setProgramListID(ProgramListID newID)
Definition vsteditcontroller.h:190
UnitInfo info
Definition vsteditcontroller.h:196
UnitID getID() const
Definition vsteditcontroller.h:175
Unit(const String128 name, UnitID unitId, UnitID parentUnitId=kRootUnitId, ProgramListID programListId=kNoProgramListId)
Definition vsteditcontroller.cpp:521
const TChar * getName() const
Definition vsteditcontroller.h:181
const UnitInfo & getInfo() const
Definition vsteditcontroller.h:172
ProgramListID getProgramListID() const
Definition vsteditcontroller.h:187
#define DEFINE_INTERFACES
Definition fobject.h:378
#define DEF_INTERFACE(InterfaceName)
Definition fobject.h:385
#define OBJ_METHODS(className, baseClass)
Definition fobject.h:339
#define END_DEFINE_INTERFACES(BaseClass)
Definition fobject.h:391
#define REFCOUNT_METHODS(BaseClass)
Definition fobject.h:351
#define SMTG_OVERRIDE
Definition fplatform.h:241
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
struct backing_store_struct * info
Definition jmemsys.h:183
const CString kEditor
Definition ivsteditcontroller.h:81
Definition ivstattributes.h:28
int32 KnobMode
Definition ivsteditcontroller.h:458
uint32 ParamID
parameter identifier
Definition vsttypes.h:75
TChar String128[128]
128 character UTF-16 string
Definition vsttypes.h:63
static const int32 kAllProgramInvalid
all program information is invalid
Definition ivstunits.h:65
char16 TChar
UTF-16 character.
Definition vsttypes.h:62
double ParamValue
parameter value type
Definition vsttypes.h:74
static const ProgramListID kNoProgramListId
no programs are used in the unit.
Definition ivstunits.h:38
int32 ProgramListID
program list identifier
Definition vsttypes.h:76
int32 BusDirection
bus direction (in/out)
Definition vsttypes.h:70
static const UnitID kRootUnitId
identifier for the top level unit (root)
Definition ivstunits.h:33
int32 UnitID
unit identifier
Definition vsttypes.h:73
const char8 * CString
C-String.
Definition vsttypes.h:64
int32 MediaType
media type (audio/event)
Definition vsttypes.h:69
Definition baseiids.cpp:43
short int16
Definition ftypes.h:43
int int32
Definition ftypes.h:50
const char8 * FIDString
Definition ftypes.h:117
@ kResultFalse
Definition funknown.h:195
@ kResultTrue
Definition funknown.h:194
uint8 TBool
Definition ftypes.h:89
int32 tresult
Definition ftypes.h:76
png_const_structrp png_const_inforp int * unit
Definition png.h:2161
png_structrp int mode
Definition png.h:1139
Definition iplugview.h:35
Definition ivsteditcontroller.h:47
Definition ivstunits.h:57
Definition ivstunits.h:45
ulg size
Definition extract.c:2350
void handler(int signal)
Definition fileio.c:1632
#define void
Definition unzip.h:396
#define const
Definition zconf.h:137