25#ifndef LMMS_AUTOMATABLE_MODEL_H
26#define LMMS_AUTOMATABLE_MODEL_H
43#define mapPropertyFromModelPtr(type,getfunc,setfunc,modelname) \
45 type getfunc() const \
47 return (type) modelname->value(); \
50 void setfunc( const type val ) \
52 modelname->setValue( val ); \
55#define mapPropertyFromModel(type,getfunc,setfunc,modelname) \
57 type getfunc() const \
59 return (type) modelname.value(); \
62 void setfunc( const type val ) \
64 modelname.setValue( (float) val ); \
68#define MODEL_IS_VISITABLE \
69 void accept(ModelVisitor& v) override { v.visit(*this); } \
70 void accept(ConstModelVisitor& v) const override { v.visit(*this); }
74class ControllerConnection;
103 template<
class Target>
107 if (doThrow && !vis.
result) { Q_ASSERT(
false); }
112 template<
class Target>
116 if (doThrow && !vis.
result) { Q_ASSERT(
false); }
120 bool isAutomated()
const;
144 return (std::round(v) != 0);
149 inline T
value(
int frameOffset = 0 )
const
163 for (
auto next =
m_nextLink; next !=
this; next = next->m_nextLink)
165 if (next->controllerConnection() && next->useControllerValue())
174 float controllerValue(
int frameOffset )
const;
210 float scaledValue(
float value )
const;
212 float inverseScaledValue(
float value )
const;
214 void setInitValue(
const float value );
216 void setValue(
const float value,
const bool isAutomated =
false);
228 void setRange(
const float min,
const float max,
const float step = 1 );
241 void setStep(
const float step );
256 size_t countLinks()
const;
267 virtual void saveSettings(QDomDocument& doc, QDomElement& element,
const QString& name);
273 virtual void loadSettings(
const QDomElement& element,
const QString& name);
277 return "automatablemodel";
300 float globalAutomationValueAt(
const TimePos& time );
323 virtual void reset();
325 void unlinkControllerConnection();
326 void setUseControllerValue(
bool b =
true);
334 const float step = 0,
335 Model* parent =
nullptr,
336 const QString& displayName = QString(),
337 bool defaultConstructed =
false );
342 float fittedValue(
float value )
const;
347 template<
class Target>
355 template<
class Target>
362 static bool mustQuoteName(
const QString &name);
374 void setValueInternal(
const float value);
391 template<
class T>
void roundAt(T& value,
const T& where)
const;
443 T
value(
int frameOffset = 0 )
const
473 Model * parent =
nullptr,
475 bool defaultConstructed =
false ) :
479 float getRoundedValue()
const;
480 int getDigitCount()
const;
481 QString displayValue(
const float val )
const override;
491 Model* parent =
nullptr,
493 bool defaultConstructed =
false ) :
497 QString displayValue(
const float val )
const override;
507 Model* parent =
nullptr,
509 bool defaultConstructed =
false ) :
513 QString displayValue(
const float val )
const override;
#define MODEL_IS_VISITABLE
Definition AutomatableModel.h:68
Definition AutomatableModel.h:77
const Target * dynamicCast(bool doThrow=false) const
const overload, see overloaded function
Definition AutomatableModel.h:113
bool isValueChanged()
Definition AutomatableModel.h:290
virtual void loadSettings(const QDomElement &element, const QString &name)
Loads settings of AutomatableModel from a DOM element.
Definition AutomatableModel.cpp:178
static void resetPeriodCounter()
Definition AutomatableModel.h:312
ValueBuffer m_valueBuffer
Definition AutomatableModel.h:419
T initValue() const
Definition AutomatableModel.h:181
bool isAutomatedOrControlled() const
Definition AutomatableModel.h:121
bool isAutomated() const
Definition AutomatableModel.cpp:90
bool useControllerValue() const
Definition AutomatableModel.h:317
void initValueChanged(float val)
float controllerValue(int frameOffset) const
Definition AutomatableModel.cpp:504
float m_maxValue
Definition AutomatableModel.h:398
void saveSettings(QDomDocument &doc, QDomElement &element) override
Definition AutomatableModel.h:364
static T castValue(const float v)
Definition AutomatableModel.h:136
float m_centerValue
Definition AutomatableModel.h:401
Target * dynamicCast(bool doThrow=false)
Return this class casted to Target.
Definition AutomatableModel.h:104
static long s_periodCounter
Definition AutomatableModel.h:421
AutomatableModel(const float val=0, const float min=0, const float max=0, const float step=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.cpp:45
float m_initValue
Definition AutomatableModel.h:396
void destroyed(lmms::jo_id_t id)
void setScaleLogarithmic(bool setToTrue=true)
Definition AutomatableModel.h:232
static void incrementPeriodCounter()
Definition AutomatableModel.h:307
float range() const
Definition AutomatableModel.h:223
float m_step
Definition AutomatableModel.h:399
QString nodeName() const override
Definition AutomatableModel.h:275
void setCenterValue(const float centerVal)
Definition AutomatableModel.h:248
float centerValue() const
Definition AutomatableModel.h:243
T maxValue() const
Definition AutomatableModel.h:198
T value(int frameOffset=0) const
Definition AutomatableModel.h:149
ValueBuffer * valueBuffer()
Function that returns sample-exact data as a ValueBuffer.
Definition AutomatableModel.cpp:530
static bool castValue(const float v)
Definition AutomatableModel.h:142
bool m_useControllerValue
Definition AutomatableModel.h:428
float m_minValue
Definition AutomatableModel.h:397
bool isAtInitValue() const
Definition AutomatableModel.h:186
float m_oldValue
used by valueBuffer for interpolation
Definition AutomatableModel.h:404
float fittedValue(float value) const
Definition AutomatableModel.cpp:404
void setScaleType(ScaleType sc)
Definition AutomatableModel.h:229
QMutex m_valueBufferMutex
Definition AutomatableModel.h:426
bool m_hasStrictStepSize
Definition AutomatableModel.h:408
long m_lastUpdatedPeriod
Definition AutomatableModel.h:420
AutomatableModel * m_nextLink
Definition AutomatableModel.h:412
virtual void accept(ModelVisitor &v)=0
void setValue(const float value, const bool isAutomated=false)
Definition AutomatableModel.cpp:294
ControllerConnection * m_controllerConnection
NULL if not appended to controller, otherwise connection info.
Definition AutomatableModel.h:416
bool isScaleLogarithmic() const
Definition AutomatableModel.h:236
ControllerConnection * controllerConnection() const
Definition AutomatableModel.h:126
void incValue(int steps)
Definition AutomatableModel.h:218
void loadSettings(const QDomElement &element) override
Definition AutomatableModel.h:369
ScaleType m_scaleType
scale type, linear by default
Definition AutomatableModel.h:394
virtual void accept(ConstModelVisitor &v) const =0
virtual void saveSettings(QDomDocument &doc, QDomElement &element, const QString &name)
Saves settings of AutomatableModel into a DOM element.
Definition AutomatableModel.cpp:103
float m_value
Definition AutomatableModel.h:395
T step() const
Definition AutomatableModel.h:204
T minValue() const
Definition AutomatableModel.h:192
bool isLinked() const
Definition AutomatableModel.h:282
ScaleType
Definition AutomatableModel.h:81
@ Logarithmic
Definition AutomatableModel.h:83
@ Linear
Definition AutomatableModel.h:82
virtual QString displayValue(const float val) const =0
bool m_valueChanged
Definition AutomatableModel.h:403
void setStrictStepSize(const bool b)
Definition AutomatableModel.h:302
float m_range
Definition AutomatableModel.h:400
bool m_hasSampleExactData
Definition AutomatableModel.h:423
BoolModel(const bool val=false, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:506
Definition ModelVisitor.h:54
Definition ControllerConnection.h:53
FloatModel(float val=0, float min=0, float max=0, float step=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:472
IntModel(int val=0, int min=0, int max=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:490
JournallingObject()
Definition JournallingObject.cpp:36
virtual QString displayName() const
Definition Model.cpp:47
Model(Model *parent, QString displayName=QString(), bool defaultConstructed=false)
Definition Model.cpp:30
Definition ModelVisitor.h:40
Definition AutomatableModel.h:440
AutomatableModel(const float val=0, const float min=0, const float max=0, const float step=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.cpp:45
T initValue() const
Definition AutomatableModel.h:448
T minValue() const
Definition AutomatableModel.h:453
T maxValue() const
Definition AutomatableModel.h:458
T value(int frameOffset=0) const
Definition AutomatableModel.h:443
Definition ValueBuffer.h:38
Definition RemotePluginBase.cpp:34
float logToLinearScale(float min, float max, float value)
Scales value from linear to logarithmic.
Definition lmms_math.h:241
QMap< AutomatableModel *, float > AutomatedValueMap
Definition AutomatableModel.h:516
std::uint32_t jo_id_t
Definition LmmsTypes.h:50
Definition AutomatableModel.h:357
void visit(const Target &tar)
Definition AutomatableModel.h:359
const Target * result
Definition AutomatableModel.h:358
Definition AutomatableModel.h:349
Target * result
Definition AutomatableModel.h:350
void visit(Target &tar)
Definition AutomatableModel.h:351