Author: jpobst
Date: 2007-03-26 13:15:45 -0500 (Mon, 26 Mar 2007)
New Revision: 74986

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs
Log:
2007-03-26  Jonathan Pobst  <[EMAIL PROTECTED]>

        * ToolStrip.cs: Implement Tooltips.
        * ToolStripItem.cs: Create internal method for determining tooltip.

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-03-26 17:13:32 UTC (rev 74985)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-03-26 18:15:45 UTC (rev 74986)
@@ -1,5 +1,10 @@
 2007-03-26  Jonathan Pobst  <[EMAIL PROTECTED]>
 
+       * ToolStrip.cs: Implement Tooltips.
+       * ToolStripItem.cs: Create internal method for determining tooltip.
+
+2007-03-26  Jonathan Pobst  <[EMAIL PROTECTED]>
+
        * PropertyGrid.cs: Hide a EditorBrowsable attribute from 1.1 API.
 
 2007-03-26  Everaldo Canuto  <[EMAIL PROTECTED]>

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs     
2007-03-26 17:13:32 UTC (rev 74985)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs     
2007-03-26 18:15:45 UTC (rev 74986)
@@ -59,11 +59,14 @@
                private ToolStripOverflowButton overflow_button;
                private ToolStripRenderer renderer;
                private ToolStripRenderMode render_mode;
+               private Timer tooltip_timer;
+               private ToolTip.ToolTipWindow tooltip_window;
                private bool show_item_tool_tips;
                private bool stretch;
 
                private ToolStripItem mouse_currently_over;
                private bool menu_selected;
+               private ToolStripItem tooltip_currently_showing;
                #endregion
 
                #region Public Constructors
@@ -660,6 +663,7 @@
                protected override void OnMouseLeave (EventArgs e)
                {
                        if (mouse_currently_over != null) {
+                               MouseLeftItem (mouse_currently_over);
                                mouse_currently_over.FireEvent (e, 
ToolStripItemEventType.MouseLeave);
                                mouse_currently_over = null;
                        }
@@ -682,14 +686,17 @@
                                        tsi.FireEvent (mea, 
ToolStripItemEventType.MouseMove);
                                else {
                                        // If we were over a different item, 
fire a mouse leave on it
-                                       if (mouse_currently_over != null)
+                                       if (mouse_currently_over != null) {
+                                               MouseLeftItem (tsi);
                                                mouse_currently_over.FireEvent 
(mea, ToolStripItemEventType.MouseLeave);
+                                       }
                                        
                                        // Set the new item we are currently 
over
                                        mouse_currently_over = tsi;
                                        
                                        // Fire mouse enter and mouse move
                                        tsi.FireEvent (mea, 
ToolStripItemEventType.MouseEnter);
+                                       MouseEnteredItem (tsi);
                                        tsi.FireEvent (mea, 
ToolStripItemEventType.MouseMove);
 
                                        // If we're over something with a drop 
down, show it
@@ -699,6 +706,7 @@
                        } else {
                                // We're not over anything now, just fire the 
mouse leave on what we used to be over
                                if (mouse_currently_over != null) {
+                                       MouseLeftItem (tsi);
                                        mouse_currently_over.FireEvent (mea, 
ToolStripItemEventType.MouseLeave);
                                        mouse_currently_over = null;
                                }
@@ -872,19 +880,6 @@
                }
                #endregion
 
-               #region To Be Removed
-               // These are things I overrode to get the behavior I needed, 
but MS's API
-               // says they aren't overridden.  So I need to hide them (?) or 
implement
-               // them some other way...
-               protected override void OnMouseHover (EventArgs e)
-               {
-                       base.OnMouseHover (e);
-
-                       if (mouse_currently_over != null)
-                               mouse_currently_over.FireEvent (e, 
ToolStripItemEventType.MouseHover);
-               }
-               #endregion
-
                #region Public Events
                static object ItemAddedEvent = new object ();
                static object ItemClickedEvent = new object ();
@@ -1020,6 +1015,53 @@
                                this.OverflowButton.HideDropDown ();
                        }
                }
+               
+               private void MouseEnteredItem (ToolStripItem item)
+               {
+                       tooltip_currently_showing = item;
+                       ToolTipTimer.Start ();
+               }
+               
+               private void MouseLeftItem (ToolStripItem item)
+               {
+                       ToolTipTimer.Stop ();
+                       ToolTipWindow.Hide ();
+                       tooltip_currently_showing = null;
+               }
+               
+               private Timer ToolTipTimer {
+                       get {
+                               if (tooltip_timer == null) {
+                                       tooltip_timer = new Timer ();
+                                       tooltip_timer.Enabled = false;
+                                       tooltip_timer.Interval = 500;
+                                       tooltip_timer.Tick += new EventHandler 
(ToolTipTimer_Tick);
+                               }
+                               
+                               return tooltip_timer;
+                       }
+               }
+               
+               private ToolTip.ToolTipWindow ToolTipWindow {
+                       get {
+                               if (tooltip_window == null)
+                                       tooltip_window = new 
ToolTip.ToolTipWindow ();
+                                       
+                               return tooltip_window;
+                       }
+               }
+               
+               private void ToolTipTimer_Tick (object o, EventArgs args)
+               {
+                       string tooltip = tooltip_currently_showing.GetToolTip 
();
+                       
+                       if (!string.IsNullOrEmpty (tooltip))
+                               ToolTipWindow.Present (this, tooltip);
+
+                       tooltip_currently_showing.FireEvent (EventArgs.Empty, 
ToolStripItemEventType.MouseHover);
+
+                       ToolTipTimer.Stop ();
+               }
                #endregion
        }
 }

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs 
2007-03-26 17:13:32 UTC (rev 74985)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs 
2007-03-26 18:15:45 UTC (rev 74986)
@@ -1413,6 +1413,15 @@
                                
                        return this.Parent.ImageScalingSize;
                }
+               
+               internal string GetToolTip ()
+               {
+                       if (this.auto_tool_tip && string.IsNullOrEmpty 
(this.tool_tip_text))
+                               return this.text;
+                               
+                       return this.tool_tip_text;
+               }
+               
                internal void FireEvent (EventArgs e, ToolStripItemEventType 
met)
                {
                        switch (met) {

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to