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=0fa380b92eb7b9c0bae43e65747c57b1d23625cf;hpb=c4aef31eeea309e6a795c84c098ac8e1a2490340;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 0fa380b92eb..a7f5cfc993b 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ProgressBar.cs @@ -17,96 +17,160 @@ // 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-2005 Novell, Inc. +// Copyright (C) 2004-2006 Novell, Inc. // // Authors: // Jordi Mas i Hernandez jordi@ximian.com +// Peter Dennis Bartok pbartok@novell.com // // - 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 int val; + internal DateTime start = DateTime.Now; internal Rectangle client_area = new Rectangle (); + internal ProgressBarStyle style; + 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; + static object RightToLeftLayoutChangedEvent = new object (); [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler BackgroundImageChanged; + public new event EventHandler BackgroundImageChanged { + add { base.BackgroundImageChanged += value; } + remove { base.BackgroundImageChanged -= value; } + } - [Browsable (false)] - [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler CausesValidationChanged; + [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 DoubleClick; + public new event EventHandler CausesValidationChanged { + add { base.CausesValidationChanged += value; } + remove { base.CausesValidationChanged -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler Enter; + public new event EventHandler DoubleClick { + add { base.DoubleClick += value; } + remove { base.DoubleClick -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler FontChanged; + public new event EventHandler Enter { + add { base.Enter += value; } + remove { base.Enter -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler ForeColorChanged; + public new event EventHandler FontChanged { + add { base.FontChanged += value; } + remove { base.FontChanged -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler ImeModeChanged; + public new event EventHandler ImeModeChanged { + add { base.ImeModeChanged += value; } + remove { base.ImeModeChanged -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event KeyEventHandler KeyDown; + public new event KeyEventHandler KeyDown { + add { base.KeyDown += value; } + remove { base.KeyDown -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event KeyPressEventHandler KeyPress; + public new event KeyPressEventHandler KeyPress { + add { base.KeyPress += value; } + remove { base.KeyPress -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event KeyEventHandler KeyUp; + public new event KeyEventHandler KeyUp { + add { base.KeyUp += value; } + remove { base.KeyUp -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler Leave; + public new event EventHandler Leave { + add { base.Leave += value; } + remove { base.Leave -= value; } + } - [Browsable (false)] - [EditorBrowsable (EditorBrowsableState.Never)] - public new event PaintEventHandler Paint; + [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 EventHandler RightToLeftChanged; + public new event PaintEventHandler Paint { + add { base.Paint += value; } + remove { base.Paint -= value; } + } + + public event EventHandler RightToLeftLayoutChanged { + add { Events.AddHandler (RightToLeftLayoutChangedEvent, value); } + remove { Events.RemoveHandler (RightToLeftLayoutChangedEvent, value); } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler TabStopChanged; + public new event EventHandler TabStopChanged { + add { base.TabStopChanged += value; } + remove { base.TabStopChanged -= value; } + } [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] - public new event EventHandler TextChanged; + public new event EventHandler TextChanged { + add { base.TextChanged += value; } + remove { base.TextChanged -= value; } + } #endregion Events #region Public Constructors @@ -117,13 +181,18 @@ namespace System.Windows.Forms step = 10; val = 0; - base.Paint += new PaintEventHandler (OnPaintPB); base.Resize += new EventHandler (OnResizeTB); SetStyle (ControlStyles.UserPaint | ControlStyles.Selectable | ControlStyles.ResizeRedraw | - ControlStyles.Opaque, false); + ControlStyles.Opaque | + ControlStyles.UseTextForAccessibility + , false); + + force_double_buffer = true; + + ForeColor = defaultForeColor; } #endregion // Public Constructors @@ -139,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)] @@ -159,19 +218,19 @@ 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 { get { return base.CausesValidation; } - set { - if (base.CausesValidation == value) - return; - - base.CausesValidation = value; - if (CausesValidationChanged != null) - CausesValidationChanged (this, new EventArgs ()); - } + set { base.CausesValidation = value; } } protected override CreateParams CreateParams @@ -189,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)] @@ -214,15 +269,7 @@ namespace System.Windows.Forms public new ImeMode ImeMode { get { return base.ImeMode; } - set - { - if (value == base.ImeMode) - return; - - base.ImeMode = value; - if (ImeModeChanged != null) - ImeModeChanged (this, EventArgs.Empty); - } + set { base.ImeMode = value; } } [RefreshProperties(RefreshProperties.Repaint)] @@ -234,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 (); } } @@ -250,29 +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 { - if (base.RightToLeft == value) - return; - - base.RightToLeft = value; - - if (RightToLeftChanged != null) - RightToLeftChanged (this, EventArgs.Empty); - - } + [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)] @@ -285,21 +340,61 @@ namespace System.Windows.Forms } } + [Browsable (true)] + [DefaultValue (ProgressBarStyle.Blocks)] + [EditorBrowsable (EditorBrowsableState.Always)] + public ProgressBarStyle Style { + get { + return style; + } + + set { + 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; + } + } + [Browsable (false)] [EditorBrowsable (EditorBrowsableState.Never)] public new bool TabStop { get { return base.TabStop; } - set { - if (base.TabStop == value) - return; - - base.TabStop = value; - - if (TabStopChanged != null) - TabStopChanged (this, EventArgs.Empty); - - } + set { base.TabStop = value; } } [Browsable (false)] @@ -308,16 +403,7 @@ namespace System.Windows.Forms public override string Text { get { return base.Text; } - set - { - if (value == base.Text) - return; - - if (TextChanged != null) - TextChanged (this, EventArgs.Empty); - - Refresh (); - } + set { base.Text = value; } } [Bindable(true)] @@ -329,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 (); } @@ -349,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) @@ -368,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 = Value + Step; - Refresh (); + 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; @@ -397,18 +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 + } - private void OnPaintPB (Object o, PaintEventArgs pevent) + internal override void OnPaintInternal (PaintEventArgs pevent) { - ThemeEngine.Current.DrawProgressBar (pevent.Graphics, pevent.ClipRectangle, this); - } - + ThemeEngine.Current.DrawProgressBar (pevent.Graphics, pevent.ClipRectangle, this); + } + #endregion } }