CheckBox.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. GWEN
  3. Copyright (c) 2010 Facepunch Studios
  4. See license in Gwen.h
  5. */
  6. #pragma once
  7. #ifndef GWEN_CONTROLS_CHECKBOX_H
  8. #define GWEN_CONTROLS_CHECKBOX_H
  9. #include "Gwen/Controls/Base.h"
  10. #include "Gwen/Controls/Button.h"
  11. #include "Gwen/Gwen.h"
  12. #include "Gwen/Skin.h"
  13. #include "Gwen/Controls/Symbol.h"
  14. #include "Gwen/Controls/LabelClickable.h"
  15. namespace Gwen
  16. {
  17. namespace Controls
  18. {
  19. class GWEN_EXPORT CheckBox : public Button
  20. {
  21. public:
  22. GWEN_CONTROL( CheckBox, Button );
  23. virtual void Render( Skin::Base* skin );
  24. virtual void OnPress();
  25. virtual void SetChecked( bool Checked );
  26. virtual void Toggle() { SetChecked( !IsChecked() ); }
  27. virtual bool IsChecked() { return m_bChecked; }
  28. Gwen::Event::Caller onChecked;
  29. Gwen::Event::Caller onUnChecked;
  30. Gwen::Event::Caller onCheckChanged;
  31. private:
  32. // For derived controls
  33. virtual bool AllowUncheck(){ return true; }
  34. void OnCheckStatusChanged();
  35. bool m_bChecked;
  36. };
  37. class GWEN_EXPORT CheckBoxWithLabel : public Base
  38. {
  39. public:
  40. GWEN_CONTROL_INLINE( CheckBoxWithLabel, Base )
  41. {
  42. SetSize( 200, 19 );
  43. m_Checkbox = new CheckBox( this );
  44. m_Checkbox->Dock( Pos::Left );
  45. m_Checkbox->SetMargin( Margin( 0, 3, 3, 3 ) );
  46. m_Checkbox->SetTabable( false );
  47. m_Label = new LabelClickable( this );
  48. m_Label->Dock( Pos::Fill );
  49. m_Label->onPress.Add( m_Checkbox, &CheckBox::ReceiveEventPress );
  50. m_Label->SetTabable( false );
  51. SetTabable( false );
  52. }
  53. virtual CheckBox* Checkbox() { return m_Checkbox; }
  54. virtual LabelClickable* Label() { return m_Label; }
  55. virtual bool OnKeySpace( bool bDown ) { if ( bDown ) m_Checkbox->SetChecked( !m_Checkbox->IsChecked() ); return true; }
  56. private:
  57. CheckBox* m_Checkbox;
  58. LabelClickable* m_Label;
  59. };
  60. }
  61. }
  62. #endif