Jamba C++ API 8.0.0
Loading...
Searching...
No Matches
ParamAware.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018-2019 pongasoft
3 *
4 * Licensed under the Apache License, Version 2.0 or the MIT license,
5 * at your option. You may not use this file except in compliance with
6 * one of these licenses. You may obtain copies of the licenses at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 * https://opensource.org/licenses/MIT
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 * License for the specific language governing permissions and limitations under
15 * the License.
16 *
17 * @author Yan Pujante
18 */
19#pragma once
20
23
24#include <utility>
25#include "GUIRawVstParameter.h"
26#include "GUIJmbParameter.h"
27#include "GUIVstParameter.h"
28#include "GUIOptionalParam.h"
29
30namespace pongasoft::VST::GUI {
31
32class GUIState;
33
34namespace Params {
35
36class GUIParamCxMgr;
37
64{
65public:
66 ~ParamAware() override;
67
68 //------------------------------------------------------------------------
69 // Base Param
70 //------------------------------------------------------------------------
71
79 IGUIParam registerBaseParam(ParamID iParamID, bool iSubscribeToChanges = true);
80
87 IGUIParam registerBaseCallback(ParamID iParamID,
88 Parameters::ChangeCallback iChangeCallback,
89 bool iInvokeCallback);
90
97 IGUIParam registerBaseCallback(ParamID iParamID,
99 bool iInvokeCallback);
100
101 //------------------------------------------------------------------------
102 // Optional Param
103 //------------------------------------------------------------------------
104
113 template<typename T>
115 bool iSubscribeToChanges = true);
116
125 template<typename T>
127 Parameters::ChangeCallback iChangeCallback,
128 bool iInvokeCallback = false);
129
138 template<typename T>
141 bool iInvokeCallback = false);
142
143 //------------------------------------------------------------------------
144 // Optional Discrete Param
145 //------------------------------------------------------------------------
146
157 int32 iStepCount,
158 bool iSubscribeToChanges = true);
159
170 int32 iStepCount,
171 Parameters::ChangeCallback iChangeCallback,
172 bool iInvokeCallback = false);
173
184 int32 iStepCount,
186 bool iInvokeCallback = false);
187
188 //------------------------------------------------------------------------
189 // Raw Vst Param / ParamID
190 //------------------------------------------------------------------------
191
198 GUIRawVstParam registerRawVstParam(ParamID iParamID, bool iSubscribeToChanges = true);
199
206 GUIRawVstParam registerRawVstCallback(ParamID iParamID,
207 Parameters::ChangeCallback iChangeCallback,
208 bool iInvokeCallback = false);
209
216 GUIRawVstParam registerRawVstCallback(ParamID iParamID,
218 bool iInvokeCallback = false);
219
220
221 //------------------------------------------------------------------------
222 // Raw Vst Param / param definition (RawVstParam)
223 //------------------------------------------------------------------------
224
229 GUIRawVstParam registerParam(RawVstParam const &iParamDef, bool iSubscribeToChanges = true) {
230 return registerRawVstParam(iParamDef->fParamID, iSubscribeToChanges);
231 }
232
238 Parameters::ChangeCallback iChangeCallback,
239 bool iInvokeCallback = false) {
240 return registerRawVstCallback(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
241 }
242
249 bool iInvokeCallback = false) {
250 return registerRawVstCallback(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
251 }
252
253 //------------------------------------------------------------------------
254 // Vst Param (Typed) / ParamID
255 //------------------------------------------------------------------------
256
263 template<typename T>
264 GUIVstParam<T> registerVstParam(ParamID iParamID, bool iSubscribeToChanges = true);
265
272 template<typename T>
273 GUIVstParam<T> registerVstCallback(ParamID iParamID,
274 Parameters::ChangeCallback iChangeCallback,
275 bool iInvokeCallback = false);
276
283 template<typename T>
284 GUIVstParam<T> registerVstCallback(ParamID iParamID,
286 bool iInvokeCallback = false);
287
288 //------------------------------------------------------------------------
289 // Vst Param (Typed) / param definition (VstParam<T>)
290 //------------------------------------------------------------------------
291
298 template<typename T>
299 GUIVstParam<T> registerParam(VstParam<T> const &iParamDef, bool iSubscribeToChanges = true) {
300 return registerVstParam<T>(iParamDef->fParamID, iSubscribeToChanges);
301 }
302
309 template<typename T>
311 Parameters::ChangeCallback iChangeCallback,
312 bool iInvokeCallback = false) {
313 return registerVstCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
314 }
315
329 template<typename T>
332 bool iInvokeCallback = false) {
333 return registerVstCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
334 }
335
336 //------------------------------------------------------------------------
337 // Jmb Param (Typed) / ParamID
338 //------------------------------------------------------------------------
339
346 template<typename T>
347 GUIJmbParam<T> registerJmbParam(ParamID iParamID, bool iSubscribeToChanges = true);
348
355 template<typename T>
356 GUIJmbParam<T> registerJmbCallback(ParamID iParamID,
357 Parameters::ChangeCallback iChangeCallback,
358 bool iInvokeCallback = false);
359
366 template<typename T>
367 GUIJmbParam<T> registerJmbCallback(ParamID iParamID,
369 bool iInvokeCallback = false);
370
371 //------------------------------------------------------------------------
372 // Jmb Param (Typed) / Param definition (JmbParam<T>)
373 //------------------------------------------------------------------------
374
381 template<typename T>
382 GUIJmbParam<T> registerParam(JmbParam<T> const &iParamDef, bool iSubscribeToChanges = true) {
383 return registerJmbParam<T>(iParamDef->fParamID, iSubscribeToChanges);
384 }
385
392 template<typename T>
394 Parameters::ChangeCallback iChangeCallback,
395 bool iInvokeCallback = false) {
396 return registerJmbCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
397
398 }
399
412 template<typename T>
415 bool iInvokeCallback = false) {
416 return registerJmbCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
417 }
418
419 //------------------------------------------------------------------------
420 // Jmb Param (Typed) / Param (GUIJmbParam<T>)
421 //------------------------------------------------------------------------
422
429 template<typename T>
430 GUIJmbParam<T> registerParam(GUIJmbParam<T> &iParam, bool iSubscribeToChanges = true) {
431 return registerJmbParam<T>(iParam.getParamID(), iSubscribeToChanges);
432 }
433
440 template<typename T>
442 Parameters::ChangeCallback iChangeCallback,
443 bool iInvokeCallback = false) {
444 return registerJmbCallback<T>(iParam.getParamID(), std::move(iChangeCallback), iInvokeCallback);
445 }
446
459 template<typename T>
462 bool iInvokeCallback = false) {
463 return registerJmbCallback<T>(iParam.getParamID(), std::move(iChangeCallback), iInvokeCallback);
464 }
465
473 virtual void initState(GUIState *iGUIState);
474
485 virtual void registerParameters()
486 {
487 // subclasses implements this method
488 }
489
492 void unregisterAll();
493
497 void onParameterChange(ParamID iParamID) override {}
498
501 void invokeAll();
502
503protected:
504 // Access to parameters
505 std::unique_ptr<GUIParamCxMgr> fParamCxMgr{};
506};
507
514template<VSTGUI::CViewSubclass TView>
516{
517public:
518 // required because we implement other registerCallback methods
520
521 // defining the change listener callback
522 using ChangeListener = std::function<void(TView *, ParamID)>;
523
524 // Constructor
525 explicit ParamAwareView(TView *iView) : fView(iView), fListener{} {}
526
535 {
536 fListener = std::move(iListener);
537 }
538
553 template<typename T>
555 Parameters::ChangeCallback2<TView, GUIVstParam<T>> iChangeCallback,
556 bool iInvokeCallback = false)
557 {
558 auto callback = [view = this->fView, cb2 = std::move(iChangeCallback)] (GUIVstParam<T> &iParam) {
559 cb2(view, iParam);
560 };
561
562 return ParamAware::registerCallback<T>(iParamDef, std::move(callback), iInvokeCallback);
563 }
564
579 template<typename T>
581 Parameters::ChangeCallback2<TView, GUIJmbParam<T>> iChangeCallback,
582 bool iInvokeCallback = false)
583 {
584 auto callback = [view = this->fView, cb2 = std::move(iChangeCallback)] (GUIJmbParam<T> &iParam) {
585 cb2(view, iParam);
586 };
587
588 return ParamAware::registerCallback<T>(iParam, std::move(callback), iInvokeCallback);
589 }
590
594 void onParameterChange(ParamID iParamID) override
595 {
596 if(fListener)
597 fListener(fView, iParamID);
598 }
599
600protected:
601 TView *fView;
603};
604
605}
606}
Definition GUIState.h:45
This is the main class that the plugin should use as it exposes only the necessary methods of the par...
Definition GUIJmbParameter.h:497
ParamID getParamID() const
Definition GUIJmbParameter.h:515
Represents an optional parameter (Jmb, Vst or no param at all).
Definition GUIOptionalParam.h:48
Maintains the connections established between parameters and its listeners/callbacks.
Definition GUIParamCxMgr.h:33
This is the main class that the plugin should use as it exposes only the necessary methods of the par...
Definition GUIRawVstParameter.h:267
This is the main class that the plugin should use as it exposes only the necessary methods of the par...
Definition GUIVstParameter.h:280
Wrapper instance returned by ParamAware::registerBaseParam() methods.
Definition IGUIParameter.h:406
This class is inherited by classes who want to be aware of parameters and be notified when they chang...
Definition ParamAware.h:64
GUIRawVstParam registerRawVstParam(ParamID iParamID, bool iSubscribeToChanges=true)
Registers a raw parameter (no conversion) onParameterChange() will be called on changes (if iSubscrib...
Definition ParamAware.cpp:45
virtual void initState(GUIState *iGUIState)
Called during initialization.
Definition ParamAware.cpp:37
virtual void registerParameters()
Subclasses should override this method to register each parameter.
Definition ParamAware.h:485
GUIJmbParam< T > registerCallback(JmbParam< T > const &iParamDef, Parameters::ChangeCallback1< GUIJmbParam< T > > iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Jmb param simply by using its description (accessible ...
Definition ParamAware.h:413
IGUIParam registerBaseParam(ParamID iParamID, bool iSubscribeToChanges=true)
Registers the "base" param for the most generic use case but as a result is fairly limited and mainly...
Definition ParamAware.cpp:147
GUIRawVstParam registerCallback(RawVstParam const &iParamDef, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers a raw parameter (no conversion).
Definition ParamAware.h:237
GUIVstParam< T > registerVstParam(ParamID iParamID, bool iSubscribeToChanges=true)
Register a Vst parameter simply given its id onParameterChange() will be called on changes (if iSubsc...
Definition ParamAware.hpp:77
void onParameterChange(ParamID iParamID) override
This is the callback that should be implemented to handle parameter changes.
Definition ParamAware.h:497
GUIOptionalParam< T > registerOptionalParam(ParamID iParamID, bool iSubscribeToChanges=true)
Registers an optional parameter which handles Vst, Jmb or no parameter at all.
Definition ParamAware.hpp:31
GUIRawVstParam registerRawVstCallback(ParamID iParamID, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers a raw parameter (no conversion) The callback will be invoked when the parameter changes.
Definition ParamAware.cpp:56
GUIOptionalParam< int32 > registerOptionalDiscreteParam(ParamID iParamID, int32 iStepCount, bool iSubscribeToChanges=true)
Registers an optional discrete parameter which handles Vst, Jmb or no parameter at all.
Definition ParamAware.cpp:100
GUIJmbParam< T > registerParam(JmbParam< T > const &iParamDef, bool iSubscribeToChanges=true)
Convenient call to register a Jmb param simply by using its description (accessible in state-aware vi...
Definition ParamAware.h:382
GUIJmbParam< T > registerCallback(GUIJmbParam< T > &iParam, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Jmb param simply by using the param from the state (ac...
Definition ParamAware.h:441
GUIRawVstParam registerParam(RawVstParam const &iParamDef, bool iSubscribeToChanges=true)
Registers a raw parameter (no conversion).
Definition ParamAware.h:229
void invokeAll()
Invoke all (currently) registered callbacks and onParameterChange() (if registered).
Definition ParamAware.cpp:91
std::unique_ptr< GUIParamCxMgr > fParamCxMgr
Definition ParamAware.h:505
void unregisterAll()
Unregisters all parameters.
Definition ParamAware.cpp:82
~ParamAware() override
Definition ParamAware.cpp:29
GUIVstParam< T > registerVstCallback(ParamID iParamID, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Register a callback for a Vst parameter simply given its id The callback will be invoked when the par...
Definition ParamAware.hpp:89
GUIJmbParam< T > registerJmbCallback(ParamID iParamID, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers a callback for the Jmb param by its id and return the wrapper to the param.
Definition ParamAware.hpp:129
GUIVstParam< T > registerParam(VstParam< T > const &iParamDef, bool iSubscribeToChanges=true)
Convenient call to register a Vst param simply by using its description (accessible in state-aware vi...
Definition ParamAware.h:299
GUIJmbParam< T > registerJmbParam(ParamID iParamID, bool iSubscribeToChanges=true)
Registers the Jmb param by its id and return the wrapper to the param.
Definition ParamAware.hpp:117
IGUIParam registerBaseCallback(ParamID iParamID, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback)
Registers a callback for the "base" param for the most generic use case.
Definition ParamAware.cpp:158
GUIOptionalParam< int32 > registerOptionalDiscreteCallback(ParamID iParamID, int32 iStepCount, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers an optional discrete parameter which handles Vst, Jmb or no parameter at all.
Definition ParamAware.cpp:115
GUIJmbParam< T > registerCallback(JmbParam< T > const &iParamDef, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Jmb param simply by using its description (accessible ...
Definition ParamAware.h:393
GUIVstParam< T > registerCallback(VstParam< T > const &iParamDef, Parameters::ChangeCallback1< GUIVstParam< T > > iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Vst param simply by using its description (accessible ...
Definition ParamAware.h:330
GUIJmbParam< T > registerCallback(GUIJmbParam< T > &iParam, Parameters::ChangeCallback1< GUIJmbParam< T > > iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Jmb param simply by using the param from the state (ac...
Definition ParamAware.h:460
GUIVstParam< T > registerCallback(VstParam< T > const &iParamDef, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Convenient call to register a callback for the Vst param simply by using its description (accessible ...
Definition ParamAware.h:310
GUIOptionalParam< T > registerOptionalCallback(ParamID iParamID, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers an optional parameter which handles Vst, Jmb or no parameter at all.
Definition ParamAware.hpp:45
GUIJmbParam< T > registerParam(GUIJmbParam< T > &iParam, bool iSubscribeToChanges=true)
Convenient call to register a Jmb param simply by using the param from the state (accessible in state...
Definition ParamAware.h:430
GUIRawVstParam registerCallback(RawVstParam const &iParamDef, Parameters::ChangeCallback1< GUIRawVstParam > iChangeCallback, bool iInvokeCallback=false)
Registers a raw parameter (no conversion).
Definition ParamAware.h:247
void onParameterChange(ParamID iParamID) override
This implementation simply delegates to the listener registered by registerListener().
Definition ParamAware.h:594
std::function< void(TView *, ParamID)> ChangeListener
Definition ParamAware.h:522
GUIJmbParam< T > registerCallback(GUIJmbParam< T > &iParam, Parameters::ChangeCallback2< TView, GUIJmbParam< T > > iChangeCallback, bool iInvokeCallback=false)
Register a callback for the Jmb parameter.
Definition ParamAware.h:580
GUIVstParam< T > registerCallback(VstParam< T > const &iParamDef, Parameters::ChangeCallback2< TView, GUIVstParam< T > > iChangeCallback, bool iInvokeCallback=false)
Register a callback for the Vst parameter.
Definition ParamAware.h:554
ChangeListener fListener
Definition ParamAware.h:602
void registerListener(ChangeListener iListener)
Registers a listener invoked when a parameter changes.
Definition ParamAware.h:534
TView * fView
Definition ParamAware.h:601
ParamAwareView(TView *iView)
Definition ParamAware.h:525
Interface to implement to receive parameter changes.
Definition Parameters.h:47
std::function< void()> ChangeCallback
A callback that will be invoked for changes.
Definition Parameters.h:61
std::function< void(Param &)> ChangeCallback1
A callback which will be invoked for changes with the param as an argument.
Definition Parameters.h:67
std::function< void(TView *, Param &)> ChangeCallback2
A callback which will be invoked for changes with the view and param as arguments.
Definition Parameters.h:73
Definition GUIState.h:40
Definition DrawContext.cpp:25
std::shared_ptr< JmbParamDef< T > > JmbParam
Definition ParamDef.h:522
std::shared_ptr< VstParamDef< T > > VstParam
Definition ParamDef.h:509
std::shared_ptr< RawVstParamDef > RawVstParam
Definition ParamDef.h:510