Jamba C++ API 7.5.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
21#include <vstgui/lib/cview.h>
22
24
25#include <utility>
26#include "GUIRawVstParameter.h"
27#include "GUIJmbParameter.h"
28#include "GUIVstParameter.h"
29#include "GUIOptionalParam.h"
30
31namespace pongasoft::VST::GUI {
32
33class GUIState;
34
35namespace Params {
36
37class GUIParamCxMgr;
38
65{
66public:
67 virtual ~ParamAware();
68
69 //------------------------------------------------------------------------
70 // Base Param
71 //------------------------------------------------------------------------
72
80 IGUIParam registerBaseParam(ParamID iParamID, bool iSubscribeToChanges = true);
81
88 IGUIParam registerBaseCallback(ParamID iParamID,
89 Parameters::ChangeCallback iChangeCallback,
90 bool iInvokeCallback);
91
98 IGUIParam registerBaseCallback(ParamID iParamID,
100 bool iInvokeCallback);
101
102 //------------------------------------------------------------------------
103 // Optional Param
104 //------------------------------------------------------------------------
105
114 template<typename T>
116 bool iSubscribeToChanges = true);
117
126 template<typename T>
128 Parameters::ChangeCallback iChangeCallback,
129 bool iInvokeCallback = false);
130
139 template<typename T>
142 bool iInvokeCallback = false);
143
144 //------------------------------------------------------------------------
145 // Optional Discrete Param
146 //------------------------------------------------------------------------
147
158 int32 iStepCount,
159 bool iSubscribeToChanges = true);
160
171 int32 iStepCount,
172 Parameters::ChangeCallback iChangeCallback,
173 bool iInvokeCallback = false);
174
185 int32 iStepCount,
187 bool iInvokeCallback = false);
188
189 //------------------------------------------------------------------------
190 // Raw Vst Param / ParamID
191 //------------------------------------------------------------------------
192
199 GUIRawVstParam registerRawVstParam(ParamID iParamID, bool iSubscribeToChanges = true);
200
207 GUIRawVstParam registerRawVstCallback(ParamID iParamID,
208 Parameters::ChangeCallback iChangeCallback,
209 bool iInvokeCallback = false);
210
217 GUIRawVstParam registerRawVstCallback(ParamID iParamID,
219 bool iInvokeCallback = false);
220
221
222 //------------------------------------------------------------------------
223 // Raw Vst Param / param definition (RawVstParam)
224 //------------------------------------------------------------------------
225
230 inline GUIRawVstParam registerParam(RawVstParam const &iParamDef, bool iSubscribeToChanges = true) {
231 return registerRawVstParam(iParamDef->fParamID, iSubscribeToChanges);
232 }
233
239 Parameters::ChangeCallback iChangeCallback,
240 bool iInvokeCallback = false) {
241 return registerRawVstCallback(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
242 }
243
250 bool iInvokeCallback = false) {
251 return registerRawVstCallback(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
252 }
253
254 //------------------------------------------------------------------------
255 // Shortcut Vst Param bool/Percent
256 //------------------------------------------------------------------------
257
258 // shortcut for BooleanParameter (will be removed => not very useful)
259 [[deprecated("Since 4.0.0 - use registerVstParam<bool> directly")]]
260 GUIVstParam<bool> registerVstBooleanParam(ParamID iParamID, bool iSubscribeToChanges = true);
261
262 // shortcut for PercentParameter (will be removed => not very useful)
263 [[deprecated("Since 4.0.0 - use registerVstParam<Percent> directly")]]
264 GUIVstParam<Percent> registerVstPercentParam(ParamID iParamID, bool iSubscribeToChanges = true);
265
266 //------------------------------------------------------------------------
267 // Vst Param (Typed) / ParamID
268 //------------------------------------------------------------------------
269
276 template<typename T>
277 GUIVstParam<T> registerVstParam(ParamID iParamID, bool iSubscribeToChanges = true);
278
285 template<typename T>
286 GUIVstParam<T> registerVstCallback(ParamID iParamID,
287 Parameters::ChangeCallback iChangeCallback,
288 bool iInvokeCallback = false);
289
296 template<typename T>
297 GUIVstParam<T> registerVstCallback(ParamID iParamID,
299 bool iInvokeCallback = false);
300
301 //------------------------------------------------------------------------
302 // Vst Param (Typed) / param definition (VstParam<T>)
303 //------------------------------------------------------------------------
304
311 template<typename T>
312 inline GUIVstParam<T> registerParam(VstParam<T> const &iParamDef, bool iSubscribeToChanges = true) {
313 return registerVstParam<T>(iParamDef->fParamID, iSubscribeToChanges);
314 }
315
322 template<typename T>
324 Parameters::ChangeCallback iChangeCallback,
325 bool iInvokeCallback = false) {
326 return registerVstCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
327 }
328
342 template<typename T>
345 bool iInvokeCallback = false) {
346 return registerVstCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
347 }
348
349 //------------------------------------------------------------------------
350 // Jmb Param (Typed) / ParamID
351 //------------------------------------------------------------------------
352
359 template<typename T>
360 GUIJmbParam<T> registerJmbParam(ParamID iParamID, bool iSubscribeToChanges = true);
361
368 template<typename T>
369 GUIJmbParam<T> registerJmbCallback(ParamID iParamID,
370 Parameters::ChangeCallback iChangeCallback,
371 bool iInvokeCallback = false);
372
379 template<typename T>
380 GUIJmbParam<T> registerJmbCallback(ParamID iParamID,
382 bool iInvokeCallback = false);
383
384 //------------------------------------------------------------------------
385 // Jmb Param (Typed) / Param definition (JmbParam<T>)
386 //------------------------------------------------------------------------
387
394 template<typename T>
395 inline GUIJmbParam<T> registerParam(JmbParam<T> const &iParamDef, bool iSubscribeToChanges = true) {
396 return registerJmbParam<T>(iParamDef->fParamID, iSubscribeToChanges);
397 }
398
405 template<typename T>
407 Parameters::ChangeCallback iChangeCallback,
408 bool iInvokeCallback = false) {
409 return registerJmbCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
410
411 }
412
425 template<typename T>
428 bool iInvokeCallback = false) {
429 return registerJmbCallback<T>(iParamDef->fParamID, std::move(iChangeCallback), iInvokeCallback);
430 }
431
432 //------------------------------------------------------------------------
433 // Jmb Param (Typed) / Param (GUIJmbParam<T>)
434 //------------------------------------------------------------------------
435
442 template<typename T>
443 inline GUIJmbParam<T> registerParam(GUIJmbParam<T> &iParam, bool iSubscribeToChanges = true) {
444 return registerJmbParam<T>(iParam.getParamID(), iSubscribeToChanges);
445 }
446
453 template<typename T>
455 Parameters::ChangeCallback iChangeCallback,
456 bool iInvokeCallback = false) {
457 return registerJmbCallback<T>(iParam.getParamID(), std::move(iChangeCallback), iInvokeCallback);
458 }
459
472 template<typename T>
475 bool iInvokeCallback = false) {
476 return registerJmbCallback<T>(iParam.getParamID(), std::move(iChangeCallback), iInvokeCallback);
477 }
478
486 virtual void initState(GUIState *iGUIState);
487
498 virtual void registerParameters()
499 {
500 // subclasses implements this method
501 }
502
505 void unregisterAll();
506
512 [[deprecated("Since 4.0.0 - If you need this kind of granularity, maintain your own connections")]]
513 bool unregisterParam(ParamID iParamID) { return false; }
514
520 [[deprecated("Since 4.0.0 - If you need this kind of granularity, maintain your own connections")]]
521 GUIRawVstParam unregisterParam(GUIRawVstParam const &iParam) { return iParam; }
522
528 template<typename T>
529 [[deprecated("Since 4.0.0 - If you need this kind of granularity, maintain your own connections")]]
530 GUIVstParam<T> unregisterParam(GUIVstParam<T> const &iParam) { return iParam; }
531
537 template<typename T>
538 [[deprecated("Since 4.0.0 - If you need this kind of granularity, maintain your own connections")]]
539 GUIJmbParam<T> unregisterParam(GUIJmbParam<T> const &iParam) { return iParam; }
540
544 void onParameterChange(ParamID iParamID) override {}
545
548 void invokeAll();
549
550protected:
551 // Access to parameters
552 std::unique_ptr<GUIParamCxMgr> fParamCxMgr{};
553};
554
561template<typename TView>
563{
564 // ensures that TView is a subclass of CView
565 static_assert(std::is_convertible<TView *, VSTGUI::CView*>::value, "TView must be a subclass of CView");
566
567public:
568 // required because we implement other registerCallback methods
570
571 // defining the change listener callback
572 using ChangeListener = std::function<void(TView *, ParamID)>;
573
574 // Constructor
575 explicit ParamAwareView(TView *iView) : fView(iView), fListener{} {}
576
585 {
586 fListener = std::move(iListener);
587 }
588
603 template<typename T>
605 Parameters::ChangeCallback2<TView, GUIVstParam<T>> iChangeCallback,
606 bool iInvokeCallback = false)
607 {
608 auto callback = [view = this->fView, cb2 = std::move(iChangeCallback)] (GUIVstParam<T> &iParam) {
609 cb2(view, iParam);
610 };
611
612 return ParamAware::registerCallback<T>(iParamDef, std::move(callback), iInvokeCallback);
613 }
614
629 template<typename T>
631 Parameters::ChangeCallback2<TView, GUIJmbParam<T>> iChangeCallback,
632 bool iInvokeCallback = false)
633 {
634 auto callback = [view = this->fView, cb2 = std::move(iChangeCallback)] (GUIJmbParam<T> &iParam) {
635 cb2(view, iParam);
636 };
637
638 return ParamAware::registerCallback<T>(iParam, std::move(callback), iInvokeCallback);
639 }
640
644 void onParameterChange(ParamID iParamID) override
645 {
646 if(fListener)
647 fListener(fView, iParamID);
648 }
649
650protected:
651 TView *fView;
653};
654
655}
656}
Definition GUIState.h:43
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:50
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:403
This class is inherited by classes who want to be aware of parameters and be notified when they chang...
Definition ParamAware.h:65
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:498
GUIRawVstParam unregisterParam(GUIRawVstParam const &iParam)
Removes the registration of the provided param (closing the connection/stopping to listen).
Definition ParamAware.h:521
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:426
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:163
GUIRawVstParam registerCallback(RawVstParam const &iParamDef, Parameters::ChangeCallback iChangeCallback, bool iInvokeCallback=false)
Registers a raw parameter (no conversion).
Definition ParamAware.h:238
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:544
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
GUIVstParam< Percent > registerVstPercentParam(ParamID iParamID, bool iSubscribeToChanges=true)
Definition ParamAware.cpp:90
GUIVstParam< T > unregisterParam(GUIVstParam< T > const &iParam)
Removes the registration of the provided param (closing the connection/stopping to listen).
Definition ParamAware.h:530
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:116
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:395
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:454
GUIRawVstParam registerParam(RawVstParam const &iParamDef, bool iSubscribeToChanges=true)
Registers a raw parameter (no conversion).
Definition ParamAware.h:230
GUIJmbParam< T > unregisterParam(GUIJmbParam< T > const &iParam)
Removes the registration of the provided param (closing the connection/stopping to listen).
Definition ParamAware.h:539
void invokeAll()
Invoke all (currently) registered callbacks and onParameterChange() (if registered).
Definition ParamAware.cpp:107
virtual ~ParamAware()
Definition ParamAware.cpp:29
std::unique_ptr< GUIParamCxMgr > fParamCxMgr
Definition ParamAware.h:552
void unregisterAll()
Unregisters all parameters.
Definition ParamAware.cpp:98
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:312
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
bool unregisterParam(ParamID iParamID)
Removes the registration of the provided param (closing the connection/stopping to listen).
Definition ParamAware.h:513
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:174
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:131
GUIVstParam< bool > registerVstBooleanParam(ParamID iParamID, bool iSubscribeToChanges=true)
Definition ParamAware.cpp:82
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:406
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:343
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:473
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:323
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:443
GUIRawVstParam registerCallback(RawVstParam const &iParamDef, Parameters::ChangeCallback1< GUIRawVstParam > iChangeCallback, bool iInvokeCallback=false)
Registers a raw parameter (no conversion).
Definition ParamAware.h:248
void onParameterChange(ParamID iParamID) override
This implementation simply delegates to the listener registered by registerListener().
Definition ParamAware.h:644
std::function< void(TView *, ParamID)> ChangeListener
Definition ParamAware.h:572
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:630
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:604
ChangeListener fListener
Definition ParamAware.h:652
void registerListener(ChangeListener iListener)
Registers a listener invoked when a parameter changes.
Definition ParamAware.h:584
TView * fView
Definition ParamAware.h:651
ParamAwareView(TView *iView)
Definition ParamAware.h:575
Interface to implement to receive parameter changes.
Definition Parameters.h:45
std::function< void()> ChangeCallback
A callback that will be invoked for changes.
Definition Parameters.h:56
std::function< void(Param &)> ChangeCallback1
A callback which will be invoked for changes with the param as an argument.
Definition Parameters.h:62
std::function< void(TView *, Param &)> ChangeCallback2
A callback which will be invoked for changes with the view and param as arguments.
Definition Parameters.h:68
Definition GUIState.h:38
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