SourceCode/PROMS/DotNetBar Source Code/Ribbon/RibbonTabItemContainer.cs

116 lines
4.1 KiB
C#

using System;
using System.Collections;
using System.Text;
namespace DevComponents.DotNetBar
{
internal class RibbonTabItemContainer : GenericItemContainer
{
protected override void OnStyleChanged()
{
eDotNetBarStyle effectiveStyle = this.EffectiveStyle;
if (effectiveStyle == eDotNetBarStyle.Windows7)
{
this.PaddingLeft = 0;
this.PaddingRight = 0;
this.PaddingTop = 0;
}
else if (effectiveStyle == eDotNetBarStyle.Office2010 || StyleManager.IsMetro(effectiveStyle))
{
this.PaddingLeft = 0;
this.PaddingRight = 1;
this.PaddingTop = 1;
}
else
{
this.PaddingLeft = 1;
this.PaddingRight = 1;
this.PaddingTop = 1;
}
base.OnStyleChanged();
}
protected override bool OnBeforeLayout()
{
if (this.Orientation != eOrientation.Horizontal)
return true;
ArrayList ribbonTabItems = new ArrayList();
int totalWidth = 0;
int totalRibbonTabItemsWidth = 0;
int minimumSize = 24;
int availableWidth = this.WidthInternal - (this.PaddingLeft + this.PaddingRight);
foreach (BaseItem item in this.SubItems)
{
if (!item.Visible)
continue;
item.RecalcSize();
totalWidth += (item.WidthInternal + this.ItemSpacing);
if (item is RibbonTabItem)
{
// Reset reduced size flag
((RibbonTabItem)item).ReducedSize = false;
ribbonTabItems.Add(item);
totalRibbonTabItemsWidth += (item.WidthInternal + this.ItemSpacing);
}
}
int totalReduction = totalWidth - availableWidth;
if (totalWidth > availableWidth && totalRibbonTabItemsWidth > 0)
{
if (totalReduction >= totalRibbonTabItemsWidth - (minimumSize * ribbonTabItems.Count + ribbonTabItems.Count - 1))
{
foreach (RibbonTabItem item in ribbonTabItems)
{
item.WidthInternal = minimumSize;
item.ReducedSize = true;
}
}
else
{
float reduction = 1 - (float)totalReduction / (float)totalRibbonTabItemsWidth;
bool reducedSize = false;
if (reduction <= .75)
reducedSize = true;
for (int i = 0; i < ribbonTabItems.Count; i++)
{
RibbonTabItem item = ribbonTabItems[i] as RibbonTabItem;
item.ReducedSize = reducedSize;
if (i == ribbonTabItems.Count - 1)
{
item.WidthInternal -= totalReduction;
}
else
{
int width = (int)(item.WidthInternal * reduction);
if (width < minimumSize)
width = minimumSize;
totalReduction -= (item.WidthInternal - width);
item.WidthInternal = width;
}
}
}
}
return false;
}
protected override bool ShouldCollapseParentItem()
{
BaseItem expandedItem = ExpandedItem();
if (expandedItem is ApplicationButton)
{
RibbonStrip strip = this.ContainerControl as RibbonStrip;
if (strip != null)
{
BaseItem item = strip.HitTest(MouseDownPt);
if (item is SystemCaptionItem)
return false;
}
}
return true;
}
}
}