// 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
//
//
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
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;
}
}
+ [RefreshProperties(RefreshProperties.Repaint)]
+ [DefaultValue (0)]
public int Minimum {
get {
return minimum;
}
}
- 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 {
}
}
- 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;
#endregion // Protected Instance Properties
#region Public Instance Methods
-
+
+ protected override void CreateHandle ()
+ {
+ base.CreateHandle ();
+ }
public void Increment (int value)
{
base.OnHandleCreated (e);
UpdateAreas ();
-
- CreateBuffers (Width, Height);
- Draw ();
}
public void PerformStep ()
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 () );
}
#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;
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
}