[Mono-winforms-list] ProgressBar and DateTimePicker (patch)

Aleksey Ryabchuk ryabchuk@yahoo.com
Fri, 21 Mar 2003 09:15:54 -0800 (PST)


--0-477702749-1048266954=:89192
Content-Type: text/plain; charset=us-ascii
Content-Id: 
Content-Disposition: inline

Implementation of ProgressBar and DateTimePicker
controls.

ProgressBar.cs
DateTimePicker.cs
win32Enums.cs
win32Structs.cs
form.cs

Regards
ary



__________________________________________________
Do you Yahoo!?
Yahoo! Platinum - Watch CBS' NCAA March Madness, live on your desktop!
http://platinum.yahoo.com
--0-477702749-1048266954=:89192
Content-Type: text/plain; name=patch
Content-Description: patch
Content-Disposition: inline; filename=patch

Index: DateTimePicker.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/DateTimePicker.cs,v
retrieving revision 1.9
diff -u -r1.9 DateTimePicker.cs
--- DateTimePicker.cs	4 Dec 2002 01:35:40 -0000	1.9
+++ DateTimePicker.cs	21 Mar 2003 17:08:58 -0000
@@ -4,10 +4,14 @@
 // Author:
 //   stubbed out by Richard Baumann (biochem333@nyc.rr.com)
 //   Dennis Hayes (dennish@Raytek.com)
+//   Aleksey Ryabchuk (ryabchuk@yahoo.com)
 //
 // (C) Ximian, Inc., 2002
 //
 using System.Drawing;
+using System.ComponentModel;
+using System.Runtime.InteropServices;
+
 namespace System.Windows.Forms {
 
 	// <summary>
@@ -47,7 +51,7 @@
 		private int preferredHeight;
 		private bool showCheckBox;
 		private bool showUpDown;
-		private DateTime value;
+		private DateTime val;
 
 		//
 		//  --- Constructors/Destructors
@@ -57,6 +61,7 @@
 		public DateTimePicker() : base()
 		{
 			// defaults :)
+			calendarFont = Control.DefaultFont;
 			calendarForeColor = ForeColor;
 			calendarMonthBackground = DefaultMonthBackColor;
 			calendarTitleBackColor = DefaultTitleBackColor;
@@ -70,6 +75,8 @@
 			minDate = MinDateTime;
 			showCheckBox = false;
 			showUpDown = false;
+			val = DateTime.Now;
+			Size = DefaultSize;
 		}
 
 		[MonoTODO]
@@ -109,7 +116,7 @@
 		[MonoTODO]
 		protected override void CreateHandle()
 		{
-			//FIXME: Just to get it running
+			initCommonControlsLibrary();
 			base.CreateHandle();
 		}
 
@@ -127,22 +134,14 @@
 			return base.IsInputKey(keyData);
 		}
 
