- Added ActiveMdiChild method
[mono.git] / mcs / class / System.Windows.Forms / Gtk / CheckBox.cs
index 5157992e58150391a0f244f6d11eacc4cb64a588..e6b67dca92be6cfe807d90dab0fc3e3994f0122b 100644 (file)
@@ -2,12 +2,12 @@
 //                     System.Windows.Forms.CheckBox
 //
 //                     Author: 
-//                                             Joel Basson             (jstrike@mweb.co.za)
+//                                     Joel Basson                     (jstrike@mweb.co.za)
+//                                     Alberto Fernandez       (infjaf00@yahoo.es)
 //
 //
 
-using System.Drawing;\r
-using System.Drawing.Printing;\r
+using System.Drawing;
 using System.ComponentModel;
 
 namespace System.Windows.Forms {
@@ -19,23 +19,140 @@ namespace System.Windows.Forms {
 
        public class CheckBox: ButtonBase{
 
-       public CheckBox () : base ()
-       {
-       }\r
+               private bool autocheck = false;
+               private bool threeState = false;
+               private CheckState checkState;
 
-       internal override Gtk.Widget CreateWidget () {
-               Gtk.CheckButton cbox = new Gtk.CheckButton();
-               cbox.Add (label.Widget);
-               return cbox;    
-       }
-       
-               public bool Checked {
-                       get {
-                       return ((Gtk.CheckButton)Widget).Active; 
+               public CheckBox () : base (){
+                       AutoCheck = true;
+                       Checked = false;
+                       ThreeState = false;
+               }
+               public Appearance Appearance{
+                       get{ 
+                               if ( (Widget as Gtk.CheckButton).DrawIndicator)
+                                       return Appearance.Normal;
+                               return Appearance.Button;
                        }
+                       set{
+                               if (!Enum.IsDefined (typeof(Appearance), value) )
+                                       throw new InvalidEnumArgumentException();
+                               if (value != Appearance){
+                                       if (value == Appearance.Normal)
+                                               (Widget as Gtk.CheckButton).DrawIndicator = true;
+                                       else
+                                               (Widget as Gtk.CheckButton).DrawIndicator = false;
+                                       OnAppearanceChanged (EventArgs.Empty);                          
+                               }
+                       }
+               }
+               public bool AutoCheck {
+                       get { return autocheck;  }
+                       set { autocheck = value; }
+               }
+               [MonoTODO]
+               public ContentAlignment CheckAlign {
+                       get { return ContentAlignment.MiddleLeft; }
                        set {
-                               ((Gtk.CheckButton)Widget).Active = value;
+                               if (!Enum.IsDefined (typeof (ContentAlignment), value)){
+                                       throw new InvalidEnumArgumentException ("CheckAlign");
+                               }
+                       }
+               }
+               public bool Checked {
+                       get { return (this.CheckState != CheckState.Unchecked); }
+                       set { this.CheckState = (value) ? CheckState.Checked : CheckState.Unchecked;}
+               }
+               public CheckState CheckState{
+                       get{ return checkState; }
+                       set{
+                               if (! Enum.IsDefined ( typeof(CheckState), value) )
+                                       throw new InvalidEnumArgumentException();
+                               checkState = value;
+                               switch (value){
+                                       case CheckState.Indeterminate:
+                                               (Widget as Gtk.CheckButton).Inconsistent = true;
+                                               break;
+                                       case CheckState.Checked:
+                                               (Widget as Gtk.CheckButton).Inconsistent = false;
+                                               (Widget as Gtk.CheckButton).Active = true;
+                                               break;
+                                       case CheckState.Unchecked:
+                                               (Widget as Gtk.CheckButton).Inconsistent = false;
+                                               (Widget as Gtk.CheckButton).Active = false;
+                                               break;
+                               }
+                               
                        }
                }
+               protected override Size DefaultSize {
+                       get{ return new Size(104, 24);}
+               }
+               public bool ThreeState {
+                       get { return threeState; } 
+                       set { threeState = value; }
+               }
+               protected virtual void OnAppearanceChanged( EventArgs e){
+                       if (AppearanceChanged != null)
+                               AppearanceChanged (this, e);
+               }
+               protected virtual void OnCheckedChanged( EventArgs e){
+                       if (CheckedChanged != null)
+                               CheckedChanged (this, e);
+               }
+               protected virtual void OnCheckStateChanged(EventArgs e){
+                       if (CheckStateChanged != null)
+                               CheckStateChanged (this, e);
+               }
+               public override string ToString(){
+                       return "System.Windows.Forms.CheckBox, CheckState: " +
+                               (int) this.CheckState;
+               }
+               
+               public event EventHandler AppearanceChanged;
+               public event EventHandler CheckedChanged;
+               public event EventHandler CheckStateChanged;
+               public new event EventHandler DoubleClick;\r
+               
+               
+               
+               internal override Gtk.Widget CreateWidget () {
+                       Gtk.CheckButton cbox = new Gtk.CheckButton();
+                       cbox.Add (label.Widget);
+                       return cbox;    
+               }
+               internal override void ConnectEvents(){
+                       (Widget as Gtk.CheckButton).Toggled += new EventHandler (GtkToggled);
+               }
+               
+               // Lock variable.
+               private bool started = false;
+               private void GtkToggled (object o, EventArgs e){
+                       if (started)
+                               return;
+                       started = true;
+                       if (AutoCheck){
+                               if (this.CheckState == CheckState.Indeterminate){
+                                       this.CheckState = CheckState.Unchecked;
+                                       OnCheckedChanged(e);
+                                       OnCheckStateChanged(e);                                 
+                               }
+                               else if ((this.CheckState == CheckState.Checked) && (this.ThreeState)) {
+                                       this.CheckState = CheckState.Indeterminate;
+                                       OnCheckStateChanged (e);
+                               }
+                               else{
+                                       this.Checked = !this.Checked;
+                                       OnCheckedChanged(e);
+                                       OnCheckStateChanged(e);
+                               }
+                                       
+                       }
+                       else{
+                               this.CheckState = checkState;
+                       }
+                       started = false;
+                       
+               }               
        }
-}
\ No newline at end of file
+}