Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: 2f71c39f301f35fa2ab05d9a2fde451653f45f39 (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
138
139
140
141
142
/*
   ui/slider.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_SLIDER_H__
#define __INCLUDED_UI_SLIDER_H__

#include <string>
#include "ui/button.h"
#include "ui/widget.h"

namespace ui
{

/**
 * @brief a slider widget
 */
class Slider : public Widget
{
public:
	Slider(Widget *parent, const float minimum = 0.0f, const float maximum = 1.0f);
	~Slider();

	/**
	 * @brief the current slider value
	 */
	inline const float value() const {
		return slider_value;
	}
	
	/**
	 * @brief the minimum value
	 */
	inline const float minimum() const {
		return slider_minimum;
	}
	
	/**
	 * @brief the maximum value
	 */
	inline const float maximum() const {
		return slider_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);

	/**
	 * @brief show the widget
	 * */
	virtual void show();

protected:
	
	/**
	 * @brief resize event handler
	 * */
	virtual void resize();
	
	/**
	 * @brief draw event handler
	 * */
	virtual void draw();
	
	/**
	 * @brief 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			slider_minimum;
	float			slider_maximum;
	float			slider_value;
	bool			slider_dragging;
	
	Button			*slider_minbutton;
	Button			*slider_decbutton;
	Button			*slider_incbutton;
	Button			*slider_maxbutton;
};

}

#endif // __INCLUDED_UI_SLIDER_H__