#if FRAMEWORK20 using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; using System.Drawing; namespace DevComponents.Editors { public class VisualToggleButton : VisualItem { #region Private Variables #endregion #region Events /// /// Occurs when Checked property has changed. /// public event EventHandler CheckedChanged; #endregion #region Constructor /// /// Initializes a new instance of the VisualToggleButton class. /// public VisualToggleButton() { this.Focusable = true; } #endregion #region Internal Implementation protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left && GetIsEnabled()) { ToggleChecked(); IsMouseDown = true; } base.OnMouseDown(e); } protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) IsMouseDown = false; base.OnMouseUp(e); } protected override void OnMouseEnter() { this.IsMouseOver = true; base.OnMouseEnter(); } protected override void OnMouseLeave() { this.IsMouseOver = false; base.OnMouseLeave(); } protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e) { if (e.KeyCode == System.Windows.Forms.Keys.Space && GetIsEnabled()) { ToggleChecked(); e.Handled = true; } base.OnKeyDown(e); } private void ToggleChecked() { this.Checked = !this.Checked; } /// /// Raises the CheckedChanged event. /// protected virtual void OnCheckedChanged(EventArgs e) { if (CheckedChanged != null) CheckedChanged(this, e); } private bool _Checked = false; /// /// Gets or sets whether item is checked. /// [DefaultValue(false)] public virtual bool Checked { get { return _Checked; } set { if (_Checked != value) { _Checked = value; InvalidateRender(); OnCheckedChanged(new EventArgs()); } } } private bool _IsMouseDown; /// /// Gets whether left mouse button is pressed over the item. /// [Browsable(false)] public bool IsMouseDown { get { return _IsMouseDown; } internal set { if (value != _IsMouseDown) { _IsMouseDown = value; this.InvalidateRender(); } } } private bool _IsMouseOver = false; /// /// Gets whether mouse is over the item. /// [Browsable(false)] public bool IsMouseOver { get { return _IsMouseOver; } internal set { if (value != _IsMouseOver) { _IsMouseOver = value; this.InvalidateRender(); } } } #endregion } } #endif