make another pass at corcompare, mostly attributes on classes/properties/events/etc
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ProgressBar.cs
index 41eab550dd9179bd66ee5425414cccad3ef13600..22183559482a5a697dac91c753a5c949dbabad19 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-2006 Novell, Inc.
 //
-// Autors:
+// Authors:
 //             Jordi Mas i Hernandez   jordi@ximian.com
+//             Peter Dennis Bartok     pbartok@novell.com
 //
 //
 
@@ -29,37 +30,145 @@ using System.Drawing;
 using System.ComponentModel;
 using System.Drawing.Imaging;
 using System.Drawing.Drawing2D;
+using System.Runtime.InteropServices;
 
 namespace System.Windows.Forms
 {
-       public sealed class ProgressBar : Control
+       [DefaultProperty ("Value")]
+#if NET_2_0
+       [DefaultBindingProperty ("Value")]
+       [ClassInterface (ClassInterfaceType.AutoDispatch)]
+       [ComVisible (true)]
+#endif
+       public
+#if !NET_2_0
+       sealed
+#endif
+       class ProgressBar : Control
        {
                #region Local Variables
                private int maximum;
                private int minimum;
                internal int step;
                internal int val;
-               internal Rectangle paint_area = new Rectangle ();
                internal Rectangle client_area = new Rectangle ();
+#if NET_2_0
+               internal ProgressBarStyle style;
+#endif         
                #endregion      // Local Variables
 
-               #region Events
-               public new event EventHandler BackColorChanged;
-               public new event EventHandler BackgroundImageChanged;\r
-               public new event EventHandler CausesValidationChanged;
-               public new event EventHandler DoubleClick;
-               public new event EventHandler Enter;
-               public new event EventHandler FontChanged;
-               public new event EventHandler ForeColorChanged;
-               public new event EventHandler ImeModeChanged;\r
-               public new event KeyEventHandler KeyDown;\r
-               public new event KeyPressEventHandler KeyPress;\r
-               public new event KeyEventHandler KeyUp;
-               public new event EventHandler Leave;
-               public new event PaintEventHandler Paint;\r
-               public new event EventHandler RightToLeftChanged;\r
-               public new event EventHandler TabStopChanged;
-               public new event EventHandler TextChanged;
+               #region events
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]          
+               public new event EventHandler BackColorChanged {
+                       add { base.BackColorChanged += value; }
+                       remove { base.BackColorChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler BackgroundImageChanged {
+                       add { base.BackgroundImageChanged += value; }
+                       remove { base.BackgroundImageChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler CausesValidationChanged {
+                       add { base.CausesValidationChanged += value; }
+                       remove { base.CausesValidationChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler DoubleClick {
+                       add { base.DoubleClick += value; }
+                       remove { base.DoubleClick -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler Enter {
+                       add { base.Enter += value; }
+                       remove { base.Enter -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler FontChanged {
+                       add { base.FontChanged += value; }
+                       remove { base.FontChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler ForeColorChanged {
+                       add { base.ForeColorChanged += value; }
+                       remove { base.ForeColorChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler ImeModeChanged {
+                       add { base.ImeModeChanged += value; }
+                       remove { base.ImeModeChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event KeyEventHandler KeyDown {
+                       add { base.KeyDown += value; }
+                       remove { base.KeyDown -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event KeyPressEventHandler KeyPress {
+                       add { base.KeyPress += value; }
+                       remove { base.KeyPress -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event KeyEventHandler KeyUp {
+                       add { base.KeyUp += value; }
+                       remove { base.KeyUp -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler Leave {
+                       add { base.Leave += value; }
+                       remove { base.Leave -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event PaintEventHandler Paint {
+                       add { base.Paint += value; }
+                       remove { base.Paint -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler RightToLeftChanged {
+                       add { base.RightToLeftChanged += value; }
+                       remove { base.RightToLeftChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler TabStopChanged {
+                       add { base.TabStopChanged += value; }
+                       remove { base.TabStopChanged -= value; }
+               }
+               
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new event EventHandler TextChanged {
+                       add { base.TextChanged += value; }
+                       remove { base.TextChanged -= value; }
+               }
                #endregion Events
 
                #region Public Constructors
@@ -70,99 +179,105 @@ namespace System.Windows.Forms
                        step = 10;
                        val = 0;
 
-                       base.Paint += new PaintEventHandler (OnPaintPB);
                        base.Resize += new EventHandler (OnResizeTB);
 
-                       SetStyle (ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
-                       SetStyle (ControlStyles.ResizeRedraw | ControlStyles.Opaque, true);
+                       SetStyle (ControlStyles.UserPaint | 
+                               ControlStyles.Selectable | 
+                               ControlStyles.ResizeRedraw | 
+                               ControlStyles.Opaque
+#if NET_2_0
+                               | ControlStyles.UseTextForAccessibility
+#endif
+                               , false);
                }
                #endregion      // Public Constructors
 
-               #region Public Instance Properties\r
-\r
-               public override bool AllowDrop\r
-               {\r
+               #region Public Instance Properties
+
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override bool AllowDrop
+               {
                        get { return base.AllowDrop; }
                        set {
                                base.AllowDrop = value;
-                       }\r
-               }\r
-\r
-               // Setting this property in MS .Net 1.1 does not have any visual effect and it\r
-               // does not fires a BackColorChanged event\r
-               public override Color BackColor\r
-               {\r
+                       }
+               }
+
+               // Setting this property in MS .Net 1.1 does not have any visual effect and it
+               // does not fire a BackColorChanged event
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override Color BackColor
+               {
                        get { return base.BackColor; }
-                       set { BackColor = value; }
+                       set { base.BackColor = value; }
                }
 
-               // Setting this property in MS .Net 1.1 does not have any visual effect and it\r
-               // does not fires a BackgroundImageChanged event\r
-               public override Image BackgroundImage\r
-               {\r
+               // Setting this property in MS .Net 1.1 does not have any visual effect and it
+               // does not fire a BackgroundImageChanged event
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override Image BackgroundImage
+               {
                        get { return base.BackgroundImage; }
-                       set {BackgroundImage = value; }
+                       set { base.BackgroundImage = value; }
                }
-\r
-               public new bool CausesValidation\r
-               {\r
-                       get { return base.CausesValidation; }
-                       set {
-                               if (base.CausesValidation == value)
-                                       return;
 
-                               CausesValidation = value;
-                               if (CausesValidationChanged != null)
-                                       CausesValidationChanged (this, new EventArgs ());
-                       }
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new bool CausesValidation
+               {
+                       get { return base.CausesValidation; }
+                       set { base.CausesValidation = value; }
                }
 
-               protected override CreateParams CreateParams\r
+               protected override CreateParams CreateParams
                {
                        get { return base.CreateParams; }
                }
 
-               protected override ImeMode DefaultImeMode\r
+               protected override ImeMode DefaultImeMode
                {
                        get { return base.DefaultImeMode; }
                }
 
-               protected override Size DefaultSize\r
+               protected override Size DefaultSize
                {
                        get { return ThemeEngine.Current.ProgressBarDefaultSize; }
                }
 
-               // Setting this property in MS .Net 1.1 does not have any visual effect and it\r
-               // does not fires a FontChanged event
-               public override Font Font\r
+               // Setting this property in MS .Net 1.1 does not have any visual effect and it
+               // does not fire a FontChanged event
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override Font Font
                {
                        get { return base.Font; }
                        set { base.Font = value; }
                }
 
-               // Setting this property in MS .Net 1.1 does not have any visual effect and it\r
-               // does not fires a FontChanged event
-               public override Color ForeColor\r
+               // Setting this property in MS .Net 1.1 does not have any visual effect and it
+               // does not fire a FontChanged event
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override Color ForeColor
                {
                        get { return base.ForeColor; }
                        set { base.ForeColor = value; }
                }
 
-               public new ImeMode ImeMode\r
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new ImeMode ImeMode
                {
                        get { return base.ImeMode; }
-                       set\r
-                       {
-                               if (value == base.ImeMode)
-                                       return;
-
-                               base.ImeMode = value;
-                               if (ImeModeChanged != null)
-                                       ImeModeChanged (this, EventArgs.Empty);
-                       }
+                       set { base.ImeMode = value; }
                }
 
-               public int Maximum\r
+               [RefreshProperties(RefreshProperties.Repaint)]
+               [DefaultValue (100)]
+               public int Maximum
                {
                        get {
                                return maximum;
@@ -177,6 +292,8 @@ namespace System.Windows.Forms
                        }
                }
 
+               [RefreshProperties(RefreshProperties.Repaint)]
+               [DefaultValue (0)]
                public int Minimum {
                        get {
                                return minimum;
@@ -191,22 +308,16 @@ namespace System.Windows.Forms
                        }
                }
 
-               public override RightToLeft RightToLeft\r
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public override RightToLeft RightToLeft
                {
                        get { return base.RightToLeft; }
-                       set {
-                               if (base.RightToLeft == value)
-                                       return;
-
-                               base.RightToLeft = value;
-
-                               if (RightToLeftChanged != null)
-                                       RightToLeftChanged (this, EventArgs.Empty);
-
-                       }
+                       set { base.RightToLeft = value; }
                }
 
-               public int Step\r
+               [DefaultValue (10)]
+               public int Step
                {
                        get { return step; }
                        set {
@@ -215,38 +326,59 @@ namespace System.Windows.Forms
                        }
                }
 
-               public new bool TabStop\r
-               {
-                       get { return base.TabStop; }
-                       set {
-                               if (base.TabStop == value)
-                                       return;
-
-                               base.TabStop = value;
+#if NET_2_0
+               [MonoTODO("Currently only implements the 1.1 behavior")]
+               //
+               // This means that we must implement Blocks, Continuous and Marquee
+               // rendering modes
+               //
+               [Browsable (true)]
+               [DefaultValue (ProgressBarStyle.Blocks)]
+               [EditorBrowsable (EditorBrowsableState.Always)]
+               public ProgressBarStyle Style {
+                       get {
+                               return style;
+                       }
 
-                               if (TabStopChanged != null)
-                                       TabStopChanged (this, EventArgs.Empty);
+                       set {
+                               style = value;
+                       }
+               }
+               
+               int marquee_animation_speed = 350;
+               [MonoTODO("Currently does nothing")]
+               [DefaultValue (100)]
+               public int MarqueeAnimationSpeed {
+                       get {
+                               return marquee_animation_speed;
+                       }
 
+                       set {
+                               marquee_animation_speed = value;
                        }
                }
+#endif
 
-               public override string Text\r
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               public new bool TabStop
                {
-                       get { return base.Text; }
-                       set\r
-                       {
-                               if (value == base.Text)
-                                       return;
-
-                               if (TextChanged != null)
-                                       TextChanged (this, EventArgs.Empty);
-
-                               Refresh ();
-                       }
+                       get { return base.TabStop; }
+                       set { base.TabStop = value; }
                }
 
+               [Browsable (false)]
+               [EditorBrowsable (EditorBrowsableState.Never)]
+               [Bindable(false)]
+               public override string Text
+               {
+                       get { return base.Text; }
+                       set { base.Text = value; }
+               }
 
-               public int Value\r
+               [Bindable(true)]
+               [DefaultValue (0)]
+               public int Value
                {
                        get {
                                return val;
@@ -265,7 +397,11 @@ namespace System.Windows.Forms
                #endregion      // Protected Instance Properties
 
                #region Public Instance Methods
-
+               
+               protected override void CreateHandle ()
+               {
+                       base.CreateHandle ();
+               }
 
                public void Increment (int value)
                {
@@ -286,9 +422,6 @@ namespace System.Windows.Forms
                        base.OnHandleCreated (e);
 
                        UpdateAreas ();
-
-                       CreateBuffers (Width, Height);
-                       Draw ();
                }
 
                public void PerformStep ()
@@ -296,16 +429,16 @@ namespace System.Windows.Forms
                        if (Value >= Maximum)
                                return;
 
-                       Value = Value + Step;
-                       Refresh ();
+                       Value = Maximum < Value + Step ? Maximum : Value + Step;
+                       Refresh ();     // FIXME - calculate delta and only expose that
                }
 
                public override string ToString()
                {
                        return string.Format ("{0}, Minimum: {1}, Maximum: {2}, Value: {3}",
                                GetType().FullName.ToString (),
-                               Maximum.ToString (),
                                Minimum.ToString (),
+                               Maximum.ToString (),
                                Value.ToString () );
                }
 
@@ -314,10 +447,6 @@ namespace System.Windows.Forms
                #region Private Instance Methods
                private void UpdateAreas ()
                {
-                       paint_area.X = paint_area.Y = 0;
-                       paint_area.Width = Width;
-                       paint_area.Height = Height;
-
                        client_area.X = client_area.Y = 2;
                        client_area.Width = Width - 4;
                        client_area.Height = Height - 4;
@@ -329,22 +458,13 @@ namespace System.Windows.Forms
                                return;
 
                        UpdateAreas ();
+                       Invalidate();   // Invalidate the full surface, blocks will not match
                }
 
-               private void Draw ()
-               {
-                       ThemeEngine.Current.DrawProgressBar (DeviceContext, this.ClientRectangle, this);
-               }
-
-               private void OnPaintPB (Object o, PaintEventArgs pevent)
+               internal override void OnPaintInternal (PaintEventArgs pevent)
                {
-                       if (Width <= 0 || Height <=  0 || Visible == false)
-                               return;
-
-                       /* Copies memory drawing buffer to screen*/
-                       Draw ();
-                       pevent.Graphics.DrawImage (ImageBuffer, 0, 0);
-               }
+                        ThemeEngine.Current.DrawProgressBar (pevent.Graphics, pevent.ClipRectangle, this);
+               }               
 
                #endregion
        }