00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_BUTTON_HPP_)
00012 #define _XRB_BUTTON_HPP_
00013
00014 #include "xrb.hpp"
00015
00016 #include "xrb_label.hpp"
00017
00018 namespace Xrb
00019 {
00020
00021 class Button : public Label
00022 {
00023 public:
00024
00025 Button (
00026 std::string const &text,
00027 ContainerWidget *const parent,
00028 std::string const &name = "Button");
00029 Button (
00030 Resource<GLTexture> const &picture,
00031 ContainerWidget *const parent,
00032 std::string const &name = "Button");
00033 virtual ~Button () { }
00034
00035 inline bool IsPressed () const
00036 {
00037 return m_is_pressed;
00038 }
00039
00040 virtual void SetIsEnabled (bool is_enabled);
00041
00043
00044 SignalSender1<bool> const *SenderPressedStateChanged () { return &m_sender_pressed_state_changed; }
00045 SignalSender0 const *SenderPressed () { return &m_sender_pressed; }
00046 SignalSender0 const *SenderReleased () { return &m_sender_released; }
00047
00049
00050 protected:
00051
00052 virtual bool ProcessMouseButtonEvent (EventMouseButton const *e);
00053 virtual void HandleMouseoverOn ();
00054 virtual void HandleMouseoverOff ();
00055 virtual void HandlePressed ();
00056 virtual void HandleReleased ();
00057 virtual void UpdateRenderBackground ();
00058
00059
00060 virtual void HandleChangedWidgetSkinWidgetBackground (
00061 WidgetSkin::WidgetBackgroundType widget_background_type);
00062
00063 private:
00064
00065 void Initialize ();
00066
00067
00068 bool m_is_pressed;
00069
00071
00072 SignalSender1<bool> m_sender_pressed_state_changed;
00073 SignalSender0 m_sender_pressed;
00074 SignalSender0 m_sender_released;
00075
00077 };
00078
00079 }
00080
00081 #endif // !defined(_XRB_BUTTON_HPP_)