using System; namespace Gwen.Control { /// /// CheckBox with label. /// public class LabeledCheckBox : Base { private readonly CheckBox m_CheckBox; private readonly LabelClickable m_Label; /// /// Invoked when the control has been checked. /// public event GwenEventHandler Checked; /// /// Invoked when the control has been unchecked. /// public event GwenEventHandler UnChecked; /// /// Invoked when the control's check has been changed. /// public event GwenEventHandler CheckChanged; /// /// Indicates whether the control is checked. /// public bool IsChecked { get { return m_CheckBox.IsChecked; } set { m_CheckBox.IsChecked = value; } } /// /// Label text. /// public String Text { get { return m_Label.Text; } set { m_Label.Text = value; } } /// /// Initializes a new instance of the class. /// /// Parent control. public LabeledCheckBox(Base parent) : base(parent) { SetSize(200, 19); m_CheckBox = new CheckBox(this); m_CheckBox.Dock = Pos.Left; m_CheckBox.Margin = new Margin(0, 2, 2, 2); m_CheckBox.IsTabable = false; m_CheckBox.CheckChanged += OnCheckChanged; m_Label = new LabelClickable(this); m_Label.Dock = Pos.Fill; m_Label.Clicked += m_CheckBox.Press; m_Label.IsTabable = false; IsTabable = false; } /// /// Handler for CheckChanged event. /// protected virtual void OnCheckChanged(Base control) { if (m_CheckBox.IsChecked) { if (Checked != null) Checked.Invoke(this); } else { if (UnChecked != null) UnChecked.Invoke(this); } if (CheckChanged != null) CheckChanged.Invoke(this); } /// /// Handler for Space keyboard event. /// /// Indicates whether the key was pressed or released. /// /// True if handled. /// protected override bool OnKeySpace(bool down) { base.OnKeySpace(down); if (!down) m_CheckBox.IsChecked = !m_CheckBox.IsChecked; return true; } } }