-		[MonoTODO]
-		protected virtual void OnCloseUp(EventArgs e)
-		{
-			if (CloseUp != null) {
-
-				CloseUp(this, e);
-			}
+		protected virtual void OnCloseUp(EventArgs e) {
+			if ( CloseUp != null ) 
+				CloseUp( this, e );
 		}
 
-		[MonoTODO]
-		protected virtual void OnDropDown(EventArgs e)
-		{
-			if (DropDown != null) {
-
-				DropDown(this, e);
-			}
+		protected virtual void OnDropDown(EventArgs e)	{
+			if ( DropDown != null )
+				DropDown( this, e );
 		}
 
 		[MonoTODO]
@@ -154,31 +153,33 @@
 			//}
 		}
 
-		[MonoTODO]
-		protected virtual void OnFormatChanged(EventArgs e)
-		{
-			if (FormatChanged != null) {
-
+		protected virtual void OnFormatChanged(EventArgs e) {
+			if (FormatChanged != null)
 				FormatChanged(this, e);
-			}
 		}
 
 		[MonoTODO]
 		protected override void OnSystemColorsChanged(EventArgs e)
 		{
-			//FIXME:
+			//FIXME: update default colors
 			//if (SystemColorsChanged != null) {
 			//	SystemColorsChanged(this, e);
 			//}
+			base.OnSystemColorsChanged( e );
 		}
 
-		[MonoTODO]
-		protected virtual void OnValueChanged(EventArgs e)
-		{
-			if (ValueChanged != null) {
+		protected override void OnHandleCreated(EventArgs e) {
+			base.OnHandleCreated(e);
+			setControlRange( (int)( DateTimePickerFlags.GDTR_MIN | DateTimePickerFlags.GDTR_MAX ) );
+			setControlValue( );
+			setCalendarColors( );
+			setCustomFormat( );
+			setCalendarFont( );
+		}
 
+		protected virtual void OnValueChanged(EventArgs e) {
+			if (ValueChanged != null) 
 				ValueChanged(this, e);
-			}
 		}
 
 		[MonoTODO]
@@ -201,174 +202,178 @@
 		public event EventHandler CloseUp;
 		public event EventHandler DropDown;
 		public event EventHandler FormatChanged;
-		//public new event PaintEventHandler Paint; // This event is internal to the .NET framework.
 		public event EventHandler ValueChanged;
 
 		
 		//  --- Public Properties
 		
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override Color BackColor {
-
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				//FIXME:
-			}
+			get {	return base.BackColor;	}
+			set {	base.BackColor = value; }
 		}
 
-		[MonoTODO]
-		public override Image BackgroundImage {
-
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				//FIXME:
-			}
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
+		public override Image BackgroundImage 	{
+			get {	return base.BackgroundImage; }
+			set {	base.BackgroundImage = value;}
 		}
 
-		[MonoTODO]
 		public Font CalendarFont {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarFont; }
 			set {
-				//FIXME:
+				calendarFont = value;
+				setCalendarFont( );
 			}
 		}
 
-		[MonoTODO]
 		public Color CalendarForeColor {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarForeColor; }
 			set {
-				//FIXME:
+				if ( calendarForeColor != value ) {
+					calendarForeColor = value;
+					setCalendarColor( (int) MonthCalColors.MCSC_TEXT, value );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public Color CalendarMonthBackground {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarMonthBackground; }
 			set {
-				//FIXME:
+				if ( calendarMonthBackground != value ) {
+					calendarMonthBackground = value;
+					setCalendarColor( (int) MonthCalColors.MCSC_MONTHBK, value );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public Color CalendarTitleBackColor {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarTitleBackColor; }
 			set {
-				//FIXME:
+				if ( calendarTitleBackColor != value ) {
+					calendarTitleBackColor = value;
+					setCalendarColor( (int) MonthCalColors.MCSC_TITLEBK, value );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public Color CalendarTitleForeColor {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarTitleForeColor; }
 			set {
-				//FIXME:
+				if ( calendarTitleForeColor != value ) 	{
+					calendarTitleForeColor = value;
+					setCalendarColor( (int) MonthCalColors.MCSC_TITLETEXT, value );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public Color CalendarTrailingForeColor {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return calendarTrailingForeColor; }
 			set {
-				//FIXME:
+				if ( calendarTrailingForeColor != value ) {
+					calendarTrailingForeColor = value;
+					setCalendarColor( (int) MonthCalColors.MCSC_TRAILINGTEXT, value );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public bool Checked {
-
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				//FIXME:
+			get {	
+				if ( ShowCheckBox )
+					getControlValue ( false ); // don't actually update the Value property
+				return CHecked;
+			}
+			set {	
+				CHecked = value;
+				if ( ShowCheckBox )
+					setCheckState ( );
 			}
 		}
 
-		[MonoTODO]
 		public string CustomFormat {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return customFormat; }
 			set {
-				//FIXME:
+				customFormat = value;
+				setCustomFormat ( );
 			}
 		}
 
-		[MonoTODO]
-		public LeftRightAlignment DropDownAlign {
+		public LeftRightAlignment DropDownAlign 
+		{
+			get {	return dropDownAlign; }
+			set {	
+				if ( !Enum.IsDefined ( typeof(LeftRightAlignment), value ) )
+					throw new InvalidEnumArgumentException( "DropDownAlign",
+						(int)value,
+						typeof(LeftRightAlignment));
 
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				//FIXME:
+				if ( dropDownAlign != value ) {
+					dropDownAlign = value;
+					if ( IsHandleCreated )
+						RecreateHandle();
+				}
 			}
 		}
 
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]
 		public override Color ForeColor {
-			//FIXME: Just to get it to run
-			get {
-				return base.ForeColor;
-			}
-			set {
-				base.ForeColor = value;
-			}
+			get {	return base.ForeColor;	}
+			set {	base.ForeColor = value;	}
 		}
 
-		[MonoTODO]
 		public DateTimePickerFormat Format {
-
-			get {
-				throw new NotImplementedException (); 
-			}
+			get {	return format;	}
 			set {
-				//FIXME:
+				if ( !Enum.IsDefined ( typeof(DateTimePickerFormat), value ) )
+					throw new InvalidEnumArgumentException( "Format",
+						(int)value,
+						typeof(DateTimePickerFormat));
+
+				if ( format != value ) {
+					int StyleToRemove = formatStyle ( format );
+					format = value;
+					if ( IsHandleCreated )
+						Win32.UpdateWindowStyle ( Handle, StyleToRemove, formatStyle ( format ) );
+					OnFormatChanged( EventArgs.Empty );
+				}
 			}
 		}
 
-		[MonoTODO]
 		public DateTime MaxDate {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return maxDate; }
 			set {
-				//FIXME:
+				if ( value == maxDate )
+					return;
+				
+				if ( value < MinDate )
+					throw new ArgumentException (
+						string.Format ("'{0}' is not a valid value for 'MaxDate'. 'MaxDate'  must be greater than or equal to MinDate", value ) );
+
+				if ( value > MaxDateTime )
+					throw new ArgumentException (
+						string.Format ("DateTimePicker does not support dates after {0}.", MaxDateTime ) );
+
+				maxDate = value;
+				setControlRange	( (int)DateTimePickerFlags.GDTR_MAX );
 			}
 		}
 
-		[MonoTODO]
 		public DateTime MinDate {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return minDate;	}
 			set {
-				//FIXME:
+				if ( value == minDate )
+					return;
+
+				if ( value >= MaxDate )
+					throw new ArgumentException (
+					string.Format ("'{0}' is not a valid value for 'MinDate'. 'MinDate' must be less than MaxDate.", value ) );
+
+				if ( value < MinDateTime )
+					throw new ArgumentException (
+					string.Format ("DateTimePicker does not support dates before {0}.", MinDateTime ) );
+
+				minDate = value;
+				setControlRange	( (int)DateTimePickerFlags.GDTR_MIN );
 			}
 		}
 
@@ -379,47 +384,46 @@
 			}
 		}
 
-		[MonoTODO]
 		public bool ShowCheckBox {
-
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return showCheckBox; }
 			set {
-				//FIXME:
+				if ( showCheckBox != value ) {
+					showCheckBox = value;
+					if ( IsHandleCreated )
+						RecreateHandle();
+				}
 			}
 		}
 
-		[MonoTODO]
 		public bool ShowUpDown {
-
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				//FIXME:
+			get {	return showUpDown; }
+			set {	
+				if ( showUpDown != value ) {
+					showUpDown = value;
+					if ( IsHandleCreated )
+						RecreateHandle();
+				}
 			}
 		}
 
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]
 		public override string Text {
-			//FIXME: just to get it to run
-			get {
-				return base.Text;
-			}
-			set {
-				base.Text = value;
-			}
+			get {	return base.Text; }
+			set {	base.Text = value;}
 		}
 
 		[MonoTODO]
 		public DateTime Value {
-
 			get {
-				throw new NotImplementedException ();
+				getControlValue( true );
+				return val;
 			}
 			set {
-				//FIXME:
+				if ( val != value ) {
+					val = value; // do we need to check that the value is in the range ?
+					setControlValue( );
+					OnValueChanged ( EventArgs.Empty );
+				}
 			}
 		}
 
@@ -429,31 +433,177 @@
 		[MonoTODO]
 		protected override CreateParams CreateParams {
 			get {
-				CreateParams createParams = new CreateParams ();
-				window = new ControlNativeWindow (this);
+				if ( Parent != null ) {
+					CreateParams createParams = new CreateParams ();
 
-				createParams.Caption = Text;
-				createParams.ClassName = "DATETIMEPICKER";
-				createParams.X = Left;
-				createParams.Y = Top;
-				createParams.Width = Width;
-				createParams.Height = Height;
-				createParams.ClassStyle = 0;
-				createParams.ExStyle = 0;
-				createParams.Param = 0;
-				//			createParams.Parent = Parent.Handle;
-				createParams.Style = (int) (
-					WindowStyles.WS_CHILD | 
-					WindowStyles.WS_VISIBLE);
-				window.CreateHandle (createParams);
-				return createParams;
+					createParams.Caption = Text;
+					createParams.ClassName = "SysDateTimePick32";
+					createParams.X = Left;
+					createParams.Y = Top;
+					createParams.Width = Width;
+					createParams.Height = Height;
+					createParams.ClassStyle = 0;
+					createParams.ExStyle = 0;
+					createParams.Param = 0;
+					createParams.Parent = Parent.Handle;
+					createParams.Style = (int) (
+						WindowStyles.WS_CHILDWINDOW | 
+						WindowStyles.WS_VISIBLE |
+						WindowStyles.WS_CLIPCHILDREN|
+						WindowStyles.WS_CLIPSIBLINGS);
+					
+					if ( ShowUpDown )
+						createParams.Style |= (int) DateTimePickerControlStyles.DTS_UPDOWN;
+
+					if ( ShowCheckBox )
+						createParams.Style |= (int) DateTimePickerControlStyles.DTS_SHOWNONE;
+
+					if ( DropDownAlign == LeftRightAlignment.Right )
+						createParams.Style |= (int) DateTimePickerControlStyles.DTS_RIGHTALIGN;
+
+					createParams.Style |= formatStyle ( Format );
+
+					return createParams;
+				}
+				return null;
 			}		
 		}
 
 		protected override Size DefaultSize {
-			get{
-				return new System.Drawing.Size(200,20);//correct size.
+			get{	return new System.Drawing.Size(200,20);	}
+		}
+
+		private void initCommonControlsLibrary	( ) {
+			if ( !RecreatingHandle ) {
+				INITCOMMONCONTROLSEX	initEx = new INITCOMMONCONTROLSEX();
+				initEx.dwICC = CommonControlInitFlags.ICC_DATE_CLASSES;
+				Win32.InitCommonControlsEx(initEx);
+			}
+		}
+
+		private SYSTIME toSysTime ( DateTime val ) {
+			SYSTIME systime = new SYSTIME() ;
+			systime.wDay = (ushort)val.Day;
+			systime.wHour = (ushort)val.Hour;
+			systime.wMilliseconds = (ushort)val.Millisecond;
+			systime.wMinute = (ushort)val.Minute;
+			systime.wMonth = (ushort)val.Month;
+			systime.wSecond = (ushort)val.Second;
+			systime.wYear = (ushort)val.Year;
+			return systime;
+		}
+
+		private DateTime toDateTime ( ref SYSTIME val ) {
+			return new DateTime(	val.wYear, val.wMonth, val.wDay,
+						val.wHour, val.wMinute, val.wSecond,
+						val.wMilliseconds );
+		}
+
+		private void setControlValue ( ) {
+			if ( IsHandleCreated ) 	{
+				SYSTIME systime = toSysTime ( Value ) ;
+
+				IntPtr ptr = Marshal.AllocCoTaskMem ( Marshal.SizeOf ( systime ) );
+				Marshal.StructureToPtr( systime, ptr, false );
+				Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_SETSYSTEMTIME,
+							(int)DateTimePickerFlags.GDT_VALID, ptr );
+				Marshal.FreeCoTaskMem( ptr );
+			}
+		}
+
+		private void setCheckState ( ) {
+			if ( Checked )
+				setControlValue ();
+			else {
+				if ( IsHandleCreated ) 	{
+					Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_SETSYSTEMTIME,
+						(int)DateTimePickerFlags.GDT_NONE, 0 );
+				}
+			}
+		}
+
+		private void getControlValue ( bool updateProp ) {
+			if ( IsHandleCreated ) 	{
+				SYSTIME systime = new SYSTIME();
+				IntPtr ptr = Marshal.AllocCoTaskMem ( Marshal.SizeOf ( systime ) );
+				Marshal.StructureToPtr( systime, ptr, false );
+				int res = Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_GETSYSTEMTIME,
+							      0	, ptr ).ToInt32();
+				if ( res == (int)DateTimePickerFlags.GDT_VALID ) {
+					systime = Marshal.PtrToStructure ( ptr, systime.GetType ( ) ) as SYSTIME;
+					DateTime newValue = toDateTime ( ref systime );
+
+					CHecked = !( newValue == val || newValue == DateTime.Now );
+
+					if ( updateProp )
+						val = newValue;
+				}
+				else
+					CHecked = false;
+				Marshal.FreeCoTaskMem( ptr );
+			}
+		}
+
+		private void setControlRange ( int rangeFlag ) {
+			if ( IsHandleCreated ) {
+				SYSTIME[] range = { toSysTime ( MinDate ), toSysTime ( MaxDate ) };
+				IntPtr buffer = Marshal.AllocCoTaskMem( Marshal.SizeOf( range[0] ) * 2 );
+				IntPtr current = buffer;
+				Marshal.StructureToPtr ( range[0], current, false );
+				current = (IntPtr)( current.ToInt32() + Marshal.SizeOf( range[0] ) );
+				Marshal.StructureToPtr ( range[1], current, false );
+				Win32.SendMessage( Handle, (int)DateTimePickerMessages.DTM_SETRANGE, rangeFlag, buffer.ToInt32() );
+				Marshal.FreeCoTaskMem( buffer );
 			}
+		}
+
+		private void setCalendarColor ( int ColorFlag, Color clr ) {
+			if ( IsHandleCreated )
+				Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_SETMCCOLOR, ColorFlag, Win32.RGB(clr) );
+		}
+
+		private void setCalendarColors ( ) {
+			if ( calendarForeColor != ForeColor )
+				setCalendarColor( (int) MonthCalColors.MCSC_TEXT, calendarForeColor );
+			if ( calendarMonthBackground != DefaultMonthBackColor )
+				setCalendarColor( (int) MonthCalColors.MCSC_MONTHBK, calendarMonthBackground );
+			if ( calendarTitleBackColor != DefaultTitleBackColor )
+				setCalendarColor( (int) MonthCalColors.MCSC_TITLEBK, calendarTitleBackColor );
+			if ( calendarTitleForeColor != DefaultTitleForeColor )
+				setCalendarColor( (int) MonthCalColors.MCSC_TITLETEXT, calendarTitleForeColor );
+			if ( calendarTrailingForeColor != DefaultTrailingForeColor )
+				setCalendarColor( (int) MonthCalColors.MCSC_TRAILINGTEXT, calendarTrailingForeColor );
+		}
+
+		private int formatStyle ( DateTimePickerFormat format ) {
+			int style = 0;
+
+			switch ( format ) {
+			case DateTimePickerFormat.Long:
+				style = (int)DateTimePickerControlStyles.DTS_LONGDATEFORMAT;
+			break;
+			case DateTimePickerFormat.Short:
+				style = (int)DateTimePickerControlStyles.DTS_SHORTDATEFORMAT;
+			break;
+			case DateTimePickerFormat.Time:
+				style = (int)DateTimePickerControlStyles.DTS_TIMEFORMAT;
+			break;
+			}
+			return style;
+		}
+
+		private void setCustomFormat ( ) {
+			if ( Format == DateTimePickerFormat.Custom && IsHandleCreated ) 
+				Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_SETFORMATA, 0, CustomFormat );
+		}
+		
+		private void setCalendarFont ( ) {
+			// This code will not work because Font.Equals is not implemented
+			/*
+			if ( IsHandleCreated && !CalendarFont.Equals( Control.DefaultFont ) ) 
+				Win32.SendMessage ( Handle, (int)DateTimePickerMessages.DTM_SETMCFONT,
+							CalendarFont.ToHfont().ToInt32(), 0 );
+			*/
 		}
 	}
 }
