/// <summary>
/// This method will mark whether items should be placed in the overflow or on the main ToolStrip.
/// </summary>
private void CalculatePlacementsHorizontal()
{
ResetItemPlacements();
ToolStrip toolStrip = ToolStrip;
int currentWidth = 0;
if (ToolStrip.CanOverflow)
{
// determine the locations of all the items.
for (ForwardsWalkingIndex = 0; ForwardsWalkingIndex < toolStrip.Items.Count; ForwardsWalkingIndex++)
{
ToolStripItem item = toolStrip.Items[ForwardsWalkingIndex];
if (!((IArrangedElement)item).ParticipatesInLayout)
{
// skip over items not participating in layout. E.G. not visible items
continue;
}
// if we have something set to overflow always we need to show an overflow button
if (item.Overflow == ToolStripItemOverflow.Always)
{
#if DEBUG
if (DebugLayoutTraceSwitch.TraceVerbose)
{
Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "OverflowRequired - item set to alaways overflow: {0} ", item));
}
#endif
OverflowRequired = true;
}
if (item.Overflow != ToolStripItemOverflow.Always && item.Placement == ToolStripItemPlacement.None)
{
// since we havent parented the item yet - the auto size wont have reset the size yet.
Size itemSize = item.AutoSize ? item.GetPreferredSize(displayRectangle.Size) : item.Size;
currentWidth += itemSize.Width + item.Margin.Horizontal;
int overflowWidth = (OverflowRequired) ? OverflowButtonSize.Width : 0;
if (currentWidth > displayRectangle.Width - overflowWidth)
{
#if DEBUG
if (DebugLayoutTraceSwitch.TraceVerbose)
{
Debug.WriteLine("SendNextItemToOverflow to fres space for " + item.ToString());
}
#endif
int spaceRecovered = SendNextItemToOverflow((currentWidth + overflowWidth) - displayRectangle.Width, true);
currentWidth -= spaceRecovered;
}
}
}
}
PlaceItems();
}