Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: d2a8bbb17a93d9bb74e21669dc7fa2e1f186dbc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*
   ui/scrollbar.h
   This file is part of the Osirion project and is distributed under
   the terms of the GNU General Public License version 2
*/

#ifndef __INCLUDED_UI_SCROLLBAR_H__
#define __INCLUDED_UI_SCROLLBAR_H__

#include <string>

#include "ui/widget.h"

namespace ui
{
	
class Button;

/**
 * @brief a scrollbar widget with a vertical layout.
 */
class ScrollBar : public Widget
{
public:
	ScrollBar(Widget *parent, const float minimum = 0.0f, const float maximum = 1.0f);
	
	~ScrollBar();
	
	/**
	 * @brief the current slider value
	 */
	inline const float value() const {
		return scrollbar_value;
	}
	
	/**
	 * @brief the minimum value
	 */
	inline const float minimum() const {
		return scrollbar_minimum;
	}
	
	/**
	 * @brief the maximum value
	 */
	inline const float maximum() const {
		return scrollbar_maximum;
	}
		
	/**
	 * @brief print widget description to console
	 */
	virtual void print(const size_t indent) const;
	
	/**
	 * @brief set the current slider value
	 * @see value
	 */
	void set_value(const float value);
	
	/**
	 * @brief set the minimum slider value
	 * @see minimum
	 */
	void set_minimum(const float minimum);
	
	/**
	 * @brief set the maximum slider value
	 * @see maximum
	 */
	void set_maximum(const float maximum);

	/**
	 * @brief set the minimum and maximum slider values
	 * @see minimum
	 * @see maximum
	 */
	void set_range(const float minimum, const float maximum);

	/// show the widget
	virtual void show();

protected:
	
	/// resize event handler
	virtual void resize();
	
	/// draw event handler
	virtual void draw();
	
	/// emit event handler
	virtual bool on_emit(Widget *sender, const Event event, void *data=0);
	
	/**
	 * @brief mouse button press event handler
	 * */
	virtual bool on_mousepress(const unsigned int button);

	/**
	 * @brief mouse button release event handler
	 * */
	virtual bool on_mouserelease(const unsigned int button);
	
	/**
	 * @brief mouseover event handler
	 * */
	virtual void on_mouseover(const math::Vector2f &cursor);
	
	/**
	 * @brief mouse movement event handler
	 * */
	virtual void on_mousemove(const math::Vector2f &cursor);
	
	/**
	 * @brief mousehweel event handler
	 * */
	virtual bool on_mousewheel(const math::Vector2f & direction);
	
private:
	/// validate slider value
	void validate();
	
	float			scrollbar_minimum;
	float			scrollbar_maximum;
	float			scrollbar_value;
	bool			scrollbar_dragging;
	
	Button			*scrollbar_minbutton;
	Button			*scrollbar_decbutton;
	Button			*scrollbar_incbutton;
	Button			*scrollbar_maxbutton;
};

}

#endif // __INCLUDED_UI_SCROLLBAR_H__