Index: Form.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/Form.cs,v
retrieving revision 1.31
diff -u -r1.31 Form.cs
--- Form.cs	20 Mar 2003 23:05:15 -0000	1.31
+++ Form.cs	21 Mar 2003 17:08:59 -0000
@@ -565,7 +565,7 @@
     		protected override CreateParams CreateParams {
     			get {
 				CreateParams pars = base.CreateParams;
-				pars.Style |= (int)( WindowStyles.WS_OVERLAPPEDWINDOW | 
+				pars.Style |= (int)( WindowStyles.WS_OVERLAPPEDWINDOW | 
 							WindowStyles.WS_CLIPSIBLINGS /* |
 							WindowStyles.WS_CLIPCHILDREN */);
 				// should have WS_CLIPCHILDREN style but there are
@@ -652,6 +652,7 @@
     
     		protected override void OnCreateControl ()
     		{
+			OnLoad ( EventArgs.Empty );
     			base.OnCreateControl ();
     		}
     
Index: ProgressBar.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/ProgressBar.cs,v
retrieving revision 1.6
diff -u -r1.6 ProgressBar.cs
--- ProgressBar.cs	6 Feb 2003 03:45:10 -0000	1.6
+++ ProgressBar.cs	21 Mar 2003 17:08:59 -0000
@@ -4,6 +4,7 @@
 // Author:
 //   stubbed out by Jaak Simm (jaaksimm@firm.ee)
 //   Dennis Hayes (dennish@Raytek.com)
+//   Aleksey Ryabchuk (ryabchuk@yahoo.com)
 //
 // (C) Ximian, Inc., 2002
 //
@@ -16,63 +17,42 @@
 
 	/// <summary>
 	/// Represents a Windows progress bar control.
-	///
 	/// </summary>
 
-	[MonoTODO]
 	public sealed class ProgressBar : Control {
 
 		#region Fields
-		int maximum;
-		int minimum;
-		int step;
-		int value;
+		int maximum = 100;
+		int minimum = 0;
+		int step    = 10;
+		int val     = 0;
 		#endregion
 		
 		#region Constructor
-		[MonoTODO]
-		public ProgressBar() 
-		{
-			maximum = 100;
-			minimum = 0;
-			step = 10;
-			value = 0;
-
-			INITCOMMONCONTROLSEX	initEx = new INITCOMMONCONTROLSEX();
-			initEx.dwICC = CommonControlInitFlags.ICC_PROGRESS_CLASS;
-			Win32.InitCommonControlsEx(initEx);
+
+		public ProgressBar() {
 		}
+
 		#endregion
 		
 		#region Properties
-		[MonoTODO]
+		
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override bool AllowDrop {
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				throw new NotImplementedException ();
-			}
+			get {	return base.AllowDrop;	}
+			set {	base.AllowDrop = value;	}
 		}
 		
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override Color BackColor {
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				throw new NotImplementedException ();
-			}
+			get {	return base.BackColor;	}
+			set {	base.BackColor = value;	}
 		}
 		
-		[MonoTODO]
-		public override Image BackgroundImage {
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				throw new NotImplementedException (); 
-			}
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
+		public override Image BackgroundImage 	{
+			get {	return base.BackgroundImage; }
+			set {	base.BackgroundImage = value; }
 		}
 
 		/// This member supports the .NET Framework infrastructure and is not intended to be used directly from your code.
@@ -83,9 +63,6 @@
 			get {
 				if( Parent != null) {
 					CreateParams createParams = new CreateParams ();
-					if( window == null) {
-						window = new ControlNativeWindow (this);
-					}
 
 					createParams.Caption = Text;
 					createParams.ClassName = "msctls_progress32";
@@ -99,45 +76,34 @@
 					createParams.Parent = Parent.Handle;
 					createParams.Style = (int) (
 						WindowStyles.WS_CHILD | 
-						WindowStyles.WS_VISIBLE);
+						WindowStyles.WS_VISIBLE |
+						WindowStyles.WS_CLIPCHILDREN |
+						WindowStyles.WS_CLIPSIBLINGS );
 					return createParams;
 				}
 				return null;
 			}		
 		}
 
-		[MonoTODO]
+		
 		protected override ImeMode DefaultImeMode {
-			get {
-				throw new NotImplementedException ();
-			}
+			get {	return ImeMode.Disable;	}
 		}
 
-		[MonoTODO]
 		protected override Size DefaultSize {
-			get {
-				throw new NotImplementedException (); 
-			}
+			get {	return new Size(100, 23); }
 		}
 		
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override Font Font {
-			get {
-				return base.Font;
-			}
-			set {
-				base.Font = value;
-			}
+			get {	return base.Font;  }
+			set {	base.Font = value; }
 		}
 		
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override Color ForeColor  {
-			get {
-				throw new NotImplementedException ();
-			}
-			set {
-				throw new NotImplementedException (); 
-			}
+			get {	return base.ForeColor;	}
+			set {	base.ForeColor = value; }
 		}
 		
 		/// This member supports the .NET Framework infrastructure and is not intended to be used directly from your code.
@@ -148,7 +114,12 @@
 				return maximum;
 			}
 			set {
-				maximum=value;
+				if ( value < 0 )
+					throw new ArgumentException( 
+						string.Format("Value '{0}' must be greater than or equal to 0.", value ));
+				maximum = value;
+				if ( IsHandleCreated )
+					Win32.SendMessage( Handle, (int)ProgressBarMessages.PBM_SETRANGE32, Minimum, Maximum );
 			}
 		}
 		
