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;
266 virtual void saveSettings( QDomDocument& doc, QDomElement& element,
const QString&
name );
270 virtual void loadSettings(
const QDomElement& element,
const QString&
name );
274 return "automatablemodel";
297 float globalAutomationValueAt(
const TimePos& time );
320 virtual void reset();
322 void unlinkControllerConnection();
323 void setUseControllerValue(
bool b =
true);
331 const float step = 0,
333 const QString& displayName = QString(),
334 bool defaultConstructed =
false );
339 float fittedValue(
float value )
const;
344 template<
class Target>
352 template<
class Target>
359 static bool mustQuoteName(
const QString &
name);
371 void setValueInternal(
const float value);
386 template<
class T>
void roundAt( T &
value,
const T &where )
const;
438 T
value(
int frameOffset = 0 )
const
470 bool defaultConstructed =
false ) :
474 float getRoundedValue()
const;
475 int getDigitCount()
const;
476 QString displayValue(
const float val )
const override;
488 bool defaultConstructed =
false ) :
492 QString displayValue(
const float val )
const override;
504 bool defaultConstructed =
false ) :
508 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:287
virtual void loadSettings(const QDomElement &element, const QString &name)
Loads settings (value, automation links and controller connections) of AutomatableModel from specifie...
Definition AutomatableModel.cpp:178
static void resetPeriodCounter()
Definition AutomatableModel.h:309
ValueBuffer m_valueBuffer
Definition AutomatableModel.h:414
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:314
void initValueChanged(float val)
float controllerValue(int frameOffset) const
Definition AutomatableModel.cpp:514
float m_maxValue
Definition AutomatableModel.h:393
void saveSettings(QDomDocument &doc, QDomElement &element) override
Definition AutomatableModel.h:361
static T castValue(const float v)
Definition AutomatableModel.h:136
float m_centerValue
Definition AutomatableModel.h:396
Target * dynamicCast(bool doThrow=false)
Return this class casted to Target.
Definition AutomatableModel.h:104
static long s_periodCounter
Definition AutomatableModel.h:416
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:391
void destroyed(lmms::jo_id_t id)
void setScaleLogarithmic(bool setToTrue=true)
Definition AutomatableModel.h:232
static void incrementPeriodCounter()
Definition AutomatableModel.h:304
float range() const
Definition AutomatableModel.h:223
float m_step
Definition AutomatableModel.h:394
QString nodeName() const override
Definition AutomatableModel.h:272
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:540
static bool castValue(const float v)
Definition AutomatableModel.h:142
bool m_useControllerValue
Definition AutomatableModel.h:423
float m_minValue
Definition AutomatableModel.h:392
bool isAtInitValue() const
Definition AutomatableModel.h:186
float m_oldValue
used by valueBuffer for interpolation
Definition AutomatableModel.h:399
float fittedValue(float value) const
Definition AutomatableModel.cpp:404
void setScaleType(ScaleType sc)
Definition AutomatableModel.h:229
QMutex m_valueBufferMutex
Definition AutomatableModel.h:421
bool m_hasStrictStepSize
Definition AutomatableModel.h:403
long m_lastUpdatedPeriod
Definition AutomatableModel.h:415
AutomatableModel * m_nextLink
Definition AutomatableModel.h:407
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:411
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:366
ScaleType m_scaleType
scale type, linear by default
Definition AutomatableModel.h:389
virtual void accept(ConstModelVisitor &v) const =0
virtual void saveSettings(QDomDocument &doc, QDomElement &element, const QString &name)
Saves settings (value, automation links and controller connections) of AutomatableModel into specifie...
Definition AutomatableModel.cpp:103
float m_value
Definition AutomatableModel.h:390
T step() const
Definition AutomatableModel.h:204
T minValue() const
Definition AutomatableModel.h:192
bool isLinked() const
Definition AutomatableModel.h:279
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:398
void setStrictStepSize(const bool b)
Definition AutomatableModel.h:299
float m_range
Definition AutomatableModel.h:395
bool m_hasSampleExactData
Definition AutomatableModel.h:418
BoolModel(const bool val=false, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:501
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:467
IntModel(int val=0, int min=0, int max=0, Model *parent=nullptr, const QString &displayName=QString(), bool defaultConstructed=false)
Definition AutomatableModel.h:485
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:435
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:443
T minValue() const
Definition AutomatableModel.h:448
T maxValue() const
Definition AutomatableModel.h:453
T value(int frameOffset=0) const
Definition AutomatableModel.h:438
Definition ValueBuffer.h:38
unsigned v[N_MAX]
Definition inflate.c:1584
static PuglViewHint int value
Definition pugl.h:1708
static const char * name
Definition pugl.h:1582
static uintptr_t parent
Definition pugl.h:1644
int val
Definition jpeglib.h:956
Definition AudioAlsa.cpp:35
float logToLinearScale(float min, float max, float value)
Scales @value from linear to logarithmic. Value should be within [0,1].
Definition lmms_math.h:239
static void roundAt(T &value, const T &where, const T &stepSize)
Round value to where depending on step size.
Definition lmms_math.h:193
QMap< AutomatableModel *, float > AutomatedValueMap
Definition AutomatableModel.h:511
std::uint32_t jo_id_t
Definition LmmsTypes.h:50
#define true
Definition ordinals.h:82
#define false
Definition ordinals.h:83
#define min(x, y)
Definition os.h:74
#define max(x, y)
Definition os.h:78
Definition AutomatableModel.h:354
void visit(const Target &tar)
Definition AutomatableModel.h:356
const Target * result
Definition AutomatableModel.h:355
Definition AutomatableModel.h:346
Target * result
Definition AutomatableModel.h:347
void visit(Target &tar)
Definition AutomatableModel.h:348
return c
Definition crypt.c:175