666 lines
16 KiB
C#
666 lines
16 KiB
C#
#if FRAMEWORK20
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
public class SuperTabControlBox : BaseItem
|
|
{
|
|
#region Private variables
|
|
|
|
private SuperTabStripItem _TabStripItem;
|
|
|
|
private SuperTabCloseBox _CloseBox;
|
|
private SuperTabMenuBox _MenuBox;
|
|
|
|
private BaseItem _HotItem;
|
|
private BaseItem _MouseDownItem;
|
|
|
|
private bool _IsMouseOver;
|
|
private bool _IsMouseDown;
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="tabStripItem">Associated SuperTabStripItem</param>
|
|
public SuperTabControlBox(SuperTabStripItem tabStripItem)
|
|
{
|
|
_TabStripItem = tabStripItem;
|
|
|
|
MouseDownCapture = true;
|
|
MouseUpNotification = true;
|
|
|
|
Style = eDotNetBarStyle.Office2007;
|
|
|
|
_MenuBox = new SuperTabMenuBox(this);
|
|
_CloseBox = new SuperTabCloseBox(this);
|
|
|
|
_MenuBox.Visible = true;
|
|
_CloseBox.Visible = false;
|
|
|
|
SetParent(tabStripItem);
|
|
SetIsContainer(true);
|
|
|
|
SubItems.Add(_MenuBox);
|
|
SubItems.Add(_CloseBox);
|
|
}
|
|
|
|
#region Public override designer hiding
|
|
|
|
[Browsable(false)]
|
|
public override bool BeginGroup
|
|
{
|
|
get { return base.BeginGroup; }
|
|
set { base.BeginGroup = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool AutoCollapseOnClick
|
|
{
|
|
get { return base.AutoCollapseOnClick; }
|
|
set { base.AutoCollapseOnClick = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool CanCustomize
|
|
{
|
|
get { return base.CanCustomize; }
|
|
set { base.CanCustomize = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string Category
|
|
{
|
|
get { return base.Category; }
|
|
set { base.Category = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool ClickAutoRepeat
|
|
{
|
|
get { return base.ClickAutoRepeat; }
|
|
set { base.ClickAutoRepeat = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override int ClickRepeatInterval
|
|
{
|
|
get { return base.ClickRepeatInterval; }
|
|
set { base.ClickRepeatInterval = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override Cursor Cursor
|
|
{
|
|
get { return base.Cursor; }
|
|
set { base.Cursor = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool Enabled
|
|
{
|
|
get { return base.Enabled; }
|
|
set { base.Enabled = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool Stretch
|
|
{
|
|
get { return base.Stretch; }
|
|
set { base.Stretch = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string Text
|
|
{
|
|
get { return base.Text; }
|
|
set { base.Text = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool ThemeAware
|
|
{
|
|
get { return base.ThemeAware; }
|
|
set { base.ThemeAware = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string Tooltip
|
|
{
|
|
get { return base.Tooltip; }
|
|
set { base.Tooltip = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override eItemAlignment ItemAlignment
|
|
{
|
|
get { return base.ItemAlignment; }
|
|
set { base.ItemAlignment = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string KeyTips
|
|
{
|
|
get { return base.KeyTips; }
|
|
set { base.KeyTips = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override ShortcutsCollection Shortcuts
|
|
{
|
|
get { return base.Shortcuts; }
|
|
set { base.Shortcuts = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string Description
|
|
{
|
|
get { return base.Description; }
|
|
set { base.Description = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool GlobalItem
|
|
{
|
|
get { return base.GlobalItem; }
|
|
set { base.GlobalItem = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool ShowSubItems
|
|
{
|
|
get { return base.ShowSubItems; }
|
|
set { base.ShowSubItems = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string GlobalName
|
|
{
|
|
get { return base.GlobalName; }
|
|
set { base.GlobalName = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override Command Command
|
|
{
|
|
get { return base.Command; }
|
|
set { base.Command = value; }
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override object CommandParameter
|
|
{
|
|
get { return base.CommandParameter; }
|
|
set { base.CommandParameter = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public properties
|
|
|
|
#region Bounds
|
|
|
|
/// <summary>
|
|
/// Gets or sets the ControlBox Bounds
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public override Rectangle Bounds
|
|
{
|
|
get { return (base.Bounds); }
|
|
|
|
set
|
|
{
|
|
if (base.Bounds.Equals(value) == false)
|
|
{
|
|
base.Bounds = value;
|
|
|
|
RecalcLayout();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CloseBox
|
|
|
|
/// <summary>
|
|
/// Gets the CloseBox
|
|
/// </summary>
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
|
public SuperTabCloseBox CloseBox
|
|
{
|
|
get { return (_CloseBox); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region MenuBox
|
|
|
|
/// <summary>
|
|
/// Gets the MenuBox
|
|
/// </summary>
|
|
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
|
public SuperTabMenuBox MenuBox
|
|
{
|
|
get { return (_MenuBox); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Visible
|
|
|
|
/// <summary>
|
|
/// Gets or sets the ControlBox Visible state
|
|
/// </summary>
|
|
public override bool Visible
|
|
{
|
|
get { return base.Visible; }
|
|
|
|
set
|
|
{
|
|
if (base.Visible != value)
|
|
{
|
|
base.Visible = value;
|
|
|
|
MyRefresh();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Internal properties
|
|
|
|
#region IsMouseDown
|
|
|
|
/// <summary>
|
|
/// Gets the MouseDown state
|
|
/// </summary>
|
|
internal bool IsMouseDown
|
|
{
|
|
get { return (_IsMouseDown); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IsMouseOver
|
|
|
|
/// <summary>
|
|
/// Gets the MouseOver state
|
|
/// </summary>
|
|
internal bool IsMouseOver
|
|
{
|
|
get { return (_IsMouseOver); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TabDisplay
|
|
|
|
/// <summary>
|
|
/// Gets the TabStrip TabDisplay
|
|
/// </summary>
|
|
internal SuperTabStripBaseDisplay TabDisplay
|
|
{
|
|
get { return (_TabStripItem.TabDisplay); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region RecalcSize
|
|
|
|
/// <summary>
|
|
/// Performs RecalcSize processing
|
|
/// </summary>
|
|
public override void RecalcSize()
|
|
{
|
|
Size size = Size.Empty;
|
|
|
|
foreach (BaseItem item in SubItems)
|
|
size = LayoutItem(item, size, true);
|
|
|
|
WidthInternal = size.Width;
|
|
HeightInternal = size.Height;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region RecalcLayout
|
|
|
|
/// <summary>
|
|
/// Performs RecalcLayout processing
|
|
/// </summary>
|
|
private void RecalcLayout()
|
|
{
|
|
Size size = Size.Empty;
|
|
|
|
if (_TabStripItem.IsRightToLeft)
|
|
{
|
|
int closeIndex = SubItems.IndexOf(_CloseBox);
|
|
int menuIndex = SubItems.IndexOf(_MenuBox);
|
|
|
|
if (menuIndex >= 0 && closeIndex > menuIndex)
|
|
{
|
|
SubItems.Remove(_CloseBox);
|
|
SubItems.Insert(menuIndex, _CloseBox);
|
|
}
|
|
}
|
|
|
|
foreach (BaseItem item in SubItems)
|
|
size = LayoutItem(item, size, false);
|
|
|
|
Refresh();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region LayoutItem
|
|
|
|
/// <summary>
|
|
/// Performs individual running layout processing for the given BaseItem
|
|
/// </summary>
|
|
/// <param name="item">Item to Layout</param>
|
|
/// <param name="size">Running Layout Size</param>
|
|
/// <param name="recalc">Whether a recalcSize is needed</param>
|
|
/// <returns>New running Size</returns>
|
|
private Size LayoutItem(BaseItem item, Size size, bool recalc)
|
|
{
|
|
if (item.Visible == true)
|
|
{
|
|
// Recalc if requested
|
|
|
|
if (recalc == true)
|
|
item.RecalcSize();
|
|
|
|
// If this is the first item, then give
|
|
// us a little padding around the ControlBox
|
|
|
|
if (size.IsEmpty == true)
|
|
{
|
|
if (Orientation == eOrientation.Horizontal)
|
|
size.Width += Dpi.Width5;
|
|
else
|
|
size.Height += Dpi.Height5;
|
|
}
|
|
|
|
// Get the item Bounds
|
|
|
|
Rectangle r = new Rectangle(Bounds.X, Bounds.Y, item.WidthInternal, item.HeightInternal);
|
|
|
|
// Set the item location
|
|
|
|
if (_TabStripItem.IsVertical == true)
|
|
{
|
|
r.Y += size.Height;
|
|
r.X += (Bounds.Width - r.Width) / 2;
|
|
}
|
|
else
|
|
{
|
|
r.X += size.Width;
|
|
r.Y += (Bounds.Height - r.Height) / 2;
|
|
}
|
|
|
|
// Set the Bounds
|
|
|
|
item.Bounds = r;
|
|
|
|
// Set the item Size
|
|
|
|
if (_TabStripItem.IsVertical == true)
|
|
{
|
|
size.Height += item.HeightInternal + Dpi.Height2;
|
|
|
|
if (item.WidthInternal > size.Width)
|
|
size.Width = item.WidthInternal;
|
|
}
|
|
else
|
|
{
|
|
size.Width += item.WidthInternal + Dpi.Width2;
|
|
|
|
if (item.HeightInternal > size.Height)
|
|
size.Height = item.HeightInternal;
|
|
}
|
|
|
|
// Set its display status
|
|
|
|
if (DesignMode == false)
|
|
item.Displayed = true;
|
|
}
|
|
|
|
return (size);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region MyRefresh
|
|
|
|
/// <summary>
|
|
/// Refresh code
|
|
/// </summary>
|
|
private void MyRefresh()
|
|
{
|
|
if (TabDisplay != null)
|
|
{
|
|
SuperTabStripItem tsi = TabDisplay.TabStripItem;
|
|
|
|
if (tsi != null)
|
|
{
|
|
tsi.NeedRecalcSize = true;
|
|
tsi.Refresh();
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Paint
|
|
|
|
/// <summary>
|
|
/// Paint processing
|
|
/// </summary>
|
|
/// <param name="p"></param>
|
|
public override void Paint(ItemPaintArgs p)
|
|
{
|
|
foreach (BaseItem item in SubItems)
|
|
{
|
|
if (item.Visible == true)
|
|
item.Paint(p);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Mouse support
|
|
|
|
#region InternalMouseEnter
|
|
|
|
/// <summary>
|
|
/// InternalMouseEnter
|
|
/// </summary>
|
|
public override void InternalMouseEnter()
|
|
{
|
|
base.InternalMouseEnter();
|
|
|
|
_IsMouseOver = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InternalMouseLeave
|
|
|
|
/// <summary>
|
|
/// InternalMouseLeave
|
|
/// </summary>
|
|
public override void InternalMouseLeave()
|
|
{
|
|
base.InternalMouseLeave();
|
|
|
|
_IsMouseOver = false;
|
|
|
|
if (_HotItem != null)
|
|
{
|
|
_HotItem.InternalMouseLeave();
|
|
|
|
_HotItem = null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InternalMouseMove
|
|
|
|
/// <summary>
|
|
/// InternalMouseMove
|
|
/// </summary>
|
|
/// <param name="objArg"></param>
|
|
public override void InternalMouseMove(MouseEventArgs objArg)
|
|
{
|
|
base.InternalMouseMove(objArg);
|
|
|
|
_HotItem = GetBoxItemFromPoint(objArg.Location);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InternalMouseDown
|
|
|
|
/// <summary>
|
|
/// InternalMouseDown
|
|
/// </summary>
|
|
/// <param name="objArg"></param>
|
|
public override void InternalMouseDown(MouseEventArgs objArg)
|
|
{
|
|
base.InternalMouseDown(objArg);
|
|
|
|
_IsMouseDown = true;
|
|
_MouseDownItem = _HotItem;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InternalMouseUp
|
|
|
|
/// <summary>
|
|
/// InternalMouseUp
|
|
/// </summary>
|
|
/// <param name="objArg"></param>
|
|
public override void InternalMouseUp(MouseEventArgs objArg)
|
|
{
|
|
base.InternalMouseUp(objArg);
|
|
|
|
_IsMouseDown = false;
|
|
|
|
if (_MouseDownItem != null)
|
|
{
|
|
if (_MouseDownItem != _HotItem)
|
|
_MouseDownItem.InternalMouseUp(objArg);
|
|
|
|
_MouseDownItem = null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region GetBoxItemFromPoint
|
|
|
|
/// <summary>
|
|
/// Gets the ControlBoxItem from the given Point
|
|
/// </summary>
|
|
/// <param name="pt"></param>
|
|
/// <returns></returns>
|
|
private BaseItem GetBoxItemFromPoint(Point pt)
|
|
{
|
|
foreach (BaseItem item in SubItems)
|
|
{
|
|
if (item.Visible == true)
|
|
{
|
|
if (item.Bounds.Contains(pt))
|
|
return (item);
|
|
}
|
|
}
|
|
|
|
return (null);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnItemAdded
|
|
|
|
/// <summary>
|
|
/// OnItemAdded
|
|
/// </summary>
|
|
/// <param name="item"></param>
|
|
protected internal override void OnItemAdded(BaseItem item)
|
|
{
|
|
base.OnItemAdded(item);
|
|
|
|
MyRefresh();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region OnAfterItemRemoved
|
|
|
|
/// <summary>
|
|
/// OnAfterItemRemoved
|
|
/// </summary>
|
|
/// <param name="item"></param>
|
|
protected internal override void OnAfterItemRemoved(BaseItem item, int itemIndex)
|
|
{
|
|
base.OnAfterItemRemoved(item, itemIndex);
|
|
|
|
MyRefresh();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region RemoveUserItems
|
|
|
|
/// <summary>
|
|
/// Removes all user added items from the ControlBox
|
|
/// </summary>
|
|
public void RemoveUserItems()
|
|
{
|
|
for (int i = SubItems.Count - 1; i >= 0; i--)
|
|
{
|
|
if (SubItems[i] != _MenuBox && SubItems[i] != _CloseBox)
|
|
SubItems._RemoveAt(i);
|
|
}
|
|
|
|
MyRefresh();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Copy object support
|
|
|
|
/// <summary>
|
|
/// Returns copy of the item.
|
|
/// </summary>
|
|
public override BaseItem Copy()
|
|
{
|
|
SuperTabControlBox objCopy = new SuperTabControlBox(_TabStripItem);
|
|
CopyToItem(objCopy);
|
|
|
|
return (objCopy);
|
|
}
|
|
|
|
protected override void CopyToItem(BaseItem copy)
|
|
{
|
|
SuperTabControlBox objCopy = copy as SuperTabControlBox;
|
|
base.CopyToItem(objCopy);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
#endif |