@@ -157,93 +128,101 @@
 				return minimum;
 			}
 			set {
-				minimum=value;
+				if ( value < 0 )
+					throw new ArgumentException( 
+						string.Format("Value '{0}' must be greater than or equal to 0.", value ));
+				minimum = value;
+				if ( IsHandleCreated )
+					Win32.SendMessage( Handle, (int)ProgressBarMessages.PBM_SETRANGE32, Minimum, Maximum );
 			}
 		}
 		
 		/// This member supports the .NET Framework infrastructure and is not intended to be used directly from your code.
 		/// public new bool TabStop {get; set;}
-		[MonoTODO]
+		/// 
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override RightToLeft RightToLeft {
-			get { 
-				throw new NotImplementedException ();
-			}
-			set {
-				throw new NotImplementedException ();
-			}
+			get {	return base.RightToLeft; }
+			set {	base.RightToLeft = value; }
 		}
 		
 		public int Step {
-			get { 
-				return step;
-			}
+			get { 	return step; }
 			set {
-				step=value;
+				step = value;
+				if ( IsHandleCreated )
+					Win32.SendMessage( Handle, (int)ProgressBarMessages.PBM_SETSTEP, Step, 0 );
 			}
 		}
 		
-		[MonoTODO]
+		[EditorBrowsable (EditorBrowsableState.Never)]	 
 		public override string Text {
-			get { 
-				return base.Text; 
-			}
-			set {
-				base.Text = value; 
-			}
+			get { 	return base.Text; }
+			set {	base.Text = value; }
 		}
 		
 		public int Value {
 			get {
-				return value;
+				if ( IsHandleCreated )
+					val = (int)Win32.SendMessage ( Handle, (int)ProgressBarMessages.PBM_GETPOS, 0, 0 );
+				return val;
 			}
 			set {
-				value=value; 
+				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));
+
+				val = value; 
+
+				if ( IsHandleCreated )
+					Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_SETPOS, val, 0);
 			}
 		}
 		#endregion
 		
 		#region Methods
