DotNet 4.8.1 build of DotNetBar
This commit is contained in:
115
PROMS/DotNetBar Source Code/Ribbon/RibbonTabItemContainer.cs
Normal file
115
PROMS/DotNetBar Source Code/Ribbon/RibbonTabItemContainer.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user