#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