-		[MonoTODO]
+
 		protected override void CreateHandle() 	{
+			initCommonControlsLibrary ( );
 			base.CreateHandle();
 		}
 		
-		[MonoTODO]
-		public void Increment(int value) 	{
-			throw new NotImplementedException ();
+		public void Increment(int value) {
+			int newValue = Value + value;
+			if ( newValue < Minimum )
+				newValue = Minimum;
+			if ( newValue > Maximum )
+				newValue = Maximum;
+			Value = newValue;
 		}
 		
-		[MonoTODO]
-		protected override void OnHandleCreated(EventArgs e) 
-		{
-			//FIXME:
+		protected override void OnHandleCreated(EventArgs e) {
 			base.OnHandleCreated(e);
+			Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_SETRANGE32, Minimum, Maximum);
+			Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_SETPOS, Value, 0);
+			Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_SETSTEP, Step, 0);
+		}
+		
+		public void PerformStep() {
+			if ( IsHandleCreated )
+				Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_STEPIT, 0, 0);
+		}
+		
+		public override string ToString() {
+			return string.Format ("{0}, Minimum: {1}, Maximum: {2}, Value: {3}", 
+						GetType().FullName.ToString (),
+						Maximum.ToString (),
+						Minimum.ToString (),
+						Value.ToString () );
 		}
