2006-10-12 Mike Kestner <mkestner@novell.com>
authorMike Kestner <mkestner@gmail.com>
Thu, 12 Oct 2006 14:22:55 +0000 (14:22 -0000)
committerMike Kestner <mkestner@gmail.com>
Thu, 12 Oct 2006 14:22:55 +0000 (14:22 -0000)
* ErrorProvider.cs : new ToolTipWindow ctor sig.
* HelpProvider.cs : new ToolTipWindow ctor sig.
* ToolTip.cs : remove ToolTip param from Window sig since it is
not used.
* ToolBar.cs : add tooltip support.  Fixes #79565.

svn path=/trunk/mcs/; revision=66599

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ErrorProvider.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/HelpProvider.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolBar.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolTip.cs

index e60396d51f73ce4fad78f90c9aa209bf7d8fd4ad..1b56006c54511980e0513728d4eb202d2706fd9d 100644 (file)
@@ -1,3 +1,11 @@
+2006-10-12  Mike Kestner  <mkestner@novell.com>
+
+       * ErrorProvider.cs : new ToolTipWindow ctor sig.
+       * HelpProvider.cs : new ToolTipWindow ctor sig.
+       * ToolTip.cs : remove ToolTip param from Window sig since it is
+       not used.
+       * ToolBar.cs : add tooltip support.  Fixes #79565.
+
 2006-10-12  Rolf Bjarne Kvinge  <rolfkvinge@ya.com>
 
        * MonthCalendar.cs: When FirstDayOfWeek is default set firstday 
