/* 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 #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__