NAP
parameternumeric.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "mathutils.h"
9 
10 // External Includes
11 #include <parameter.h>
12 #include <nap/signalslot.h>
13 
14 namespace nap
15 {
19  template<typename T>
20  class ParameterNumeric : public Parameter
21  {
22  RTTI_ENABLE(Parameter)
23  public:
24 
30  virtual void setValue(const Parameter& value) override;
31 
37  virtual void setValue(T value);
38 
46  void setRange(T minimum, T maximum);
47 
48  public:
49  T mValue;
50  T mMinimum = static_cast<T>(0);
51  T mMaximum = static_cast<T>(1);
52 
54  };
55 
56 
58  // Numeric Parameter Type Definitions
60 
67 
68 
70  // Template Definitions
72 
73  template<typename T>
75  {
76  const ParameterNumeric<T>* derived_type = rtti_cast<const ParameterNumeric<T>>(&value);
77  assert(derived_type != nullptr);
78 
79  // Set value from the parameter
80  setValue(derived_type->mValue);
81  }
82 
83  template<typename T>
85  {
86  T oldValue = mValue;
87  mValue = math::clamp(value, mMinimum, mMaximum);
88  if (oldValue != mValue)
89  {
90  valueChanged(mValue);
91  }
92  }
93 
94  template<typename T>
95  void ParameterNumeric<T>::setRange(T minimum, T maximum)
96  {
97  mMinimum = minimum;
98  mMaximum = maximum;
99  setValue(mValue);
100  }
101 }
102 
106 #define DEFINE_NUMERIC_PARAMETER(Type) \
107  RTTI_BEGIN_CLASS(Type) \
108  RTTI_PROPERTY("Value", &Type::mValue, nap::rtti::EPropertyMetaData::Default) \
109  RTTI_PROPERTY("Minimum", &Type::mMinimum, nap::rtti::EPropertyMetaData::Default) \
110  RTTI_PROPERTY("Maximum", &Type::mMaximum, nap::rtti::EPropertyMetaData::Default) \
111  RTTI_FUNCTION("setValue", static_cast<void (Type::*)(decltype(Type::mValue))>(&Type::setValue)) \
112  RTTI_END_CLASS
nap::Parameter
Definition: parameter.h:20
nap::ParameterNumeric
Definition: parameternumeric.h:20
nap::ParameterNumeric::setRange
void setRange(T minimum, T maximum)
Definition: parameternumeric.h:95
nap::ParameterNumeric::valueChanged
Signal< T > valueChanged
Signal that's raised when the value of this parameter changes.
Definition: parameternumeric.h:53
nap::Signal< T >
nap::ParameterNumeric::mMinimum
T mMinimum
Property: 'Minimum' the minimum value of this parameter.
Definition: parameternumeric.h:50
nap::ParameterNumeric::mMaximum
T mMaximum
Property: 'Maximum' the maximum value of this parameter.
Definition: parameternumeric.h:51
nap::ParameterNumeric::setValue
virtual void setValue(const Parameter &value) override
Definition: parameternumeric.h:74
nap
Definition: templateapp.h:17
nap::ParameterNumeric::mValue
T mValue
Property: 'Value' the value of this parameter.
Definition: parameternumeric.h:49
nap::math::clamp
T clamp(T value, T min, T max)
Definition: mathutils.h:325