00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_checkbox.hpp"
00012
00013 #include "xrb_input_events.hpp"
00014
00015 namespace Xrb
00016 {
00017
00018 CheckBox::CheckBox (
00019 ContainerWidget *const parent,
00020 std::string const &name)
00021 :
00022 Button(Resource<GLTexture>(), parent, name),
00023 m_sender_checked_state_changed(this),
00024 m_sender_checked(this),
00025 m_sender_unchecked(this),
00026 m_receiver_set_is_checked(&CheckBox::SetIsChecked, this),
00027 m_receiver_check(&CheckBox::Check, this),
00028 m_receiver_uncheck(&CheckBox::Uncheck, this),
00029 m_receiver_toggle_is_checked(&CheckBox::ToggleIsChecked, this)
00030 {
00031 m_is_checked = false;
00032
00033 FixSize(
00034 ScreenCoordVector2(
00035 WidgetSkinFont(WidgetSkin::DEFAULT_FONT)->PixelHeight(),
00036 WidgetSkinFont(WidgetSkin::DEFAULT_FONT)->PixelHeight()));
00037
00038 CheckBox::UpdateRenderBackground();
00039 CheckBox::UpdateRenderPicture();
00040 }
00041
00042 void CheckBox::SetIsEnabled (bool const is_enabled)
00043 {
00044 Button::SetIsEnabled(is_enabled);
00045 }
00046
00047 void CheckBox::SetIsChecked (bool const is_checked)
00048 {
00049 if (m_is_checked != is_checked)
00050 ToggleIsChecked();
00051 }
00052
00053 void CheckBox::ToggleIsChecked ()
00054 {
00055 m_is_checked = !m_is_checked;
00056 HandleIsCheckedChanged();
00057 UpdateRenderPicture();
00058
00059 m_sender_checked_state_changed.Signal(m_is_checked);
00060 if (m_is_checked)
00061 m_sender_checked.Signal();
00062 else
00063 m_sender_unchecked.Signal();
00064 }
00065
00066 bool CheckBox::ProcessMouseButtonEvent (EventMouseButton const *const e)
00067 {
00068
00069 Button::ProcessMouseButtonEvent(e);
00070
00071
00072 if (e->ButtonCode() == Key::LEFTMOUSE && e->IsMouseButtonUpEvent())
00073 ToggleIsChecked();
00074
00075 return true;
00076 }
00077
00078 void CheckBox::UpdateRenderBackground ()
00079 {
00080 SetRenderBackground(
00081 WidgetSkinWidgetBackground(WidgetSkin::CHECK_BOX_BACKGROUND));
00082 }
00083
00084 void CheckBox::UpdateRenderPicture ()
00085 {
00086 if (IsChecked())
00087 SetRenderPicture(WidgetSkinTexture(WidgetSkin::CHECK_BOX_CHECK_TEXTURE));
00088 else
00089 SetRenderPicture(Resource<GLTexture>());
00090 }
00091
00092 void CheckBox::HandleChangedWidgetSkinWidgetBackground (
00093 WidgetSkin::WidgetBackgroundType const widget_background_type)
00094 {
00095 if (widget_background_type == WidgetSkin::CHECK_BOX_BACKGROUND)
00096 UpdateRenderBackground();
00097 }
00098
00099 void CheckBox::HandleChangedWidgetSkinTexture (
00100 WidgetSkin::TextureType const texture_type)
00101 {
00102 if (texture_type == WidgetSkin::CHECK_BOX_CHECK_TEXTURE)
00103 UpdateRenderPicture();
00104 }
00105
00106 }