14 Slider::Slider(
float rangeMin,
float rangeMax) : m_RangeMin(rangeMin), m_RangeMax(rangeMax), m_Value(rangeMin)
16 assert(rangeMin < rangeMax);
18 m_DefaultSkin =
new DefaultSkins::SliderSkin(
this);
19 setSkin(m_DefaultSkin);
22 Slider::Slider(BaseSkin<Slider>* skin,
float rangeMin,
float rangeMax)
23 : m_RangeMin(rangeMin), m_RangeMax(rangeMax), m_Value(rangeMin)
30 Orientation Slider::getOrientation()
const {
return m_Orientation; }
31 void Slider::setOrientation(Orientation orientation) { m_Orientation = orientation; }
33 float Slider::getRangeMin()
const {
return m_RangeMin; }
34 float Slider::getRangeMax()
const {
return m_RangeMax; }
35 float Slider::getValue()
const {
return m_Value; }
37 void Slider::setRangeMin(
float min)
39 assert(min < m_RangeMax);
42 if (m_Value < m_RangeMin)
48 void Slider::setRangeMax(
float max)
50 assert(m_RangeMin < max);
53 if (m_Value > m_RangeMax)
59 void Slider::setValue(
float value)
61 float oldValue = m_Value;
64 m_Value = std::max(m_Value, m_RangeMin);
65 m_Value = std::min(m_Value, m_RangeMax);
67 if (m_Value == oldValue)
72 for (
auto listener : m_PropertyChangeListeners)
74 listener->onPropertyChange(
new Sml::PropertyChangeEvent<float>(oldValue, m_Value));
78 void Slider::addOnPropertyChange(Sml::PropertyChangeListener<float>* listener)
80 m_PropertyChangeListeners.push_back(listener);
83 const std::list<Sml::PropertyChangeListener<float>*>& Slider::getOnPropertyChange()
85 return m_PropertyChangeListeners;
88 const int32_t SliderWithLabel::DEFAULT_SPACING = 5;
90 SliderWithLabel::SliderWithLabel(
float rangeMin,
float rangeMax,
const char* format)
91 : m_Slider(new Slider(rangeMin, rangeMax)), m_Label(new Text(
"0")), m_Format(format) { attach(); }
93 SliderWithLabel::SliderWithLabel(BaseSkin<Slider>* skin,
float rangeMin,
float rangeMax,
const char* format)
94 : m_Slider(new Slider(skin, rangeMin, rangeMax)), m_Label(new Text(
"0")), m_Format(format) { attach(); }
96 Slider* SliderWithLabel::getSlider() {
return m_Slider; }
97 Text* SliderWithLabel::getLabel() {
return m_Label; }
99 void SliderWithLabel::attach()
101 setBackground(
nullptr);
103 addChildren(m_Slider, m_Label);
104 setSpacing(DEFAULT_SPACING);
105 setGrowPriority(m_Slider, GrowPriority::ALWAYS);
107 class SliderHandler :
public Sml::PropertyChangeListener<float>
110 SliderHandler(Text* label,
const char* format) : m_Label(label), m_Format(format) {}
112 virtual void onPropertyChange(Sml::PropertyChangeEvent<float>* event)
override
114 snprintf(m_Str,
sizeof(m_Str), m_Format, event->getNewValue());
115 m_Label->setString(m_Str);
120 const char* m_Format;
124 m_Slider->addOnPropertyChange(
new SliderHandler(m_Label, m_Format));