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;
}
}
}