2010-06-20 Carlos Alberto Cortez <calberto.cortez@gmail.com>
authorCarlos Alberto Cortez <calberto.cortez@gmail.com>
Sun, 20 Jun 2010 22:30:36 +0000 (22:30 -0000)
committerCarlos Alberto Cortez <calberto.cortez@gmail.com>
Sun, 20 Jun 2010 22:30:36 +0000 (22:30 -0000)
* TabControl.cs: Implement ToolTip support for our tab pages.
Fixes part of #515045.

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

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TabControl.cs

index 8fcf3fd639ff68ecbeb463a8ad6c5f6e94d29f91..99c68bcbefd317d0f6d596b432d4e049143597a4 100644 (file)
@@ -1,3 +1,8 @@
+2010-06-20  Carlos Alberto Cortez <calberto.cortez@gmail.com>
+
+       * TabControl.cs: Implement ToolTip support for our tab pages.
+       Fixes part of #515045.
+
 2010-06-19  Jonathan Pobst  <monkey@jpobst.com>
 
        * FontDialog.cs: Make the 16 colors in the color drop down
index 198253526b0ed5bb957d026a4d9693f0e3b703bc..8737b7bfcc90f63427dd2307565b5ca0c135e2a3 100644 (file)
@@ -62,6 +62,10 @@ namespace System.Windows.Forms {
                private int slider_pos = 0;
                TabPage entered_tab_page;
                bool mouse_down_on_a_tab_page;
+               ToolTip tooltip;
+               ToolTip.TipState tooltip_state = ToolTip.TipState.Down;
+               Timer tooltip_timer;
+
 #if NET_2_0
                private bool rightToLeftLayout;
 #endif         
@@ -575,6 +579,11 @@ namespace System.Windows.Forms {
                                        area_to_invalidate.Dispose ();
                                } else
                                        entered_tab_page = value;
+
+                               if (value == null)
+                                       CloseToolTip ();
+                               else
+                                       SetToolTip (GetToolTipText (value));
                        }
                }
                #endregion      // Internal Properties
@@ -705,6 +714,7 @@ namespace System.Windows.Forms {
 
                protected override void Dispose (bool disposing)
                {
+                       CloseToolTip ();
                        base.Dispose (disposing);
                }
 
@@ -1549,6 +1559,52 @@ namespace System.Windows.Forms {
                        return (int)(rect.Width);
                }
 
+               void SetToolTip (string text)
+               {
+                       if (text == null || text.Length == 0) {
+                               CloseToolTip ();
+                               return;
+                       }
+
+                       if (tooltip == null) {
+                               tooltip = new ToolTip ();
+                               tooltip_timer = new Timer ();
+                               tooltip_timer.Tick += new EventHandler (ToolTipTimerTick);
+                       }
+
+                       CloseToolTip ();
+
+                       tooltip_state = ToolTip.TipState.Initial;
+                       tooltip_timer.Interval = 500;
+                       tooltip_timer.Start ();
+               }
+
+               void CloseToolTip ()
+               {
+                       if (tooltip == null)
+                               return;
+
+                       tooltip.Hide (this);
+                       tooltip_timer.Stop ();
+                       tooltip_state = ToolTip.TipState.Down;
+               }
+
+               void ToolTipTimerTick (object o, EventArgs args)
+               {
+                       switch (tooltip_state) {
+                               case ToolTip.TipState.Initial:
+                                       tooltip_timer.Stop ();
+                                       tooltip_timer.Interval = 5000;
+                                       tooltip_timer.Start ();
+                                       tooltip_state = ToolTip.TipState.Show;
+                                       tooltip.Present (this, GetToolTipText (EnteredTabPage));
+                                       break;
+                               case ToolTip.TipState.Show:
+                                       CloseToolTip ();
+                                       break;
+                       }
+               }
+
                void OnMouseMove (object sender, MouseEventArgs e)
                {
                        if (!mouse_down_on_a_tab_page && ShowSlider) {