index d0875c4be32c67aa7bdcce7cc3b41fc33afa7690..cb4cfdef752740b88a15ae1d7e66d43ac0e9cadc 100644 (file)
@@ -282,7 +282,7 @@ namespace System.Windows.Forms {
                        blinkstyle = ErrorBlinkStyle.BlinkIfDifferentError;
 
                        icon = (Icon)Locale.GetResource("errorProvider.ico");
-                       tooltip = new ToolTip.ToolTipWindow(null);
+                       tooltip = new ToolTip.ToolTipWindow();
                }
 
                public ErrorProvider(ContainerControl parentControl) : this() {
index e5099efbf9f00c9326b37823c9d23fa3a705e63d..5e3e9424723f87afa30cdc85bdcc0c2dc0eb35b3 100644 (file)
@@ -95,7 +95,7 @@ namespace System.Windows.Forms {
                #region Public Constructors
                public HelpProvider() {
                        controls = new Hashtable();
-                       tooltip = new ToolTip.ToolTipWindow(null);
+                       tooltip = new ToolTip.ToolTipWindow();
 
                        HideToolTipHandler = new EventHandler(HideToolTip);
                        HideToolTipKeyHandler = new KeyPressEventHandler(HideToolTipKey);
index 645ac3ede1f5ebb008e60fba30a24847471d3799..112fc034a59807aa7466f75aa53d6a2a740676c3 100644 (file)
@@ -116,6 +116,7 @@ namespace System.Windows.Forms
                        GotFocus += new EventHandler (FocusChanged);
                        LostFocus += new EventHandler (FocusChanged);
                        MouseDown += new MouseEventHandler (ToolBar_MouseDown);
+                       MouseHover += new EventHandler (ToolBar_MouseHover);
                        MouseLeave += new EventHandler (ToolBar_MouseLeave);
                        MouseMove += new MouseEventHandler (ToolBar_MouseMove);
                        MouseUp += new MouseEventHandler (ToolBar_MouseUp);
@@ -652,14 +653,66 @@ namespace System.Windows.Forms
                        }
                }
 
+               private ToolBarButton ButtonAtPoint (Point pt)
+               {
+                       foreach (ToolBarButton button in buttons)
+                               if (button.Rectangle.Contains (pt)) 
+                                       return button;
+
+                       return null;
+               }
+
+               ToolTip.ToolTipWindow tip_window = null;
+               Timer tipdown_timer = null;
+
+               private void PopDownTip (object o, EventArgs args)
+               {
+                       tip_window.Hide ();
+               }
+
+               private Timer TipDownTimer {
+                       get {
+                               if (tipdown_timer == null) {
+                                       tipdown_timer = new Timer ();
+                                       tipdown_timer.Enabled = false;
+                                       tipdown_timer.Interval = 5000;
+                                       tipdown_timer.Tick += new EventHandler (PopDownTip);
+                               }
+                               return tipdown_timer;
+                       }
+               }
+
+               private void ToolBar_MouseHover (object sender, EventArgs e)
+               {
+                       if (Capture)
+                               return;
+
+                       tip_window = new ToolTip.ToolTipWindow ();
+
+                       ToolBarButton btn = ButtonAtPoint (PointToClient (Control.MousePosition));
+                       current_button = btn;
+
+                       if (btn == null || btn.ToolTipText.Length == 0)
+                               return;
+
+                       tip_window.Present (this, btn.ToolTipText);
+                       TipDownTimer.Start ();
+               }
+
                private void ToolBar_MouseLeave (object sender, EventArgs e)
                {
-                       if (!Enabled || appearance != ToolBarAppearance.Flat || current_button == null) 
+                       if (tipdown_timer != null)
+                               tipdown_timer.Dispose ();
+                       tipdown_timer = null;
+                       if (tip_window != null)
+                               tip_window.Dispose ();
+                       tip_window = null;
+
+                       if (!Enabled || current_button == null) 
                                return;
 
-                       if (current_button.Hilight) {
+                       if (appearance != ToolBarAppearance.Flat) 
                                current_button.Hilight = false;
-                       }
                        current_button = null;
                }
 
@@ -668,9 +721,14 @@ namespace System.Windows.Forms
                        if (!Enabled) 
                                return;
 
+                       if (tip_window != null && tip_window.Visible) {
+                               TipDownTimer.Stop ();
+                               TipDownTimer.Start ();
+                       }
+
                        Point loc = new Point (me.X, me.Y);
 
-                       if (this.Capture) {
+                       if (Capture) {
                                // If the button was pressed and we leave, release the 
                                // button press and vice versa
                                foreach (ToolBarButton button in buttons) {
@@ -681,15 +739,29 @@ namespace System.Windows.Forms
                                                break;
                                        }
                                }
-                       }
-                       // following is only for flat style toolbar
-                       else if (appearance == ToolBarAppearance.Flat) {
-                               if (current_button != null && current_button.Rectangle.Contains (loc)) {
+                               return;
+                       } 
+
+                       if (current_button != null && current_button.Rectangle.Contains (loc)) {
+                               if (appearance == ToolBarAppearance.Flat) {
                                        if (current_button.Hilight || current_button.Pushed)
                                                return;
                                        current_button.Hilight = true;
                                }
-                               else {
+                       } else {
+                               if (tip_window != null) {
+                                       if (tip_window.Visible) {
+                                               tip_window.Hide ();
+                                               TipDownTimer.Stop ();
+                                       }
+                                       current_button = ButtonAtPoint (loc);
+                                       if (current_button != null && current_button.ToolTipText.Length > 0) {
+                                               tip_window.Present (this, current_button.ToolTipText);
+                                               TipDownTimer.Start ();
+                                       }
+                               }
+
+                               if (appearance == ToolBarAppearance.Flat) {
                                        foreach (ToolBarButton button in buttons) {
                                                if (button.Rectangle.Contains (loc) && button.Enabled) {
                                                        current_button = button;
index 4d36b5acd5a1c64fac44b51d33d6ffa93a317c29..11fb82bfa5e745ab259dedfd7ac030fae0d20997 100644 (file)
@@ -55,12 +55,10 @@ namespace System.Windows.Forms {
                internal class ToolTipWindow : Control {
                        #region ToolTipWindow Class Local Variables
                        internal StringFormat string_format;
-                       ToolTip owner;
                        #endregion      // ToolTipWindow Class Local Variables
 
                        #region ToolTipWindow Class Constructor
-                       internal ToolTipWindow(ToolTip owner) : base() {
-                               this.owner = owner;
+                       internal ToolTipWindow() {
 
                                string_format = new StringFormat();
                                string_format.LineAlignment = StringAlignment.Center;
@@ -185,7 +183,7 @@ namespace System.Windows.Forms {
                        tooltip_strings = new Hashtable(5);
                        controls = new ArrayList(5);
 
-                       tooltip_window = new ToolTipWindow(this);
+                       tooltip_window = new ToolTipWindow();
                        tooltip_window.MouseLeave += new EventHandler(control_MouseLeave);
 
                        timer = new Timer();