DotNet 4.8.1 build of DotNetBar
This commit is contained in:
267
PROMS/DotNetBar Source Code/Ribbon/CaptionItemContainer.cs
Normal file
267
PROMS/DotNetBar Source Code/Ribbon/CaptionItemContainer.cs
Normal file
@@ -0,0 +1,267 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
|
||||
namespace DevComponents.DotNetBar
|
||||
{
|
||||
/// <summary>
|
||||
/// Defines container for ribbon caption layout and quick access toolbar customization and overflow.
|
||||
/// </summary>
|
||||
internal class CaptionItemContainer : GenericItemContainer
|
||||
{
|
||||
#region Private Variables
|
||||
private int m_MinTitleSize = 40;
|
||||
private int m_MoreItemsLeft = 0;
|
||||
private CustomizeItem m_CustomizeItem = null;
|
||||
private int m_MaxItemHeight = 0;
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
public CaptionItemContainer():base()
|
||||
{
|
||||
this.FirstItemSpacing = 3;
|
||||
this.ToolbarItemsAlign = eContainerVerticalAlignment.Top;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Layout
|
||||
public override void RecalcSize()
|
||||
{
|
||||
if (m_MoreItems != null && m_MoreItems.Expanded)
|
||||
m_MoreItems.Expanded = false;
|
||||
|
||||
m_RecalculatingSize = true;
|
||||
int width = m_MinTitleSize;
|
||||
if (this.ContainerControl is Ribbon.QatToolbar)
|
||||
width = 0;
|
||||
int count = this.SubItems.Count;
|
||||
int firstFarIndex = -1;
|
||||
int maxHeight = 0;
|
||||
int maxItemHeight = 0;
|
||||
int moreItemsHeight = Dpi.Height22;
|
||||
bool hasQatCustomizeItem = false;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
BaseItem item = this.SubItems[i];
|
||||
if (!item.Visible)
|
||||
continue;
|
||||
item.RecalcSize();
|
||||
item.Displayed = true;
|
||||
width += (item.WidthInternal + (i==0?this.FirstItemSpacing:m_ItemSpacing));
|
||||
|
||||
if (item.ItemAlignment == eItemAlignment.Far && firstFarIndex == -1)
|
||||
firstFarIndex = i;
|
||||
if (firstFarIndex == -1)
|
||||
moreItemsHeight = item.HeightInternal;
|
||||
|
||||
if (item.HeightInternal > maxHeight)
|
||||
maxHeight = item.HeightInternal;
|
||||
if (item.HeightInternal > maxItemHeight && !(item is ApplicationButton || item is SystemCaptionItem))
|
||||
maxItemHeight = item.HeightInternal;
|
||||
|
||||
if (item is QatCustomizeItem || item is QatOverflowItem)
|
||||
hasQatCustomizeItem = true;
|
||||
}
|
||||
|
||||
if (hasQatCustomizeItem)
|
||||
width += maxHeight / 2;
|
||||
|
||||
m_MaxItemHeight = maxItemHeight;
|
||||
if (width < this.WidthInternal)
|
||||
{
|
||||
m_RecalculatingSize = false;
|
||||
base.RecalcSize();
|
||||
return;
|
||||
}
|
||||
if (firstFarIndex == -1)
|
||||
firstFarIndex = this.SubItems.Count;
|
||||
for (int i = firstFarIndex - 1; i >= 0; i--)
|
||||
{
|
||||
BaseItem item = this.SubItems[i];
|
||||
if (!item.Visible)
|
||||
continue;
|
||||
width -= item.WidthInternal;
|
||||
item.Displayed = false;
|
||||
if (width + DisplayMoreItem.FixedSize + maxHeight/2 < this.WidthInternal)
|
||||
break;
|
||||
}
|
||||
|
||||
int x = this.LeftInternal + m_PaddingLeft;
|
||||
int y = this.TopInternal + m_PaddingTop;
|
||||
int loopTo = count;
|
||||
if (firstFarIndex >= 0)
|
||||
loopTo = firstFarIndex - 1;
|
||||
bool oneNearVisible = false;
|
||||
for (int i = 0; i < loopTo; i++)
|
||||
{
|
||||
BaseItem item = this.SubItems[i];
|
||||
if (!item.Visible || !item.Displayed)
|
||||
continue;
|
||||
oneNearVisible = true;
|
||||
Rectangle rb = new Rectangle(x, y, item.WidthInternal, item.HeightInternal);
|
||||
if (!(item is ApplicationButton || item is SystemCaptionItem))
|
||||
rb.Y += (maxItemHeight - item.HeightInternal) / 2;
|
||||
item.Bounds = rb;
|
||||
x += (item.WidthInternal + (i == 0 ? this.FirstItemSpacing : m_ItemSpacing));
|
||||
}
|
||||
m_MoreItemsLeft = x + maxHeight/2;
|
||||
|
||||
if (firstFarIndex >= 0)
|
||||
{
|
||||
x = this.DisplayRectangle.Right - m_PaddingRight;
|
||||
for (int i = count - 1; i >= firstFarIndex; i--)
|
||||
{
|
||||
BaseItem item = this.SubItems[i];
|
||||
if (!item.Visible || !item.Displayed)
|
||||
continue;
|
||||
x -= item.WidthInternal;
|
||||
item.Bounds = new Rectangle(x, y, item.WidthInternal, item.HeightInternal);
|
||||
x -= m_ItemSpacing;
|
||||
}
|
||||
}
|
||||
|
||||
m_Rect.Height = maxHeight + m_PaddingTop + m_PaddingBottom;
|
||||
if (oneNearVisible)
|
||||
{
|
||||
// Add Display More item...
|
||||
CreateMoreItemsButton(this.IsRightToLeft);
|
||||
|
||||
m_MoreItems.HeightInternal = moreItemsHeight;
|
||||
m_MoreItems.RecalcSize();
|
||||
}
|
||||
else if(m_MoreItems!=null)
|
||||
{
|
||||
// Clean up, we don't need this anymore
|
||||
m_MoreItems.Dispose();
|
||||
m_MoreItems = null;
|
||||
}
|
||||
|
||||
m_NeedRecalcSize = false;
|
||||
m_RecalculatingSize = false;
|
||||
}
|
||||
|
||||
protected override int GetItemLayoutWidth(BaseItem objItem)
|
||||
{
|
||||
if (objItem is QatCustomizeItem || objItem is QatOverflowItem)
|
||||
return objItem.WidthInternal + this.HeightInternal / 2;
|
||||
return base.GetItemLayoutWidth(objItem);
|
||||
}
|
||||
|
||||
protected override int GetItemLayoutX(BaseItem objItem, int iX)
|
||||
{
|
||||
if (objItem is QatCustomizeItem || objItem is QatOverflowItem)
|
||||
return iX + this.HeightInternal / 2;
|
||||
return base.GetItemLayoutX(objItem, iX);
|
||||
}
|
||||
|
||||
protected override int GetItemLayoutY(BaseItem objItem, int iY)
|
||||
{
|
||||
if (!(objItem is ApplicationButton || objItem is SystemCaptionItem || objItem is DevComponents.DotNetBar.Metro.MetroAppButton))
|
||||
return iY + (m_MaxItemHeight - objItem.HeightInternal) / 2;
|
||||
return base.GetItemLayoutY(objItem, iY);
|
||||
}
|
||||
|
||||
internal int MaxItemHeight
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_MaxItemHeight;
|
||||
}
|
||||
}
|
||||
|
||||
protected override Point GetMoreItemsLocation(bool isRightToLeft)
|
||||
{
|
||||
if (m_MoreItems == null)
|
||||
return Point.Empty;
|
||||
Point p = Point.Empty;
|
||||
if (m_Orientation == eOrientation.Vertical)
|
||||
{
|
||||
p.X = m_Rect.Left + m_PaddingLeft;
|
||||
p.Y = m_MoreItemsLeft;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isRightToLeft)
|
||||
p.X = m_Rect.X + m_PaddingLeft;
|
||||
else
|
||||
p.X = m_MoreItemsLeft;
|
||||
p.Y = m_Rect.Top + m_PaddingTop;
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
protected override void CreateMoreItemsButton(bool isRightToLeft)
|
||||
{
|
||||
if (m_MoreItems == null)
|
||||
{
|
||||
m_MoreItems = new QatOverflowItem();
|
||||
m_MoreItems.Style = m_Style;
|
||||
m_MoreItems.SetParent(this);
|
||||
m_MoreItems.ThemeAware = this.ThemeAware;
|
||||
}
|
||||
if (this.MoreItemsOnMenu)
|
||||
m_MoreItems.PopupType = ePopupType.Menu;
|
||||
else
|
||||
m_MoreItems.PopupType = ePopupType.ToolBar;
|
||||
m_MoreItems.Orientation = m_Orientation;
|
||||
m_MoreItems.Displayed = true;
|
||||
|
||||
if (m_Orientation == eOrientation.Vertical)
|
||||
{
|
||||
m_MoreItems.WidthInternal = m_Rect.Width - (m_PaddingLeft + m_PaddingRight);
|
||||
m_MoreItems.RecalcSize();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_MoreItems.HeightInternal = m_Rect.Height - (m_PaddingTop + m_PaddingBottom);
|
||||
m_MoreItems.RecalcSize();
|
||||
}
|
||||
|
||||
Point loc = GetMoreItemsLocation(isRightToLeft);
|
||||
m_MoreItems.LeftInternal = loc.X;
|
||||
m_MoreItems.TopInternal = loc.Y;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Internal Implementation
|
||||
protected internal override void OnItemAdded(BaseItem objItem)
|
||||
{
|
||||
base.OnItemAdded(objItem);
|
||||
|
||||
BaseItem item = objItem;
|
||||
if (item is CustomizeItem)
|
||||
m_CustomizeItem = (CustomizeItem)item;
|
||||
else if (m_CustomizeItem != null)
|
||||
{
|
||||
bool added = false;
|
||||
if(this.SubItems.Contains(m_CustomizeItem))
|
||||
this.SubItems._Remove(m_CustomizeItem);
|
||||
for (int i = this.SubItems.Count - 1; i > 0; i--)
|
||||
{
|
||||
if (this.SubItems[i].ItemAlignment == eItemAlignment.Near && !(this.SubItems[i] is SystemCaptionItem))
|
||||
{
|
||||
this.SubItems._Add(m_CustomizeItem, i+1);
|
||||
added = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!added)
|
||||
{
|
||||
if (this.SubItems.Count > 0 && this.SubItems[this.SubItems.Count - 1] is SystemCaptionItem)
|
||||
this.SubItems._Add(m_CustomizeItem, this.SubItems.Count - 2);
|
||||
else
|
||||
this.SubItems._Add(m_CustomizeItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected internal override void OnAfterItemRemoved(BaseItem objItem, int itemIndex)
|
||||
{
|
||||
if (objItem == m_CustomizeItem)
|
||||
m_CustomizeItem = null;
|
||||
base.OnAfterItemRemoved(objItem, itemIndex);
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user