Parcourir la source

Implement missing properties, events, and methods. Handle mouse clicking

svn path=/trunk/mcs/; revision=32281
Jackson Harper il y a 21 ans
Parent
commit
fe397880c6
1 fichiers modifiés avec 176 ajouts et 9 suppressions
  1. 176 9
      mcs/class/Managed.Windows.Forms/System.Windows.Forms/StatusBar.cs

+ 176 - 9
mcs/class/Managed.Windows.Forms/System.Windows.Forms/StatusBar.cs

@@ -41,30 +41,109 @@ namespace System.Windows.Forms {
 
 		public StatusBar ()
 		{
-			Dock = DockStyle.Bottom;
+			base.Dock = DockStyle.Bottom;
 			Anchor = AnchorStyles.Top | AnchorStyles.Left;
 		}
 
+		public string Text {
+			get { return base.Text; }
+			set {
+				if (value == Text)
+					return;
+				base.Text = value;
+				Refresh ();
+			}
+			
+		}
+
 		public bool ShowPanels {
 			get { return show_panels; }
 			set {
-				bool refresh = (show_panels != value);
+				if (show_panels == value)
+					return;
 				show_panels = value;
-				if (refresh)
-					Refresh ();
 			}
 		}
 
 		public bool SizingGrip {
 			get { return sizing_grip; }
 			set {
-				bool refresh = (sizing_grip != value);
+				if (sizing_grip == value)
+					return;
 				sizing_grip = value;
-				if (refresh)
-					Refresh ();
 			}
 		}
 
+		public Color ForeColor {
+			get { return base.ForeColor; }
+			set {
+				if (value == ForeColor)
+					return;
+				if (ForeColorChanged != null)
+					ForeColorChanged (this, EventArgs.Empty);
+				Refresh ();
+			}
+		}
+
+		public Color BackColor {
+			get { return base.BackColor; }
+			set {
+				if (value == BackColor)
+					return;
+				base.BackColor = value;
+				if (BackColorChanged != null)
+					BackColorChanged (this, EventArgs.Empty);
+				Refresh ();
+			}
+		}
+
+		public Image BackgroundImage {
+			get { return base.BackgroundImage; }
+			set {
+				if (value == BackgroundImage)
+					return;
+				base.BackgroundImage = value;
+				if (BackgroundImageChanged != null)
+					BackgroundImageChanged (this, EventArgs.Empty);
+			}
+		}
+
+		public override DockStyle Dock {
+			get { return base.Dock; }
+			set {
+				if (value == Dock)
+					return;
+				base.Dock = value;
+				Refresh ();
+			}
+		}
+
+		public override Font Font {
+			get { return base.Font; }
+			set {
+				if (value == Font)
+					return;
+				base.Font = value;
+				Refresh ();
+			}
+		}
+
+		public new ImeMode ImeMode {
+			get { return base.ImeMode; }
+			set {
+				if (value == ImeMode)
+					return;
+				base.ImeMode = value;
+				if (ImeModeChanged != null)
+					ImeModeChanged (this, EventArgs.Empty);
+			}
+		}
+
+		public new bool TabStop {
+			get { return base.TabStop; }
+			set { base.TabStop = value; }
+		}
+
 		public StatusBarPanelCollection Panels {
 			get {
 				if (panels == null)
@@ -73,10 +152,38 @@ namespace System.Windows.Forms {
 			}
 		}
 
+		public override string ToString ()
+		{
+			return base.ToString () + ", Panels.Count: " + Panels.Count +
+				(Panels.Count > 0 ? ", Panels[0]: " + Panels [0] : String.Empty);
+		}
+
+		public new event EventHandler BackColorChanged;
+		public new event EventHandler ForeColorChanged;
+		public new event EventHandler BackgroundImageChanged;
+		public event StatusBarDrawItemEventHandler DrawItem;
+		public new event EventHandler ImeModeChanged;
+		public new event PaintEventHandler Paint;
+		public event StatusBarPanelClickEventHandler PanelClick;
+		
+		protected override CreateParams CreateParams {
+			get {
+				CreateParams createParams = base.CreateParams;
+				createParams.ClassName = "msctls_statusbar32";
+				createParams.Style = (int) (WindowStyles.WS_CHILD |
+					WindowStyles.WS_VISIBLE);
+				return createParams;
+			}
+		}
+
 		protected override Size DefaultSize {
 			get { return new Size (100, 22); }
 		}
 
+		protected override ImeMode DefaultImeMode {
+			get { return ImeMode.Disable; }
+		}
+
 		protected override void WndProc(ref Message m)
 		{
 			switch ((Msg) m.Msg) {
@@ -85,7 +192,7 @@ namespace System.Windows.Forms {
 				PaintEventArgs	paint_event;
 
 				paint_event = XplatUI.PaintEventStart (Handle);
-				Paint (paint_event);
+				DoPaint (paint_event);
 				XplatUI.PaintEventEnd (Handle);
 				return;
 			}
@@ -93,6 +200,11 @@ namespace System.Windows.Forms {
 			base.WndProc (ref m);
 		}
 
+		protected override void CreateHandle ()
+		{
+			base.CreateHandle ();
+		}
+
 		protected override void OnResize (EventArgs e)
 		{
 			base.OnResize (e);
@@ -115,7 +227,59 @@ namespace System.Windows.Forms {
 			Draw();
 		}
 
-		private void Paint (PaintEventArgs pevent)
+		protected override void OnHandleDestroyed (EventArgs e)
+		{
+			base.OnHandleDestroyed (e);
+		}
+
+		protected override void OnLayout (LayoutEventArgs e)
+		{
+			base.OnLayout (e);
+		}
+
+		protected override void OnMouseDown (MouseEventArgs e)
+		{
+                        if (panels == null)
+                                return;
+
+                        float prev_x = 0;
+                        float gap = ThemeEngine.Current.StatusBarHorzGapWidth;
+                        for (int i = 0; i < panels.Count; i++) {
+                                float x = panels [i].Width + prev_x + (i == panels.Count - 1 ? gap : gap / 2);
+                                if (e.X >= prev_x && e.X <= x) {
+                                        OnPanelClick (new StatusBarPanelClickEventArgs (panels [i],
+                                                                      e.Button, e.Clicks, e.X, e.Y));
+                                        break;
+                                }
+                                prev_x = x;
+                        }
+
+			base.OnMouseDown (e);
+		}
+
+		protected virtual void OnPanelClick (StatusBarPanelClickEventArgs e)
+		{
+			if (PanelClick != null)
+				PanelClick (this, e);
+		}
+
+		internal void OnDrawItemInternal (StatusBarDrawItemEventArgs e)
+		{
+			OnDrawItem (e);
+		}
+
+		protected virtual void OnDrawItem (StatusBarDrawItemEventArgs e)
+		{
+			if (DrawItem != null)
+				DrawItem (this, e);
+		}
+
+		protected override void Dispose (bool disposing)
+		{
+			base.Dispose (disposing);
+		}
+
+		private void DoPaint (PaintEventArgs pevent)
 		{
 		       if (Width <= 0 || Height <=  0 || Visible == false)
 			       return;
@@ -131,6 +295,9 @@ namespace System.Windows.Forms {
 			if (panels == null || !show_panels)
 				return;
 
+			if (Width == 0 || Height == 0)
+				return;
+
 			int gap = ThemeEngine.Current.StatusBarHorzGapWidth;
 			int taken = 0;
 			ArrayList springs = null;