Jamba C++ API 8.0.0
Loading...
Searching...
No Matches
Parameters.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018-2023 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 "ParamDef.h"
22#include "NormalizedState.h"
23#include "GUI/Concepts.h"
24
25#include <map>
26#include <vector>
27#include <set>
28#include <functional>
29#include <concepts>
30
31#include <public.sdk/source/vst/vstparameters.h>
32
33namespace pongasoft::VST {
34
35namespace Debug { class ParamDisplay; }
36
41{
42public:
47 {
48 public:
50 virtual ~IChangeListener() = default;
51
52 virtual void onParameterChange(ParamID iParamID) = 0;
53 };
54
61 using ChangeCallback = std::function<void()>;
62
66 template<typename Param>
67 using ChangeCallback1 = std::function<void(Param &)>;
68
72 template<VSTGUI::CViewSubclass TView, typename Param>
73 using ChangeCallback2 = std::function<void(TView *, Param &)>;
74
75public:
79 {
80 // builder methods
81 RawVstParamDefBuilder &units(VstString16 iUnits) { fUnits = std::move(iUnits); return *this; }
82 RawVstParamDefBuilder &defaultValue(ParamValue iDefaultValue) { fDefaultValue = iDefaultValue; return *this;}
83 RawVstParamDefBuilder &stepCount(int32 iStepCount) { fStepCount = iStepCount; return *this;}
84 RawVstParamDefBuilder &flags(int32 iFlags) { fFlags = iFlags; return *this; }
85 RawVstParamDefBuilder &unitID(int32 iUnitID) { fUnitID = iUnitID; return *this; }
86 RawVstParamDefBuilder &shortTitle(VstString16 iShortTitle) { fShortTitle = std::move(iShortTitle); return *this; }
87 RawVstParamDefBuilder &precision(int32 iPrecision) { fPrecision = iPrecision; return *this; }
90 RawVstParamDefBuilder &transient(bool iTransient = true) { fTransient = iTransient; return *this; }
91 RawVstParamDefBuilder &deprecatedSince(int16 iVersion) { fDeprecatedSince = iVersion; return *this; }
92
93 // parameter factory method
94 [[nodiscard]] RawVstParam add() const;
95
96 // fields
97 ParamID fParamID;
100 ParamValue fDefaultValue{};
101 int32 fStepCount{0};
102 int32 fFlags{ParameterInfo::kCanAutomate};
103 UnitID fUnitID{kRootUnitId};
105 int32 fPrecision{4};
107 bool fTransient{false};
109
110 friend class Parameters;
111
112 protected:
113 RawVstParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle) :
114 fParamID{iParamID}, fTitle{std::move(iTitle)}, fParameters{iParameters} {}
115
116 private:
118 };
119
123 template<typename T>
125 {
126 // builder methods
127 VstParamDefBuilder &units(VstString16 iUnits) { fUnits = std::move(iUnits); return *this; }
128 VstParamDefBuilder &defaultValue(T const &iDefaultValue) { fDefaultValue = iDefaultValue; return *this;}
129 VstParamDefBuilder &flags(int32 iFlags) { fFlags = iFlags; return *this; }
130 VstParamDefBuilder &unitID(int32 iUnitID) { fUnitID = iUnitID; return *this; }
131 VstParamDefBuilder &shortTitle(VstString16 iShortTitle) { fShortTitle = std::move(iShortTitle); return *this; }
132 VstParamDefBuilder &precision(int32 iPrecision) { fPrecision = iPrecision; return *this; }
135 VstParamDefBuilder &transient(bool iTransient = true) { fTransient = iTransient; return *this; }
136 VstParamDefBuilder &deprecatedSince(int16 iVersion) { fDeprecatedSince = iVersion; return *this; }
137 VstParamDefBuilder &converter(std::shared_ptr<IParamConverter<T>> iConverter) { fConverter = std::move(iConverter); return *this; }
138 template<typename ParamConverter, typename... Args>
139 VstParamDefBuilder &converter(Args&& ...iArgs) { fConverter = std::make_shared<ParamConverter>(std::forward<Args>(iArgs)...); return *this; }
140
141 // parameter factory method
142 [[nodiscard]] VstParam<T> add() const;
143
144 // fields
145 ParamID fParamID;
149 int32 fFlags{ParameterInfo::kCanAutomate};
150 UnitID fUnitID{kRootUnitId};
152 int32 fPrecision{4};
154 bool fTransient{false};
156 std::shared_ptr<IParamConverter<T>> fConverter{};
157
158 friend class Parameters;
159
160 protected:
161 VstParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle) :
162 fParamID{iParamID}, fTitle{std::move(iTitle)}, fParameters{iParameters} {}
163
164 private:
166 };
167
171 template<typename T>
173 {
174 // builder methods
175 JmbParamDefBuilder &defaultValue(T const &iDefaultValue) { fDefaultValue = iDefaultValue; return *this;}
176 JmbParamDefBuilder &transient(bool iTransient = true) { fTransient = iTransient; return *this; }
177 JmbParamDefBuilder &deprecatedSince(int16 iVersion) { fDeprecatedSince = iVersion; return *this; }
180 JmbParamDefBuilder &shared(bool iShared = true) { fShared = iShared; return *this; }
181 JmbParamDefBuilder &serializer(std::shared_ptr<IParamSerializer<T>> iSerializer) { fSerializer = std::move(iSerializer); return *this; }
182 template<typename ParamSerializer, typename... Args>
183 JmbParamDefBuilder &serializer(Args&& ...iArgs) { fSerializer = std::make_shared<ParamSerializer>(std::forward<Args>(iArgs)...); return *this; }
184
185 // parameter factory method
186 [[nodiscard]] JmbParam<T> add() const;
187
188 // fields
189 ParamID fParamID;
193 bool fTransient{false};
195 bool fShared{false};
196 std::shared_ptr<IParamSerializer<T>> fSerializer{};
197
198 friend class Parameters;
199
200 protected:
201 JmbParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle) :
202 fParamID{iParamID}, fTitle{std::move(iTitle)}, fParameters{iParameters} {}
203
204 private:
206 };
207
208public:
209 // Constructor
210 explicit Parameters() = default;
211
213 virtual ~Parameters() = default;
214
215
219 RawVstParamDefBuilder raw(ParamID iParamID, VstString16 iTitle);
220
224 template<typename ParamConverter, typename... Args> requires IsIParamConverter<ParamConverter>
225 VstParamDefBuilder<typename ParamConverter::ParamType> vst(ParamID iParamID, VstString16 iTitle, Args&& ...iConverterArgs);
226
230 template<typename ParamConverter> requires IsIParamConverter<ParamConverter>
232 VstString16 iTitle,
233 ParamConverter::ConstructorType initValue);
234
239 template<typename T>
240 VstParamDefBuilder<T> vstFromType(ParamID iParamID, VstString16 iTitle);
241
245 template<typename ParamSerializer, typename... Args> requires IsIParamSerializer<ParamSerializer>
246 JmbParamDefBuilder<typename ParamSerializer::ParamType> jmb(ParamID iParamID, VstString16 iTitle, Args&& ...iSerializerArgs);
247
251 template<typename ParamSerializer> requires IsIParamSerializer<ParamSerializer>
253 VstString16 iTitle,
254 ParamSerializer::ConstructorType initValue);
255
260 template<typename T>
261 JmbParamDefBuilder<T> jmbFromType(ParamID iParamID, VstString16 iTitle);
262
270 template<typename... Args>
271 tresult setRTSaveStateOrder(int16 iVersion, Args&& ...args);
272
277 tresult setRTSaveStateOrder(NormalizedState::SaveOrder const &iSaveOrder);
278
292 template<typename... Args>
293 tresult setRTDeprecatedSaveStateOrder(int16 iVersion, Args&& ...args);
294
299
307 template<typename... Args>
308 tresult setGUISaveStateOrder(int16 iVersion, Args&& ...args);
309
315
329 template<typename... Args>
330 tresult setGUIDeprecatedSaveStateOrder(int16 iVersion, Args&& ...args);
331
336 tresult setGUISaveStateOrder(NormalizedState::SaveOrder const &iSaveOrder);
337
343
348 void registerVstParameters(Vst::ParameterContainer &iParameterContainer) const;
349
352 virtual tresult readRTState(IBStreamer &iStreamer, NormalizedState *oNormalizedState) const;
353
356 virtual tresult writeRTState(NormalizedState const *iNormalizedState, IBStreamer &oStreamer) const;
357
361 virtual std::unique_ptr<NormalizedState> newRTState() const;
362
366 virtual std::unique_ptr<NormalizedState> newRTState(NormalizedState::SaveOrder const *iSaveOrder) const;
367
371 virtual ParamValue readNormalizedValue(ParamID iParamID, IBStreamer &iStreamer) const;
372
373 // getParamDef - nullptr when not found
374 std::shared_ptr<RawVstParamDef> getRawVstParamDef(ParamID iParamID) const;
375
376 // getJmbParamDef - nullptr when not found
377 std::shared_ptr<IJmbParamDef> getJmbParamDef(ParamID iParamID) const;
378
379 // getVstRegistrationOrder
380 std::vector<ParamID> const &getVstRegistrationOrder() const { return fVstRegistrationOrder; }
381
382 // getAllRegistrationOrder
383 std::vector<ParamID> const &getAllRegistrationOrder() const { return fAllRegistrationOrder; }
384
422 virtual tresult handleRTStateUpgrade(NormalizedState const &iDeprecatedState, NormalizedState &oNewState) const
423 {
424 return kResultTrue;
425 }
426
427 // gives access for debug
429
430protected:
431 // internally called by the builder
432 RawVstParam add(RawVstParamDefBuilder const &iBuilder);
433
434 // internally called by the builder
435 template<typename T>
436 VstParam<T> add(VstParamDefBuilder<T> const &iBuilder);
437
438 // internally called by the builder
439 template<typename T>
440 JmbParam<T> add(JmbParamDefBuilder<T> const &iBuilder);
441
442 // addVstParamDef
443 tresult addVstParamDef(std::shared_ptr<RawVstParamDef> iParamDef);
444
445 // addJmbParamDef
446 tresult addJmbParamDef(std::shared_ptr<IJmbParamDef> iParamDef);
447
450 virtual tresult readDeprecatedRTState(uint16 iVersion, IBStreamer &iStreamer, NormalizedState *oNormalizedState) const;
451
452private:
453 // contains all the registered (raw type) parameters (unique ID, will be checked on add)
454 std::map<ParamID, std::shared_ptr<RawVstParamDef>> fVstParams{};
455
456 // contains all the registered (serializable type) parameters (unique ID, will be checked on add)
457 std::map<ParamID, std::shared_ptr<IJmbParamDef>> fJmbParams{};
458
459 // order in which the parameters will be registered in the vst world
460 std::vector<ParamID> fVstRegistrationOrder{};
461
462 // order in which the parameters were registered
463 std::vector<ParamID> fAllRegistrationOrder{};
464
465 // The "latest" order for both RT and GUI
468
469 // Keep track of deprecated state orders used for upgrade
470 std::map<int16, NormalizedState::SaveOrder> fRTDeprecatedSaveStateOrders{};
471 std::map<int16, NormalizedState::SaveOrder> fGUIDeprecatedSaveStateOrders{};
472
473private:
474 // add id to the param (checking that the parameter actually exists)
475 tresult addParamID(std::vector<ParamID> &oParamIDs, ParamID iParamID);
476
477 // leaf of templated calls to build a list of ParamIDs from ParamID or ParamDefs
478 tresult buildParamIDs(std::vector<ParamID> &iParamIDs) { return kResultOk; }
479
480 // case when ParamID
481 template<typename... Args>
482 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, ParamID id, Args&& ...args);
483
484 // case when IJmbParamDef
485 template<typename... Args>
486 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, std::shared_ptr<IJmbParamDef> &iParamDef, Args&& ...args)
487 {
488 return buildParamIDs(iParamIDs, iParamDef->fParamID, std::forward<Args>(args)...);
489 }
490
491 // case when IJmbParamDef
492 template<typename T, typename... Args>
493 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, std::shared_ptr<JmbParamDef<T>> &iParamDef, Args&& ...args)
494 {
495 return buildParamIDs(iParamIDs, iParamDef->fParamID, std::forward<Args>(args)...);
496 }
497
498 // case when VstParamDef
499 template<typename ParamConverter, typename... Args>
500 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, std::shared_ptr<VstParamDef<ParamConverter>> &iParamDef, Args&& ...args)
501 {
502 return buildParamIDs(iParamIDs, iParamDef->fParamID, std::forward<Args>(args)...);
503 }
504
505 // case when array of VstParamDef
506 template<typename ParamConverter, size_t N, typename... Args>
507 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, std::array<std::shared_ptr<VstParamDef<ParamConverter>>, N> &iParamDefs, Args&& ...args);
508
509 // case when RawVstParamDef
510 template<typename... Args>
511 tresult buildParamIDs(std::vector<ParamID> &iParamIDs, std::shared_ptr<RawVstParamDef> &iParamDef, Args&& ...args)
512 {
513 return buildParamIDs(iParamIDs, iParamDef->fParamID, std::forward<Args>(args)...);
514 }
515
519
523};
524
526template<typename T>
527concept ParametersSubclass = std::derived_from<T, Parameters>;
528
529//------------------------------------------------------------------------
530// Parameters::JmbParamDefBuilder::add
531//------------------------------------------------------------------------
532template<typename T>
534{
535 return fParameters->add(*this);
536}
537
538//------------------------------------------------------------------------
539// Parameters::VstParamDefBuilder::add
540//------------------------------------------------------------------------
541template<typename T>
543{
544 return fParameters->add(*this);
545}
546
547//------------------------------------------------------------------------
548// Parameters::add (called by the builder)
549//------------------------------------------------------------------------
550template<typename T>
552{
553 auto param = std::make_shared<VstParamDef<T>>(iBuilder.fParamID,
554 iBuilder.fTitle,
555 iBuilder.fUnits,
556 iBuilder.fDefaultValue,
557 iBuilder.fFlags,
558 iBuilder.fUnitID,
559 iBuilder.fShortTitle,
560 iBuilder.fPrecision,
561 iBuilder.fOwner,
562 iBuilder.fTransient,
563 iBuilder.fDeprecatedSince,
564 iBuilder.fConverter);
565
566 if(!iBuilder.fTransient && !iBuilder.fConverter)
567 {
568 DLOG_F(WARNING, "No converter defined for non transient parameter [%d]", iBuilder.fParamID);
569 }
570
571 if(addVstParamDef(param) == kResultOk)
572 return param;
573 else
574 return nullptr;
575}
576
577//------------------------------------------------------------------------
578// Parameters::add (called by the builder)
579//------------------------------------------------------------------------
580template<typename T>
582{
583 auto param = std::make_shared<JmbParamDef<T>>(iBuilder.fParamID,
584 iBuilder.fTitle,
585 iBuilder.fOwner,
586 iBuilder.fTransient,
587 iBuilder.fDeprecatedSince,
588 iBuilder.fShared,
589 iBuilder.fDefaultValue,
590 iBuilder.fSerializer);
591
592 if(!iBuilder.fTransient && !iBuilder.fSerializer)
593 {
594 DLOG_F(WARNING, "No serializer defined for parameter [%d] (won't be able to be saved)", iBuilder.fParamID);
595 }
596
597 if(iBuilder.fShared && !iBuilder.fSerializer)
598 {
599 DLOG_F(WARNING, "No serializer defined for parameter [%d] (won't be able to be shared with peer)", iBuilder.fParamID);
600 }
601
602 if(addJmbParamDef(param) == kResultOk)
603 return param;
604 else
605 return nullptr;
606}
607
608
609//------------------------------------------------------------------------
610// Parameters::vstFromType
611//------------------------------------------------------------------------
612template<typename T>
614{
615 return Parameters::VstParamDefBuilder<T>(this, iParamID, std::move(iTitle));
616}
617
618//------------------------------------------------------------------------
619// Parameters::vst
620//------------------------------------------------------------------------
621template<typename ParamConverter, typename... Args> requires IsIParamConverter<ParamConverter>
623 VstString16 iTitle,
624 Args&& ...iConverterArgs)
625{
626 auto builder = vstFromType<typename ParamConverter::ParamType>(iParamID, std::move(iTitle));
627 builder.template converter<ParamConverter>(std::forward<Args>(iConverterArgs)...);
628 return builder;
629}
630
631//------------------------------------------------------------------------
632// Parameters::vst
633//------------------------------------------------------------------------
634template<typename ParamConverter> requires IsIParamConverter<ParamConverter>
636 VstString16 iTitle,
637 typename ParamConverter::ConstructorType initValue) {
638 auto builder = vstFromType<typename ParamConverter::ParamType>(iParamID, std::move(iTitle));
639 builder.template converter<ParamConverter>(initValue);
640 return builder;
641}
642
643//------------------------------------------------------------------------
644// Parameters::jmbFromType
645//------------------------------------------------------------------------
646template<typename T>
648{
649 return Parameters::JmbParamDefBuilder<T>(this, iParamID, std::move(iTitle));
650}
651
652//------------------------------------------------------------------------
653// Parameters::jmb
654//------------------------------------------------------------------------
655template<typename ParamSerializer, typename... Args> requires IsIParamSerializer<ParamSerializer>
657 VstString16 iTitle,
658 Args&& ...iSerializerArgs)
659{
660 auto builder = jmbFromType<typename ParamSerializer::ParamType>(iParamID, std::move(iTitle));
661 builder.template serializer<ParamSerializer>(std::forward<Args>(iSerializerArgs)...);
662 return builder;
663}
664
665//------------------------------------------------------------------------
666// Parameters::jmb
667//------------------------------------------------------------------------
668template<typename ParamSerializer> requires IsIParamSerializer<ParamSerializer>
670 VstString16 iTitle,
671 typename ParamSerializer::ConstructorType initValue) {
672 auto builder = jmbFromType<typename ParamSerializer::ParamType>(iParamID, std::move(iTitle));
673 builder.template serializer<ParamSerializer>(initValue);
674 return builder;
675}
676
677//------------------------------------------------------------------------
678// Parameters::buildParamIDs
679//------------------------------------------------------------------------
680template<typename... Args>
681tresult Parameters::buildParamIDs(std::vector<ParamID> &iParamIDs, ParamID iParamID, Args&& ...args)
682{
683 tresult res = addParamID(iParamIDs, iParamID);
684 res |= buildParamIDs(iParamIDs, std::forward<Args>(args)...);
685 return res;
686}
687
688//------------------------------------------------------------------------
689// Parameters::buildParamIDs
690//------------------------------------------------------------------------
691template<typename ParamConverter, size_t N, typename... Args>
692tresult Parameters::buildParamIDs(std::vector<ParamID> &iParamIDs, std::array<std::shared_ptr<VstParamDef<ParamConverter>>, N> &iParamDefs, Args&& ...args)
693{
694 tresult res = kResultOk;
695 for(auto &def: iParamDefs)
696 res |= addParamID(iParamIDs, def->fParamID);
697 res |= buildParamIDs(iParamIDs, std::forward<Args>(args)...);
698 return res;
699}
700
701//------------------------------------------------------------------------
702// Parameters::setRTSaveStateOrder
703//------------------------------------------------------------------------
704template<typename... Args>
705tresult Parameters::setRTSaveStateOrder(int16 iVersion, Args&& ...args)
706{
707 std::vector<ParamID> ids{};
708 buildParamIDs(ids, std::forward<Args>(args)...);
709 return setRTSaveStateOrder({iVersion, ids});
710}
711
712//------------------------------------------------------------------------
713// Parameters::setRTDeprecatedSaveStateOrder
714//------------------------------------------------------------------------
715template<typename... Args>
716tresult Parameters::setRTDeprecatedSaveStateOrder(int16 iVersion, Args&& ...args)
717{
718 std::vector<ParamID> ids{};
719 buildParamIDs(ids, std::forward<Args>(args)...);
720 return setRTDeprecatedSaveStateOrder({iVersion, ids});
721}
722
723//------------------------------------------------------------------------
724// Parameters::setRTSaveStateOrder
725//------------------------------------------------------------------------
726template<typename... Args>
727tresult Parameters::setGUISaveStateOrder(int16 iVersion, Args&& ...args)
728{
729 std::vector<ParamID> ids{};
730 buildParamIDs(ids, std::forward<Args>(args)...);
731 return setGUISaveStateOrder({iVersion, ids});
732}
733
734//------------------------------------------------------------------------
735// Parameters::setGUIDeprecatedSaveStateOrder
736//------------------------------------------------------------------------
737template<typename... Args>
738tresult Parameters::setGUIDeprecatedSaveStateOrder(int16 iVersion, Args&& ...args)
739{
740 std::vector<ParamID> ids{};
741 buildParamIDs(ids, std::forward<Args>(args)...);
742 return setGUIDeprecatedSaveStateOrder({iVersion, ids});
743}
744
745}
This helper class is used to display the parameters (vst/jmb) WARNING: this class is allocating memor...
Definition ParamDisplay.h:33
A vst parameter is represented by a ParamValue type which is a double in the range [0,...
Definition ParamConverters.h:54
Owner
Who owns the parameter (mostly for state saving purposes).
Definition ParamDef.h:53
@ kRT
Definition ParamDef.h:54
@ kGUI
Definition ParamDef.h:55
static constexpr int16 kVersionNotDeprecated
Special version indicating the parameter is not deprecated.
Definition ParamDef.h:59
A vst parameter is represented by a ParamValue type which is a double in the range [0,...
Definition ParamSerializers.h:111
Base class for all non vst parameters (need to provide serialization/deserialization).
Definition ParamDef.h:318
Used to communicate the state between the UI and the RT and read/write to stream.
Definition NormalizedState.h:39
Interface to implement to receive parameter changes.
Definition Parameters.h:47
virtual void onParameterChange(ParamID iParamID)=0
virtual ~IChangeListener()=default
Destructor (needed for polymorphic base type).
RawVstParam add(RawVstParamDefBuilder const &iBuilder)
Definition Parameters.cpp:594
std::shared_ptr< RawVstParamDef > getRawVstParamDef(ParamID iParamID) const
Definition Parameters.cpp:174
tresult setRTSaveStateOrder(int16 iVersion, Args &&...args)
Used to change the default order (registration order) used when saving the RT state (getState/setStat...
Definition Parameters.h:705
tresult setRTDeprecatedSaveStateOrder(int16 iVersion, Args &&...args)
This method should be called to save the order of a deprecated version so that it can be handled duri...
Definition Parameters.h:716
virtual tresult readDeprecatedRTState(uint16 iVersion, IBStreamer &iStreamer, NormalizedState *oNormalizedState) const
This method is called to read a deprecated (prior version) RTState from the stream.
Definition Parameters.cpp:113
virtual ParamValue readNormalizedValue(ParamID iParamID, IBStreamer &iStreamer) const
Definition Parameters.cpp:159
NormalizedState::SaveOrder fGUISaveStateOrder
Definition Parameters.h:467
std::vector< ParamID > const & getAllRegistrationOrder() const
Definition Parameters.h:383
tresult setGUIDeprecatedSaveStateOrder(int16 iVersion, Args &&...args)
This method should be called to save the order of a deprecated version so that it can be handled duri...
Definition Parameters.h:738
VstParamDefBuilder< T > vstFromType(ParamID iParamID, VstString16 iTitle)
Used from derived classes to build a parameter backed by a VST parameter.
Definition Parameters.h:613
RawVstParamDefBuilder raw(ParamID iParamID, VstString16 iTitle)
Used from derived classes to build a parameter backed by a raw VST parameter.
Definition Parameters.cpp:618
std::function< void()> ChangeCallback
A callback that will be invoked for changes.
Definition Parameters.h:61
std::shared_ptr< IJmbParamDef > getJmbParamDef(ParamID iParamID) const
Definition Parameters.cpp:186
virtual tresult readRTState(IBStreamer &iStreamer, NormalizedState *oNormalizedState) const
This method is called to read the RTState from the stream.
Definition Parameters.cpp:95
tresult buildParamIDs(std::vector< ParamID > &iParamIDs, std::shared_ptr< JmbParamDef< T > > &iParamDef, Args &&...args)
Definition Parameters.h:493
std::map< int16, NormalizedState::SaveOrder > fRTDeprecatedSaveStateOrders
Definition Parameters.h:470
VstParamDefBuilder< typename ParamConverter::ParamType > vst(ParamID iParamID, VstString16 iTitle, Args &&...iConverterArgs)
Used from derived classes to build a parameter backed by a VST parameter.
Definition Parameters.h:622
virtual ~Parameters()=default
Destructor (needed for polymorphic base type).
JmbParamDefBuilder< T > jmbFromType(ParamID iParamID, VstString16 iTitle)
Used from derived classes to build a non vst parameter (not convertible to a ParamValue).
Definition Parameters.h:647
void registerVstParameters(Vst::ParameterContainer &iParameterContainer) const
This method is called from the GUI controller to register all the parameters to the ParameterContaine...
Definition Parameters.cpp:56
NormalizedState::SaveOrder const & getGUISaveStateOrder() const
Definition Parameters.h:298
tresult buildParamIDs(std::vector< ParamID > &iParamIDs, std::shared_ptr< IJmbParamDef > &iParamDef, Args &&...args)
Definition Parameters.h:486
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
std::vector< ParamID > fVstRegistrationOrder
Definition Parameters.h:460
virtual tresult handleRTStateUpgrade(NormalizedState const &iDeprecatedState, NormalizedState &oNewState) const
When Jamba detects that a previously saved RT state matches a deprecated version (as registered with ...
Definition Parameters.h:422
NormalizedState::SaveOrder const * getGUIDeprecatedSaveStateOrder(int16 iVersion) const
Definition Parameters.cpp:573
NormalizedState::SaveOrder const & getRTSaveStateOrder() const
Definition Parameters.h:342
std::vector< ParamID > fAllRegistrationOrder
Definition Parameters.h:463
JmbParamDefBuilder< typename ParamSerializer::ParamType > jmb(ParamID iParamID, VstString16 iTitle, Args &&...iSerializerArgs)
Used from derived classes to build a non vst parameter (not convertible to a ParamValue).
Definition Parameters.h:656
virtual tresult writeRTState(NormalizedState const *iNormalizedState, IBStreamer &oStreamer) const
This method is called to write the NormalizedState to the stream.
Definition Parameters.cpp:150
tresult addParamID(std::vector< ParamID > &oParamIDs, ParamID iParamID)
Definition Parameters.cpp:626
tresult buildParamIDs(std::vector< ParamID > &iParamIDs, std::shared_ptr< RawVstParamDef > &iParamDef, Args &&...args)
Definition Parameters.h:511
tresult addJmbParamDef(std::shared_ptr< IJmbParamDef > iParamDef)
Definition Parameters.cpp:237
std::map< ParamID, std::shared_ptr< IJmbParamDef > > fJmbParams
Definition Parameters.h:457
tresult setGUISaveStateOrder(int16 iVersion, Args &&...args)
Used to change the default order (registration order) used when saving the GUI state (getState/setSta...
Definition Parameters.h:727
std::map< int16, NormalizedState::SaveOrder > fGUIDeprecatedSaveStateOrders
Definition Parameters.h:471
std::vector< ParamID > const & getVstRegistrationOrder() const
Definition Parameters.h:380
tresult buildParamIDs(std::vector< ParamID > &iParamIDs, std::shared_ptr< VstParamDef< ParamConverter > > &iParamDef, Args &&...args)
Definition Parameters.h:500
NormalizedState::SaveOrder fRTSaveStateOrder
Definition Parameters.h:466
tresult addVstParamDef(std::shared_ptr< RawVstParamDef > iParamDef)
Definition Parameters.cpp:199
tresult buildParamIDs(std::vector< ParamID > &iParamIDs)
Definition Parameters.h:478
virtual std::unique_ptr< NormalizedState > newRTState() const
Definition Parameters.cpp:68
std::map< ParamID, std::shared_ptr< RawVstParamDef > > fVstParams
Definition Parameters.h:454
Typed parameter definition.
Definition ParamDef.h:178
Defines the concept that matches IParamConverter.
Definition ParamConverters.h:77
Defines the concept that matches IParamSerializer.
Definition ParamSerializers.h:161
Concept for a subclass of Parameters.
Definition Parameters.h:527
Definition ParamDisplay.cpp:29
Definition Clock.h:24
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
std::basic_string< Steinberg::char16 > VstString16
Strings made of char16 characters are represented by the native C++11 type std::basic_string<Steinber...
Definition Types.h:44
Maintains the order used to save/restore the RT and GUI state.
Definition NormalizedState.h:45
Implements the builder pattern for ease of build.
Definition Parameters.h:173
JmbParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle)
Definition Parameters.h:201
T fDefaultValue
Definition Parameters.h:191
JmbParamDefBuilder & defaultValue(T const &iDefaultValue)
Definition Parameters.h:175
ParamID fParamID
Definition Parameters.h:189
VstString16 fTitle
Definition Parameters.h:190
std::shared_ptr< IParamSerializer< T > > fSerializer
Definition Parameters.h:196
IParamDef::Owner fOwner
Definition Parameters.h:192
JmbParamDefBuilder & deprecatedSince(int16 iVersion)
Definition Parameters.h:177
JmbParamDefBuilder & shared(bool iShared=true)
Definition Parameters.h:180
JmbParam< T > add() const
Definition Parameters.h:533
JmbParamDefBuilder & rtOwned()
Definition Parameters.h:178
JmbParamDefBuilder & serializer(std::shared_ptr< IParamSerializer< T > > iSerializer)
Definition Parameters.h:181
JmbParamDefBuilder & guiOwned()
Definition Parameters.h:179
bool fTransient
Definition Parameters.h:193
JmbParamDefBuilder & transient(bool iTransient=true)
Definition Parameters.h:176
JmbParamDefBuilder & serializer(Args &&...iArgs)
Definition Parameters.h:183
int16 fDeprecatedSince
Definition Parameters.h:194
bool fShared
Definition Parameters.h:195
Parameters * fParameters
Definition Parameters.h:205
friend class Parameters
Definition Parameters.h:198
Implements the builder pattern for ease of build.
Definition Parameters.h:79
RawVstParam add() const
Definition Parameters.cpp:586
RawVstParamDefBuilder & unitID(int32 iUnitID)
Definition Parameters.h:85
RawVstParamDefBuilder & defaultValue(ParamValue iDefaultValue)
Definition Parameters.h:82
ParamID fParamID
Definition Parameters.h:97
VstString16 fTitle
Definition Parameters.h:98
UnitID fUnitID
Definition Parameters.h:103
RawVstParamDefBuilder & shortTitle(VstString16 iShortTitle)
Definition Parameters.h:86
RawVstParamDefBuilder & deprecatedSince(int16 iVersion)
Definition Parameters.h:91
IParamDef::Owner fOwner
Definition Parameters.h:106
RawVstParamDefBuilder & guiOwned()
Definition Parameters.h:89
int32 fPrecision
Definition Parameters.h:105
ParamValue fDefaultValue
Definition Parameters.h:100
int32 fFlags
Definition Parameters.h:102
RawVstParamDefBuilder & precision(int32 iPrecision)
Definition Parameters.h:87
VstString16 fShortTitle
Definition Parameters.h:104
VstString16 fUnits
Definition Parameters.h:99
int32 fStepCount
Definition Parameters.h:101
bool fTransient
Definition Parameters.h:107
RawVstParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle)
Definition Parameters.h:113
RawVstParamDefBuilder & flags(int32 iFlags)
Definition Parameters.h:84
RawVstParamDefBuilder & transient(bool iTransient=true)
Definition Parameters.h:90
RawVstParamDefBuilder & stepCount(int32 iStepCount)
Definition Parameters.h:83
int16 fDeprecatedSince
Definition Parameters.h:108
RawVstParamDefBuilder & units(VstString16 iUnits)
Definition Parameters.h:81
RawVstParamDefBuilder & rtOwned()
Definition Parameters.h:88
Parameters * fParameters
Definition Parameters.h:117
friend class Parameters
Definition Parameters.h:110
Implements the builder pattern for ease of build.
Definition Parameters.h:125
T fDefaultValue
Definition Parameters.h:148
VstParamDefBuilder & defaultValue(T const &iDefaultValue)
Definition Parameters.h:128
VstParamDefBuilder & converter(Args &&...iArgs)
Definition Parameters.h:139
ParamID fParamID
Definition Parameters.h:145
VstString16 fTitle
Definition Parameters.h:146
UnitID fUnitID
Definition Parameters.h:150
VstParamDefBuilder & flags(int32 iFlags)
Definition Parameters.h:129
IParamDef::Owner fOwner
Definition Parameters.h:153
VstParamDefBuilder & guiOwned()
Definition Parameters.h:134
int32 fPrecision
Definition Parameters.h:152
VstParamDefBuilder & unitID(int32 iUnitID)
Definition Parameters.h:130
VstParamDefBuilder & rtOwned()
Definition Parameters.h:133
int32 fFlags
Definition Parameters.h:149
VstParamDefBuilder & units(VstString16 iUnits)
Definition Parameters.h:127
VstString16 fShortTitle
Definition Parameters.h:151
VstString16 fUnits
Definition Parameters.h:147
VstParam< T > add() const
Definition Parameters.h:542
VstParamDefBuilder & converter(std::shared_ptr< IParamConverter< T > > iConverter)
Definition Parameters.h:137
VstParamDefBuilder & precision(int32 iPrecision)
Definition Parameters.h:132
VstParamDefBuilder & transient(bool iTransient=true)
Definition Parameters.h:135
bool fTransient
Definition Parameters.h:154
VstParamDefBuilder & shortTitle(VstString16 iShortTitle)
Definition Parameters.h:131
int16 fDeprecatedSince
Definition Parameters.h:155
VstParamDefBuilder(Parameters *iParameters, ParamID iParamID, VstString16 iTitle)
Definition Parameters.h:161
std::shared_ptr< IParamConverter< T > > fConverter
Definition Parameters.h:156
VstParamDefBuilder & deprecatedSince(int16 iVersion)
Definition Parameters.h:136
Parameters * fParameters
Definition Parameters.h:165
friend class Parameters
Definition Parameters.h:158