20 #include <pluginterfaces/vst/vsttypes.h> 21 #include <pongasoft/logging/logging.h> 30 using namespace Steinberg::Vst;
50 static_assert(std::is_default_constructible_v<T>,
"T must have a default/empty constructor: T()");
51 static_assert(std::is_copy_constructible_v<T>,
"T must have a copy constructor: T(T const &)");
52 static_assert(std::is_copy_assignable_v<T>,
"T must be copy assignable: T& operator=(T const &)");
69 explicit Value(T
const &iValue) : fValue{iValue} {}
80 fParameter{VstUtils::make_sfo<GUIValParameter<T>>(
UNDEFINED_PARAM_ID, iDefaultValue)} {}
84 DCHECK_F(fParameter !=
nullptr);
89 inline bool exists()
const {
return true; }
93 inline ParamID
getParamID()
const {
return fParameter->getParamID(); }
101 fParameter->accessValue([&res](
auto const &iValue) { res = iValue; });
112 return fParameter->update(iValue);
119 return fParameter->setValue(iValue);
124 inline std::unique_ptr<EditorType>
edit()
126 return fParameter->edit();
133 return fParameter->edit(iValue);
138 inline int32
getStepCount()
const {
return fParameter->getStepCount(); }
151 [[deprecated(
"Since 4.1.0 - use operator* or value() instead (ex: if(*param) {...} or if(param.value() {...})")]]
152 inline operator ParamType()
const {
return getValue(); }
162 return fParameter->connect(iChangeListener);
169 return fParameter->connect(iChangeCallback);
std::unique_ptr< FObjectCx > connect(Parameters::ChangeCallback iChangeCallback) const
Creates a connection between this parameter and the callback: whenever the parameter changes,...
Definition: GUIOptionalParam.h:167
ParamType value() const
Synonym to getValue()
Definition: GUIOptionalParam.h:106
std::function< void()> ChangeCallback
A callback that will be invoked for changes.
Definition: Parameters.h:55
Represents a gui parameter with its underlying backing type T (aka ParamType).
Definition: IGUIParameter.h:33
std::unique_ptr< typename GUIOptionalParam< T >::EditorType > GUIOptionalParamEditor
Definition: GUIOptionalParam.h:178
T fValue
Definition: GUIOptionalParam.h:70
std::unique_ptr< FObjectCx > connect(Parameters::IChangeListener *iChangeListener) const
Creates a connection between this parameter and the change listener: whenever the parameter changes,...
Definition: GUIOptionalParam.h:160
Implements all the various equality and relational operators for the type T which is assumed to encap...
Definition: Operators.h:54
constexpr ParamType operator *() const
allow writing *param to access the underlying value (or in other words, *param is the same param....
Definition: GUIOptionalParam.h:141
Definition: GUIState.h:36
GUIOptionalParam()
Definition: GUIOptionalParam.h:75
ParamID getParamID() const
Each parameter has a unique ID returned by this method.
Definition: GUIOptionalParam.h:93
tresult setValue(ParamType const &iValue)
Unconditionaly sets the value of the parameter to the value provided.
Definition: GUIOptionalParam.h:117
GUIOptionalParam(T const &iDefaultValue)
Definition: GUIOptionalParam.h:79
GUIOptionalParamEditor< ParamValue > GUIRawOptionalParamEditor
Definition: GUIOptionalParam.h:181
typename ITGUIParameter< ParamValue >::ITEditor EditorType
Definition: GUIOptionalParam.h:57
std::unique_ptr< EditorType > edit()
Creates an editor to modify the parameter in a transactional fashion.
Definition: GUIOptionalParam.h:124
int32 getStepCount() const
When a parameter is a discrete parameter (which means its underlying backing type is an int32 with va...
Definition: GUIOptionalParam.h:138
GUIOptionalParam & operator=(T const &iValue)
Allow to write param = 3 instead of param.update(3) for example.
Definition: GUIOptionalParam.h:156
bool update(ParamType const &iValue)
First check if the value provided (iValue) is different from the current value and if that is the cas...
Definition: GUIOptionalParam.h:110
GUIOptionalParam(std::shared_ptr< ITGUIParameter< T >> iParameter)
Definition: GUIOptionalParam.h:83
ParamType getValue() const
Definition: GUIOptionalParam.h:98
ParamValue ParamType
Definition: GUIOptionalParam.h:56
bool exists() const
Always return true because by definition an optional parameter always exist.
Definition: GUIOptionalParam.h:89
Defines the API for the editor which can be obtained by calling ITGUIParameter::edit().
Definition: IGUIParameter.h:232
std::shared_ptr< ITGUIParameter< ParamType > > fParameter
Definition: GUIOptionalParam.h:173
constexpr T const * operator ->() const
Definition: GUIOptionalParam.h:66
The purpose of this class is to copy the value so that it can be accessed via -> thus allowing to wri...
Definition: GUIOptionalParam.h:64
std::unique_ptr< EditorType > edit(ParamType const &iValue)
Shortcut api which creates an editor followed by ITEditor::setValue(ParamType const &) to set the par...
Definition: GUIOptionalParam.h:131
constexpr Value operator ->() const
allow writing param->x to access the underlying value when T is a struct or class
Definition: GUIOptionalParam.h:144
constexpr ParamID UNDEFINED_PARAM_ID
Constant used throughout the code to test whether the ParamID represents a valid id or an undefined o...
Definition: Types.h:47
Value(T const &iValue)
Definition: GUIOptionalParam.h:69
Interface to implement to receive parameter changes.
Definition: Parameters.h:43
Represents an optional parameter (Jmb, Vst or no param at all).
Definition: GUIOptionalParam.h:48