Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RangedValue.h
Go to the documentation of this file.
1 /* Copyright (c) 2014-2015 "Omnidome" by cr8tr
2  * Dome Mapping Projection Software (http://omnido.me).
3  * Omnidome was created by Michael Winkelmann aka Wilston Oreo (@WilstonOreo)
4  *
5  * This file is part of Omnidome.
6  *
7  * Omnidome is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Affero General Public License as
9  * published by the Free Software Foundation, either version 3 of the
10  * License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Affero General Public License for more details.
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef OMNI_UI_MIXIN_RANGEDVALUE_H_
21 #define OMNI_UI_MIXIN_RANGEDVALUE_H_
22 
23 #include "Range.h"
24 
25 namespace omni {
26  namespace ui {
27  namespace mixin {
28  /**@brief Template class for a value within a certain min/max range
29  @tparam DERIVED name of derived class
30  @tparam VALUE value type (e.g. int or double)
31  **/
32  template<typename DERIVED, typename VALUE>
33  struct RangedValue :
34  Range<VALUE>,
35  Step<VALUE>
36  {
39  typedef VALUE value_type;
40 
41  /// Default constructor
43 
44  /// Constructor from user defined value and range
46  value_type _value,
47  value_type _minimum,
48  value_type _maximum,
49  value_type _singleStep = 1.0,
50  value_type _pageStep = 10.0) :
51  range_type(_minimum, _maximum),
52  step_type(_singleStep, _pageStep),
53  value_(_value),
54  defaultValue_(_value),
55  pivot_(_minimum)
56  {}
57 
58  /// Returns ratio of current value
59  qreal ratio() const
60  {
61  return range_type::ratio(value());
62  }
63 
64  /// Return value
65  value_type value() const
66  {
68  }
69 
70  /// Return default value
72  {
74  }
75 
76  /// Return pivot value
77  value_type pivot() const
78  {
79  return pivot_;
80  }
81 
82  /// Increate value by single step value
83  void increase()
84  {
85  value_type _oldValue = value_;
86 
88  validate();
89 
90  if (value_ != _oldValue) valueChangedEvent();
91  }
92 
93  /// Decrease value by single step value
94  void decrease()
95  {
96  value_type _oldValue = value_;
97 
99  validate();
100 
101  if (value_ != _oldValue) valueChangedEvent();
102  }
103 
104  /// Set new value and emit value changed event
105  void setValue(value_type _value)
106  {
107  value_type _oldValue = value_;
108 
109  value_ = _value;
110  validate();
111 
112  if (value_ != _oldValue) valueChangedEvent();
113  }
114 
115  /// Reset value to default value
116  void reset()
117  {
119  }
120 
121  /// Set new default value
123  {
124  defaultValue_ = _value;
125  }
126 
127  /// Set pivot value (0.0 by default)
128  void setPivot(value_type _pivot)
129  {
130  pivot_ = _pivot;
131  }
132 
133  protected:
134  /// Apply ranged value to widget
135  template<typename WIDGET>
136  void apply(WIDGET *_widget) const
137  {
138  range_type::apply(_widget, value_);
139 
140  _widget->setSingleStep(step_type::singleStep());
141  }
142 
143  /// Functor to apply for each step
144  template<typename F>
145  void for_each_step(F f)
146  {
151  f);
152  }
153 
154  /// Validate minimum, maximum and value
155  void validate()
156  {
158 
159  if (value_ <
161 
162  if (value_ >
164 
165  if (pivot_ <
167 
168  if (pivot_ >
170  }
171 
172  /// Value changed event which is emitted on changed value
173  virtual void valueChangedEvent()
174  {}
175 
176  private:
180  };
181  }
182  }
183 }
184 
185 #endif /* OMNI_UI_MIXIN_RANGEDVALUE_H_ */
Mixin for a ranged value with min and maximum.
Definition: Range.h:31
value_type value() const
Return value.
Definition: RangedValue.h:65
void setValue(value_type _value)
Set new value and emit value changed event.
Definition: RangedValue.h:105
Step< VALUE > step_type
Definition: RangedValue.h:38
void decrease()
Decrease value by single step value.
Definition: RangedValue.h:94
RangedValue(value_type _value, value_type _minimum, value_type _maximum, value_type _singleStep=1.0, value_type _pageStep=10.0)
Constructor from user defined value and range.
Definition: RangedValue.h:45
virtual void validate()
Validate minimum and maximum.
Definition: Range.h:138
void reset()
Reset value to default value.
Definition: RangedValue.h:116
void validate()
Validate minimum, maximum and value.
Definition: RangedValue.h:155
qreal snapped(value_type _v) const
Return snapped value.
Definition: Step.h:48
void setDefaultValue(value_type _value)
Set new default value.
Definition: RangedValue.h:122
Range< VALUE > range_type
Definition: RangedValue.h:37
void apply(WIDGET *_widget) const
Apply range to widget.
Definition: Range.h:123
value_type defaultValue_
Definition: RangedValue.h:178
VALUE value_type
Definition: RangedValue.h:39
value_type singleStep() const
Return value for single step.
Definition: Step.h:67
bool snap() const
Snap value (align to single step value)
Definition: Step.h:55
qreal ratio(value_type _v) const
Return ratio of value v.
Definition: Range.h:43
value_type pivot_
Definition: RangedValue.h:179
void setPivot(value_type _pivot)
Set pivot value (0.0 by default)
Definition: RangedValue.h:128
value_type value_
Definition: RangedValue.h:177
value_type maximum() const
Return maximum value.
Definition: Range.h:60
value_type defaultValue() const
Return default value.
Definition: RangedValue.h:71
void apply(WIDGET *_widget) const
Apply ranged value to widget.
Definition: RangedValue.h:136
int value_type
Definition: Range.h:33
void for_each_step(MIN _min, MAX _max, F f)
Functor to be applied for each step between min and maximum.
Definition: Step.h:93
value_type minimum() const
Return minimum value.
Definition: Range.h:54
qreal ratio() const
Returns ratio of current value.
Definition: RangedValue.h:59
Template class for a value within a certain min/max range.
Definition: RangedValue.h:33
value_type pivot() const
Return pivot value.
Definition: RangedValue.h:77
void for_each_step(F f)
Functor to apply for each step.
Definition: RangedValue.h:145
RangedValue()
Default constructor.
Definition: RangedValue.h:42
virtual void valueChangedEvent()
Value changed event which is emitted on changed value.
Definition: RangedValue.h:173
void increase()
Increate value by single step value.
Definition: RangedValue.h:83
Mixin Stepping value class template Singla and page step.
Definition: Step.h:33