Simple GUI Library
scroll_bar.cpp
Go to the documentation of this file.
1/**
2 * @author Nikita Mochalov (github.com/tralf-strues)
3 * @file scroll_bar.cpp
4 * @date 2021-12-12
5 *
6 * @copyright Copyright (c) 2021
7 */
8
11
12using namespace Sgl;
13
14ScrollBar::ScrollBar(Orientation orientation, float rangeMin, float rangeMax)
15 : m_Orientation(orientation), m_RangeMin(rangeMin), m_RangeMax(rangeMax)
16{
17 m_DefaultSkin = new DefaultSkins::ScrollBarSkin(this);
18 setSkin(m_DefaultSkin);
19}
20
21Orientation ScrollBar::getOrientation() const { return m_Orientation; }
22
23float ScrollBar::getRangeMin() const { return m_RangeMin; }
24
25void ScrollBar::setRangeMin(float min)
26{
27 assert(min < m_RangeMax);
28 m_RangeMin = min;
29
30 if (m_Value < m_RangeMin)
31 {
32 setValue(m_RangeMin);
33 }
34}
35
36float ScrollBar::getRangeMax() const { return m_RangeMax; }
37
38void ScrollBar::setRangeMax(float max)
39{
40 assert(m_RangeMin < max);
41 m_RangeMax = max;
42
43 if (m_Value > m_RangeMax)
44 {
45 setValue(m_RangeMax);
46 }
47}
48
49float ScrollBar::getValue() const { return m_Value; }
50
51void ScrollBar::setValue(float value)
52{
53 float oldValue = m_Value;
54
55 m_Value = value;
56 m_Value = std::max(m_Value, m_RangeMin);
57 m_Value = std::min(m_Value, m_RangeMax);
58
59 if (getOnPropertyChange() != nullptr && m_Value != oldValue)
60 {
61 getOnPropertyChange()->onPropertyChange(new Sml::PropertyChangeEvent<float>(oldValue, m_Value));
62 }
63}
64
65float ScrollBar::getIncrement() const { return m_Increment; }
66void ScrollBar::setIncrement(float increment) { m_Increment = increment; }
67
68float ScrollBar::getVisibleRange() const { return m_VisibleRange; }
69void ScrollBar::setVisibleRange(float visibleRange) { m_VisibleRange = visibleRange; }
70
71void ScrollBar::setOnPropertyChange(Sml::PropertyChangeListener<float>* listener)
72{
73 m_PropertyChangeListener = listener;
74}
75
76Sml::PropertyChangeListener<float>* ScrollBar::getOnPropertyChange() { return m_PropertyChangeListener; }