// Jonathan Pobst (monkey@jpobst.com)
//
-#if NET_2_0
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
private ToolStripItem mouse_currently_over;
internal bool menu_selected;
private ToolStripItem tooltip_currently_showing;
+ private ToolTip.TipState tooltip_state;
+
+ const int InitialToolTipDelay = 500;
+ const int ToolTipDelay = 5000;
#endregion
#region Public Constructors
#endregion
#region Public Properties
- [MonoTODO ()]
+ [MonoTODO ("Stub, does nothing")]
public override bool AllowDrop {
get { return base.AllowDrop; }
set { base.AllowDrop = value; }
}
-
- [MonoTODO ()]
+
+ [MonoTODO ("Stub, does nothing")]
[DefaultValue (false)]
public bool AllowItemReorder {
get { return this.allow_item_reorder; }
protected override void Dispose (bool disposing)
{
if (!IsDisposed) {
- foreach (ToolStripItem tsi in Items)
- tsi.Dispose ();
-
- if (this.overflow_button != null && this.overflow_button.drop_down != null)
- this.overflow_button.drop_down.Dispose ();
- ToolStripManager.RemoveToolStrip (this);
+ if(disposing) {
+ // Event Handler must be stopped before disposing Items.
+ Events.Dispose();
+
+ CloseToolTip (null);
+ // ToolStripItem.Dispose modifes the collection,
+ // so we iterate it in reverse order
+ for (int i = Items.Count - 1; i >= 0; i--)
+ Items [i].Dispose ();
+
+ if (this.overflow_button != null && this.overflow_button.drop_down != null)
+ this.overflow_button.drop_down.Dispose ();
+
+ ToolStripManager.RemoveToolStrip (this);
+ }
base.Dispose (disposing);
}
}
- [MonoTODO ("Not called")]
+ [MonoTODO ("Stub, never called")]
protected virtual void OnBeginDrag (EventArgs e)
{
EventHandler eh = (EventHandler)(Events[BeginDragEvent]);
base.OnDockChanged (e);
}
- [MonoTODO ("Not called")]
+ [MonoTODO ("Stub, never called")]
protected virtual void OnEndDrag (EventArgs e)
{
EventHandler eh = (EventHandler)(Events[EndDragEvent]);
if (this is MenuStrip && mouse_currently_over is ToolStripMenuItem && !(mouse_currently_over as ToolStripMenuItem).HasDropDownItems)
return;
} else {
- if (this is MenuStrip)
- this.HideMenus (true, ToolStripDropDownCloseReason.AppClicked);
+ this.Dismiss (ToolStripDropDownCloseReason.AppClicked);
}
if (this is MenuStrip)
protected override void OnVisibleChanged (EventArgs e)
{
+ if (!Visible)
+ CloseToolTip (null);
+
base.OnVisibleChanged (e);
}
string code = Char.ToUpper (charCode).ToString ();
// If any item's text starts with our letter, it gets the message
- if (this is ToolStripDropDownMenu)
+ if ((Control.ModifierKeys & Keys.Alt) != 0 || this is ToolStripDropDownMenu)
foreach (ToolStripItem tsi in this.Items)
if (tsi.Enabled && tsi.Visible && !string.IsNullOrEmpty (tsi.Text) && tsi.Text.ToUpper ().StartsWith (code) && !(tsi is ToolStripControlHost))
return tsi.ProcessMnemonic (charCode);
return base.ProcessMnemonic (charCode);
}
-
- [MonoTODO ()]
+
+ [MonoTODO ("Stub, does nothing")]
[EditorBrowsable (EditorBrowsableState.Advanced)]
protected virtual void RestoreFocus ()
{
}
- [MonoTODO ()]
protected override void Select (bool directed, bool forward)
{
foreach (ToolStripItem tsi in this.DisplayedItems)
protected virtual void SetDisplayedItems ()
{
- this.displayed_items.Clear ();
+ this.displayed_items.ClearInternal ();
foreach (ToolStripItem tsi in this.items)
if (tsi.Placement == ToolStripItemPlacement.Main && tsi.Available) {
remove { base.AutoSizeChanged -= value; }
}
- [MonoTODO ()]
+ [MonoTODO ("Event never raised")]
public event EventHandler BeginDrag {
add { Events.AddHandler (BeginDragEvent, value); }
remove { Events.RemoveHandler (BeginDragEvent, value); }
remove { base.CursorChanged -= value; }
}
- [MonoTODO ()]
+ [MonoTODO ("Event never raised")]
public event EventHandler EndDrag {
add { Events.AddHandler (EndDragEvent, value); }
remove { Events.RemoveHandler (EndDragEvent, value); }
Point currentLocation = Point.Empty;
int tallest = 0;
- foreach (ToolStripItem tsi in items) {
- if ((DisplayRectangle.Width - currentLocation.X) < (tsi.Width + tsi.Margin.Horizontal)) {
+ foreach (ToolStripItem tsi in items)
+ if (tsi.Available) {
+ Size tsi_preferred = tsi.GetPreferredSize (Size.Empty);
+
+ if ((DisplayRectangle.Width - currentLocation.X) < (tsi_preferred.Width + tsi.Margin.Horizontal)) {
+
+ currentLocation.Y += tallest;
+ tallest = 0;
+
+ currentLocation.X = DisplayRectangle.Left;
+ }
- currentLocation.Y += tallest;
- tallest = 0;
+ // Offset the left margin and set the control to our point
+ currentLocation.Offset (tsi.Margin.Left, 0);
+ tallest = Math.Max (tallest, tsi_preferred.Height + tsi.Margin.Vertical);
- currentLocation.X = DisplayRectangle.Left;
+ // Update our location pointer
+ currentLocation.X += tsi_preferred.Width + tsi.Margin.Right;
}
- // Offset the left margin and set the control to our point
- currentLocation.Offset (tsi.Margin.Left, 0);
- tallest = Math.Max (tallest, tsi.Height + tsi.Margin.Vertical);
-
- // Update our location pointer
- currentLocation.X += tsi.Width + tsi.Margin.Right;
- }
-
currentLocation.Y += tallest;
- return new Size (currentLocation.X, currentLocation.Y);
+ return new Size (currentLocation.X + this.Padding.Horizontal, currentLocation.Y + this.Padding.Vertical);
}
if (this.orientation == Orientation.Vertical) {
this.GetTopLevelToolStrip ().Dismiss (ToolStripDropDownCloseReason.ItemClicked);
}
- internal void HideMenus (bool release, ToolStripDropDownCloseReason reason)
- {
- if (this is MenuStrip && release && menu_selected)
- (this as MenuStrip).FireMenuDeactivate ();
-
- if (release)
- menu_selected = false;
-
- NotifySelectedChanged (null);
- }
-
internal void NotifySelectedChanged (ToolStripItem tsi)
{
foreach (ToolStripItem tsi2 in this.DisplayedItems)
private void MouseEnteredItem (ToolStripItem item)
{
if (this.show_item_tool_tips && !(item is ToolStripTextBox)) {
+ ToolTipTimer.Interval = InitialToolTipDelay;
+ tooltip_state = ToolTip.TipState.Initial;
tooltip_currently_showing = item;
ToolTipTimer.Start ();
}
}
-
- private void MouseLeftItem (ToolStripItem item)
+
+ private void CloseToolTip (ToolStripItem item)
{
ToolTipTimer.Stop ();
ToolTipWindow.Hide (this);
tooltip_currently_showing = null;
+ tooltip_state = ToolTip.TipState.Down;
}
-
+
+ private void MouseLeftItem (ToolStripItem item)
+ {
+ CloseToolTip (item);
+ }
+
private Timer ToolTipTimer {
get {
if (tooltip_timer == null) {
tooltip_timer = new Timer ();
tooltip_timer.Enabled = false;
- tooltip_timer.Interval = 500;
+ tooltip_timer.Interval = InitialToolTipDelay;
tooltip_timer.Tick += new EventHandler (ToolTipTimer_Tick);
}
}
}
- private void ToolTipTimer_Tick (object o, EventArgs args)
+ private void ShowToolTip ()
{
string tooltip = tooltip_currently_showing.GetToolTip ();
- if (!string.IsNullOrEmpty (tooltip))
+ if (!string.IsNullOrEmpty (tooltip)) {
ToolTipWindow.Present (this, tooltip);
+ ToolTipTimer.Interval = ToolTipDelay;
+ ToolTipTimer.Start ();
+ tooltip_state = ToolTip.TipState.Show;
+ }
tooltip_currently_showing.FireEvent (EventArgs.Empty, ToolStripItemEventType.MouseHover);
+ }
+ private void ToolTipTimer_Tick (object o, EventArgs args)
+ {
ToolTipTimer.Stop ();
+
+ switch (tooltip_state) {
+ case ToolTip.TipState.Initial:
+ ShowToolTip ();
+ break;
+ case ToolTip.TipState.Show:
+ CloseToolTip (null);
+ break;
+ }
}
#endregion
#endregion
}
}
-#endif