-		
-		[MonoTODO]
-		public void PerformStep() 
-		{
-			Win32.SendMessage(Handle, (int)ProgressBarMessages.PBM_STEPIT, 0, 0);
-		}
-		
-		[MonoTODO]
-		public override string ToString() 
-		{
-			throw new NotImplementedException ();
-		}
-		#endregion
-		
-		#region Events
-		/*
-		 * This member supports the .NET Framework infrastructure and is not intended to be used directly from your code:
-		 public new event EventHandler DoubleClick;
-		 public new event EventHandler Enter;
-		 public new event KeyEventHandler KeyDown;
-		 public new event KeyPressEventHandler KeyPress;
-		 public new event KeyEventHandler KeyUp;
-		 public new event EventHandler Leave;
-		 public new event PaintEventHandler Paint;
-		*/
 		#endregion
+
+		private void initCommonControlsLibrary	( ) {
+			if ( !RecreatingHandle ) {
+				INITCOMMONCONTROLSEX	initEx = new INITCOMMONCONTROLSEX();
+				initEx.dwICC = CommonControlInitFlags.ICC_PROGRESS_CLASS;
+				Win32.InitCommonControlsEx(initEx);
+			}
+		}
 	}
 }
Index: win32Enums.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/win32Enums.cs,v
retrieving revision 1.9
diff -u -r1.9 win32Enums.cs
--- win32Enums.cs	15 Mar 2003 19:31:43 -0000	1.9
+++ win32Enums.cs	21 Mar 2003 17:09:00 -0000
@@ -2425,7 +2425,62 @@
 	}
 	#endregion
 
