NAP
parameterenum.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 // External Includes
8 #include <parameter.h>
9 #include <nap/signalslot.h>
10 #include <utility/dllexport.h>
11 
12 namespace nap
13 {
17  class NAPAPI ParameterEnumBase : public Parameter
18  {
19  RTTI_ENABLE(Parameter)
20 
21  public:
23 
29  virtual int getValue() const = 0;
30 
36  virtual void setValue(int value) = 0;
37 
41  const rtti::TypeInfo& getEnumType() const { return mEnumType; }
42 
43  private:
44  rtti::TypeInfo mEnumType;
45  };
46 
72  template<class T>
74  {
75  RTTI_ENABLE(ParameterEnumBase)
76 
77  public:
79  ParameterEnumBase(RTTI_OF(T))
80  {
81  }
82 
88  virtual int getValue() const override { return (int)mValue; }
89 
95  virtual void setValue(int value) override { setValue((T)value); }
96 
102  virtual void setValue(const Parameter& value) override;
103 
109  void setValue(T value);
110 
111  public:
112  T mValue;
114  };
115 
117  // Template Definitions
119 
120  template<class T>
122  {
123  const ParameterEnum<T>* derived_type = rtti_cast<const ParameterEnum<T>>(&value);
124  assert(derived_type != nullptr);
125 
126  setValue(derived_type->mValue);
127  }
128 
129  template<class T>
131  {
132  T oldValue = mValue;
133  mValue = value;
134  if (oldValue != mValue)
135  {
136  valueChanged(mValue);
137  }
138  }
139 }
140 
141 #define DEFINE_ENUM_PARAMETER(Type) \
142  RTTI_BEGIN_CLASS(Type) \
143  RTTI_PROPERTY("Value", &Type::mValue, nap::rtti::EPropertyMetaData::Default) \
144  RTTI_END_CLASS
nap::ParameterEnum::getValue
virtual int getValue() const override
Definition: parameterenum.h:88
nap::Parameter
Definition: parameter.h:20
nap::ParameterEnum::valueChanged
Signal< T > valueChanged
Signal that's raised when the value of this parameter changes.
Definition: parameterenum.h:113
nap::ParameterEnum
Definition: parameterenum.h:73
nap::ParameterEnum::ParameterEnum
ParameterEnum()
Definition: parameterenum.h:78
nap::ParameterEnumBase
Definition: parameterenum.h:17
nap::ParameterEnum::mValue
T mValue
Property: 'Value' the current value of the parameter.
Definition: parameterenum.h:112
nap::ParameterEnumBase::getEnumType
const rtti::TypeInfo & getEnumType() const
Definition: parameterenum.h:41
nap::Signal< T >
nap
Definition: templateapp.h:17
nap::rtti::TypeInfo
rttr::type TypeInfo
Definition: typeinfo.h:140
nap::ParameterEnum::setValue
virtual void setValue(int value) override
Definition: parameterenum.h:95