* InternalWindowManager.cs: ToolTipShow: Don't show tooltip if the form
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / CheckBox.cs
index 878f6a2efa9ed468cc180cbfe3ae795eb4c077ee..587d4b8f3bbfbe2dbdb5ef8e9f346a745e711521 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-// Copyright (c) 2004 Novell, Inc.
+// Copyright (c) 2004-2005 Novell, Inc.
 //
 // Authors:
 //     Dennis Hayes    dennish@raytek.com
 //     Peter Bartok    pbartok@novell.com
 //
 
-// COMPLETE
-
 using System;
 using System.ComponentModel;
 using System.Drawing;
@@ -34,6 +32,12 @@ using System.Runtime.InteropServices;
 namespace System.Windows.Forms {
        [DefaultProperty("Checked")]
        [DefaultEvent("CheckedChanged")]
+#if NET_2_0
+       [ComVisible (true)]
+       [ClassInterface (ClassInterfaceType.AutoDispatch)]
+       [DefaultBindingProperty ("CheckState")]
+       [ToolboxItem ("System.Windows.Forms.Design.AutoSizeToolboxItem," + Consts.AssemblySystem_Design)]
+#endif
        public class CheckBox : ButtonBase {
                #region Local Variables
                internal Appearance             appearance;
@@ -45,9 +49,9 @@ namespace System.Windows.Forms {
 
                #region CheckBoxAccessibleObject Subclass
                [ComVisible(true)]
-                       public class CheckBoxAccessibleObject : ControlAccessibleObject {
+               public class CheckBoxAccessibleObject : ButtonBaseAccessibleObject {
                        #region CheckBoxAccessibleObject Local Variables
-                       private CheckBox owner;
+                       private new CheckBox owner;
                        #endregion      // CheckBoxAccessibleObject Local Variables
 
                        #region CheckBoxAccessibleObject Constructors
@@ -91,6 +95,15 @@ namespace System.Windows.Forms {
                                }
                        }
                        #endregion      // CheckBoxAccessibleObject Properties
+
+#if NET_2_0
+                       #region CheckBoxAccessibleObject Methods
+                       public override void DoDefaultAction ()
+                       {
+                               owner.Checked = !owner.Checked;
+                       }
+                       #endregion      // CheckBoxAccessibleObject Methods
+#endif
                }
                #endregion      // CheckBoxAccessibleObject Sub-class
 
@@ -100,15 +113,13 @@ namespace System.Windows.Forms {
                        auto_check = true;
                        check_alignment = ContentAlignment.MiddleLeft;
                        text_alignment = ContentAlignment.MiddleLeft;
+                       SetStyle(ControlStyles.StandardDoubleClick, false);
                }
                #endregion      // Public Constructors
 
                #region Internal Methods
                internal override void Draw (PaintEventArgs pe) {
-                       if (redraw) {
-                               ThemeEngine.Current.DrawCheckBox (this.DeviceContext, this.ClientRectangle, this);
-                               redraw = false;
-                       }
+                       ThemeEngine.Current.DrawCheckBox (pe.Graphics, this.ClientRectangle, this);
                }
 
                internal override void HaveDoubleClick() {
@@ -127,9 +138,7 @@ namespace System.Windows.Forms {
                        set {
                                if (value != appearance) {
                                        appearance = value;
-                                       if (AppearanceChanged != null) {
-                                               AppearanceChanged(this, EventArgs.Empty);
-                                       }
+                                       OnAppearanceChanged (EventArgs.Empty);
                                        Redraw();
                                }
                        }
@@ -166,6 +175,9 @@ namespace System.Windows.Forms {
                [Bindable(true)]
                [RefreshProperties(RefreshProperties.All)]
                [DefaultValue(false)]
+#if NET_2_0
+               [SettingsBindable (true)]
+#endif
                public bool Checked {
                        get {
                                if (check_state != CheckState.Unchecked) {
@@ -261,25 +273,30 @@ namespace System.Windows.Forms {
 
                #region Protected Instance Methods
                protected override AccessibleObject CreateAccessibilityInstance() {
-                       return base.CreateAccessibilityInstance ();
+                       AccessibleObject        ao;
+
+                       ao = base.CreateAccessibilityInstance ();
+                       ao.role = AccessibleRole.CheckButton;
+
+                       return ao;
                }
 
                protected virtual void OnAppearanceChanged(EventArgs e) {
-                       if (AppearanceChanged != null) {
-                               AppearanceChanged(this, e);
-                       }
+                       EventHandler eh = (EventHandler)(Events [AppearanceChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected virtual void OnCheckedChanged(EventArgs e) {
-                       if (CheckedChanged != null) {
-                               CheckedChanged(this, e);
-                       }
+                       EventHandler eh = (EventHandler)(Events [CheckedChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected virtual void OnCheckStateChanged(EventArgs e) {
-                       if (CheckStateChanged != null) {
-                               CheckStateChanged(this, e);
-                       }
+                       EventHandler eh = (EventHandler)(Events [CheckStateChangedEvent]);
+                       if (eh != null)
+                               eh (this, e);
                }
 
                protected override void OnClick(EventArgs e) {
@@ -305,14 +322,23 @@ namespace System.Windows.Forms {
                                        }
                                }
                        }
+                       
+                       base.OnClick (e);
                }
 
                protected override void OnHandleCreated(EventArgs e) {
                        base.OnHandleCreated (e);
                }
 
-               protected override void OnMouseUp(MouseEventArgs e) {
-                       base.OnMouseUp (e);
+#if NET_2_0
+               protected override void OnKeyDown (KeyEventArgs kevent)
+               {
+                       base.OnKeyDown (kevent);
+               }
+#endif
+
+               protected override void OnMouseUp(MouseEventArgs mevent) {
+                       base.OnMouseUp (mevent);
                }
 
                protected override bool ProcessMnemonic(char charCode) {
@@ -327,15 +353,42 @@ namespace System.Windows.Forms {
                #endregion      // Protected Instance Methods
 
                #region Events
-               public event EventHandler       AppearanceChanged;
-               public event EventHandler       CheckedChanged;
-               public event EventHandler       CheckStateChanged;
+               static object AppearanceChangedEvent = new object ();
+               static object CheckedChangedEvent = new object ();
+               static object CheckStateChangedEvent = new object ();
+
+               public event EventHandler AppearanceChanged {
+                       add { Events.AddHandler (AppearanceChangedEvent, value); }
+                       remove { Events.RemoveHandler (AppearanceChangedEvent, value); }
+               }
+
+               public event EventHandler CheckedChanged {
+                       add { Events.AddHandler (CheckedChangedEvent, value); }
+                       remove { Events.RemoveHandler (CheckedChangedEvent, value); }
+               }
+
+               public event EventHandler CheckStateChanged {
+                       add { Events.AddHandler (CheckStateChangedEvent, value); }
+                       remove { Events.RemoveHandler (CheckStateChangedEvent, value); }
+               }
+               
+#if NET_2_0
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event MouseEventHandler MouseDoubleClick {
+                       add { base.MouseDoubleClick += value; }
+                       remove { base.MouseDoubleClick -= value; }
+               }
+#endif
                #endregion      // Events
 
                #region Events
+               // XXX have a look at this and determine if it
+               // manipulates base.DoubleClick, and see if
+               // HaveDoubleClick can just call OnDoubleClick.
                [Browsable(false)]
                [EditorBrowsable (EditorBrowsableState.Never)]
-               public event EventHandler DoubleClick;
+               public new event EventHandler DoubleClick;
                #endregion      // Events
        }
 }