-	internal enum OwnerDrawTypes : int {
+	#region DateTimePicker Control Styles
+	public enum DateTimePickerControlStyles 
+	{
+		DTS_UPDOWN    =       0x0001,
+		DTS_SHOWNONE  =       0x0002,
+		DTS_SHORTDATEFORMAT = 0x0000,
+		DTS_LONGDATEFORMAT  = 0x0004,
+		DTS_TIMEFORMAT      = 0x0009,
+		DTS_APPCANPARSE     = 0x0010,
+		DTS_RIGHTALIGN      = 0x0020
+	}
+	#endregion
+
+	#region DateTimePicker Control Messages
+	internal enum DateTimePickerMessages 
+	{
+		DTM_FIRST		=  0x1000,
+		DTM_GETSYSTEMTIME	= (DTM_FIRST + 1),
+		DTM_SETSYSTEMTIME	= (DTM_FIRST + 2),
+		DTM_GETRANGE		= (DTM_FIRST + 3),
+		DTM_SETRANGE		= (DTM_FIRST + 4),
+		DTM_SETFORMATA		= (DTM_FIRST + 5),
+		DTM_SETMCCOLOR		= (DTM_FIRST + 6),
+		DTM_GETMCCOLOR		= (DTM_FIRST + 7),
+		DTM_GETMONTHCAL		= (DTM_FIRST + 8),
+		DTM_SETMCFONT		= (DTM_FIRST + 9),
+		DTM_GETMCFONT		= (DTM_FIRST + 10),
+		DTM_SETFORMATW		= (DTM_FIRST + 50)
+	}
+	#endregion
+
+	#region DateTimePicker Control Flags
+	internal enum DateTimePickerFlags
+	{
+		GDT_ERROR    = -1,
+		GDT_VALID    = 0,
+		GDT_NONE     = 1,
+		GDTR_MIN     = 0x0001,
+		GDTR_MAX     = 0x0002
+	}
+	#endregion
+
+	#region MonthCal Colors
+	internal enum MonthCalColors
+	{
+		MCSC_BACKGROUND   = 0,
+		MCSC_TEXT         = 1,
+		MCSC_TITLEBK      = 2,
+		MCSC_TITLETEXT    = 3,
+		MCSC_MONTHBK      = 4,
+		MCSC_TRAILINGTEXT = 5
+	}
+	#endregion
+
+	internal enum OwnerDrawTypes : int 
+	{
 		ODT_COMBOBOX = 3,
 		ODT_LISTBOX = 2,
 		ODT_LISTVIEW = 102,
Index: win32Structs.cs
===================================================================
RCS file: /mono/mcs/class/System.Windows.Forms/System.Windows.Forms/win32Structs.cs,v
retrieving revision 1.6
diff -u -r1.6 win32Structs.cs
--- win32Structs.cs	10 Feb 2003 06:28:51 -0000	1.6
+++ win32Structs.cs	21 Mar 2003 17:09:00 -0000
@@ -684,6 +684,20 @@
 	}
 	#endregion
 
+	#region SYSTIME
+	[ StructLayout( LayoutKind.Sequential )]
+	public class SYSTIME
+	{
+		public ushort wYear; 
+		public ushort wMonth; 
+		public ushort wDayOfWeek; 
+		public ushort wDay; 
+		public ushort wHour; 
+		public ushort wMinute; 
+		public ushort wSecond; 
+		public ushort wMilliseconds; 
+	}
+	#endregion
 
 	[StructLayout(LayoutKind.Sequential)]
 	internal struct MSG {

--0-477702749-1048266954=:89192--