X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FManaged.Windows.Forms%2FSystem.Windows.Forms%2FProgressBar.cs;h=a7f5cfc993b19288ce9ab3222420971c2a024523;hb=444495ff9c9f9371046e50a0ac98a822cfae7762;hp=a9d25883cee181112e27f1885e76584a1e70dd4e;hpb=2007998771b1c4d9e762943676d7959daaf74385;p=mono.git diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs index a9d25883cee..a7f5cfc993b 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs @@ -25,35 +25,35 @@ // // - using System.Drawing; using System.ComponentModel; using System.Drawing.Imaging; using System.Drawing.Drawing2D; +using System.Runtime.InteropServices; namespace System.Windows.Forms { [DefaultProperty ("Value")] - public sealed class ProgressBar : Control + [DefaultBindingProperty ("Value")] + [ClassInterface (ClassInterfaceType.AutoDispatch)] + [ComVisible (true)] + public class ProgressBar : Control { #region Local Variables private int maximum; private int minimum; internal int step; internal int val; + internal DateTime start = DateTime.Now; internal Rectangle client_area = new Rectangle (); -#if NET_2_0 internal ProgressBarStyle style; -#endif + Timer marquee_timer; + bool right_to_left_layout; + private static readonly Color defaultForeColor = SystemColors.Highlight; #endregion // Local Variables #region events - [Browsable (false)] - [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler BackColorChanged { - add { base.BackColorChanged += value; } - remove { base.BackColorChanged -= value; } - } + static object RightToLeftLayoutChangedEvent = new object (); [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] @@ -62,6 +62,13 @@ namespace System.Windows.Forms remove { base.BackgroundImageChanged -= value; } } + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler BackgroundImageLayoutChanged { + add { base.BackgroundImageLayoutChanged += value; } + remove { base.BackgroundImageLayoutChanged -= value; } + } + [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] public new event EventHandler CausesValidationChanged { @@ -90,13 +97,6 @@ namespace System.Windows.Forms 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 { @@ -132,6 +132,20 @@ namespace System.Windows.Forms remove { base.Leave -= value; } } + [EditorBrowsable(EditorBrowsableState.Never)] + [Browsable(false)] + public new event MouseEventHandler MouseDoubleClick { + add { base.MouseDoubleClick += value; } + remove { base.MouseDoubleClick -= value; } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler PaddingChanged { + add { base.PaddingChanged += value; } + remove { base.PaddingChanged -= value; } + } + [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] public new event PaintEventHandler Paint { @@ -139,11 +153,9 @@ namespace System.Windows.Forms remove { base.Paint -= value; } } - [Browsable (false)] - [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler RightToLeftChanged { - add { base.RightToLeftChanged += value; } - remove { base.RightToLeftChanged -= value; } + public event EventHandler RightToLeftLayoutChanged { + add { Events.AddHandler (RightToLeftLayoutChangedEvent, value); } + remove { Events.RemoveHandler (RightToLeftLayoutChangedEvent, value); } } [Browsable (false)] @@ -174,7 +186,13 @@ namespace System.Windows.Forms SetStyle (ControlStyles.UserPaint | ControlStyles.Selectable | ControlStyles.ResizeRedraw | - ControlStyles.Opaque, false); + ControlStyles.Opaque | + ControlStyles.UseTextForAccessibility + , false); + + force_double_buffer = true; + + ForeColor = defaultForeColor; } #endregion // Public Constructors @@ -190,16 +208,6 @@ namespace System.Windows.Forms } } - // 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 { base.BackColor = value; } - } - // Setting this property in MS .Net 1.1 does not have any visual effect and it // does not fire a BackgroundImageChanged event [Browsable (false)] @@ -210,6 +218,13 @@ namespace System.Windows.Forms set { base.BackgroundImage = value; } } + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override ImageLayout BackgroundImageLayout { + get { return base.BackgroundImageLayout; } + set { base.BackgroundImageLayout = value; } + } + [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] public new bool CausesValidation @@ -233,24 +248,20 @@ namespace System.Windows.Forms get { return ThemeEngine.Current.ProgressBarDefaultSize; } } - // 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; } + [EditorBrowsable(EditorBrowsableState.Never)] + protected override bool DoubleBuffered { + get { return base.DoubleBuffered; } + set { base.DoubleBuffered = value; } } // 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 + public override Font Font { - get { return base.ForeColor; } - set { base.ForeColor = value; } + get { return base.Font; } + set { base.Font = value; } } [Browsable (false)] @@ -270,10 +281,12 @@ namespace System.Windows.Forms } set { if (value < 0) - throw new ArgumentException( + throw new ArgumentOutOfRangeException ("Maximum", string.Format("Value '{0}' must be greater than or equal to 0.", value )); maximum = value; + minimum = Math.Min (minimum, maximum); + val = Math.Min (val, maximum); Refresh (); } } @@ -286,20 +299,35 @@ namespace System.Windows.Forms } set { if (value < 0) - throw new ArgumentException( + throw new ArgumentOutOfRangeException ("Minimum", string.Format("Value '{0}' must be greater than or equal to 0.", value )); minimum = value; + maximum = Math.Max (maximum, minimum); + val = Math.Max (val, minimum); Refresh (); } } - [Browsable (false)] - [EditorBrowsable (EditorBrowsableState.Never)] - public override RightToLeft RightToLeft - { - get { return base.RightToLeft; } - set { base.RightToLeft = value; } + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new Padding Padding { + get { return base.Padding; } + set { base.Padding = value; } + } + + [Localizable(true)] + [DefaultValue(false)] + [MonoTODO ("RTL is not supported")] + public virtual bool RightToLeftLayout { + get { return right_to_left_layout;} + set { + if (right_to_left_layout != value) { + right_to_left_layout = value; + OnRightToLeftLayoutChanged (EventArgs.Empty); + } + } } [DefaultValue (10)] @@ -312,18 +340,54 @@ namespace System.Windows.Forms } } -#if NET_2_0 - [MonoTODO("Implement")] + [Browsable (true)] + [DefaultValue (ProgressBarStyle.Blocks)] + [EditorBrowsable (EditorBrowsableState.Always)] public ProgressBarStyle Style { get { return style; } set { - style = value; + if (value != ProgressBarStyle.Blocks && value != ProgressBarStyle.Continuous + && value != ProgressBarStyle.Marquee) + throw new InvalidEnumArgumentException ("value", unchecked((int)value), typeof (ProgressBarStyle)); + if (style != value) { + style = value; + + if (style == ProgressBarStyle.Marquee) { + if (marquee_timer == null) { + marquee_timer = new Timer (); + marquee_timer.Interval = 10; + marquee_timer.Tick += new EventHandler (marquee_timer_Tick); + } + marquee_timer.Start (); + } else { + if (marquee_timer != null) { + marquee_timer.Stop (); + } + Refresh (); + } + } + } + } + + void marquee_timer_Tick (object sender, EventArgs e) + { + Invalidate (); + } + + int marquee_animation_speed = 100; + [DefaultValue (100)] + public int MarqueeAnimationSpeed { + get { + return marquee_animation_speed; + } + + set { + marquee_animation_speed = value; } } -#endif [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] @@ -351,9 +415,7 @@ namespace System.Windows.Forms } set { if (value < Minimum || value > Maximum) - throw new ArgumentException( - string.Format("'{0}' is not a valid value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'", value)); - + throw new ArgumentOutOfRangeException ("Value", string.Format("'{0}' is not a valid value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'", value)); val = value; Refresh (); } @@ -371,6 +433,9 @@ namespace System.Windows.Forms public void Increment (int value) { + if (Style == ProgressBarStyle.Marquee) + throw new InvalidOperationException ("Increment should not be called if the style is Marquee."); + int newValue = Value + value; if (newValue < Minimum) @@ -390,27 +455,56 @@ namespace System.Windows.Forms UpdateAreas (); } + protected override void OnBackColorChanged (EventArgs e) + { + base.OnBackColorChanged (e); + } + + protected override void OnForeColorChanged (EventArgs e) + { + base.OnForeColorChanged (e); + } + + protected override void OnHandleDestroyed (EventArgs e) + { + base.OnHandleDestroyed (e); + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + protected virtual void OnRightToLeftLayoutChanged(EventArgs e) + { + EventHandler eh = (EventHandler) Events [RightToLeftLayoutChangedEvent]; + if (eh != null) + eh (this, e); + } + public void PerformStep () { - if (Value >= Maximum) - return; + if (Style == ProgressBarStyle.Marquee) + throw new InvalidOperationException ("PerformStep should not be called if the style is Marquee."); - Value = Maximum < Value + Step ? Maximum : Value + Step; - Refresh (); // FIXME - calculate delta and only expose that + Increment (Step); + } + + [EditorBrowsable (EditorBrowsableState.Never)] + public override void ResetForeColor () + { + ForeColor = defaultForeColor; } public override string ToString() { return string.Format ("{0}, Minimum: {1}, Maximum: {2}, Value: {3}", - GetType().FullName.ToString (), - Maximum.ToString (), + GetType().FullName, Minimum.ToString (), + Maximum.ToString (), Value.ToString () ); } #endregion // Public Instance Methods #region Private Instance Methods + private void UpdateAreas () { client_area.X = client_area.Y = 2; @@ -419,19 +513,19 @@ namespace System.Windows.Forms } private void OnResizeTB (Object o, EventArgs e) - { - if (Width <= 0 || Height <= 0) - return; + { + if (Width <= 0 || Height <= 0) + return; UpdateAreas (); Invalidate(); // Invalidate the full surface, blocks will not match - } + } internal override void OnPaintInternal (PaintEventArgs pevent) { - ThemeEngine.Current.DrawProgressBar (pevent.Graphics, pevent.ClipRectangle, this); - } - + ThemeEngine.Current.DrawProgressBar (pevent.Graphics, pevent.ClipRectangle, this); + } + #endregion } }