#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 /// /// Constructor /// /// Associated SuperTabStripItem 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 /// /// Gets or sets the ControlBox Bounds /// [Browsable(false)] public override Rectangle Bounds { get { return (base.Bounds); } set { if (base.Bounds.Equals(value) == false) { base.Bounds = value; RecalcLayout(); } } } #endregion #region CloseBox /// /// Gets the CloseBox /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public SuperTabCloseBox CloseBox { get { return (_CloseBox); } } #endregion #region MenuBox /// /// Gets the MenuBox /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public SuperTabMenuBox MenuBox { get { return (_MenuBox); } } #endregion #region Visible /// /// Gets or sets the ControlBox Visible state /// public override bool Visible { get { return base.Visible; } set { if (base.Visible != value) { base.Visible = value; MyRefresh(); } } } #endregion #endregion #region Internal properties #region IsMouseDown /// /// Gets the MouseDown state /// internal bool IsMouseDown { get { return (_IsMouseDown); } } #endregion #region IsMouseOver /// /// Gets the MouseOver state /// internal bool IsMouseOver { get { return (_IsMouseOver); } } #endregion #region TabDisplay /// /// Gets the TabStrip TabDisplay /// internal SuperTabStripBaseDisplay TabDisplay { get { return (_TabStripItem.TabDisplay); } } #endregion #endregion #region RecalcSize /// /// Performs RecalcSize processing /// 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 /// /// Performs RecalcLayout processing /// 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 /// /// Performs individual running layout processing for the given BaseItem /// /// Item to Layout /// Running Layout Size /// Whether a recalcSize is needed /// New running Size 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 /// /// Refresh code /// private void MyRefresh() { if (TabDisplay != null) { SuperTabStripItem tsi = TabDisplay.TabStripItem; if (tsi != null) { tsi.NeedRecalcSize = true; tsi.Refresh(); } } } #endregion #region Paint /// /// Paint processing /// /// public override void Paint(ItemPaintArgs p) { foreach (BaseItem item in SubItems) { if (item.Visible == true) item.Paint(p); } } #endregion #region Mouse support #region InternalMouseEnter /// /// InternalMouseEnter /// public override void InternalMouseEnter() { base.InternalMouseEnter(); _IsMouseOver = true; } #endregion #region InternalMouseLeave /// /// InternalMouseLeave /// public override void InternalMouseLeave() { base.InternalMouseLeave(); _IsMouseOver = false; if (_HotItem != null) { _HotItem.InternalMouseLeave(); _HotItem = null; } } #endregion #region InternalMouseMove /// /// InternalMouseMove /// /// public override void InternalMouseMove(MouseEventArgs objArg) { base.InternalMouseMove(objArg); _HotItem = GetBoxItemFromPoint(objArg.Location); } #endregion #region InternalMouseDown /// /// InternalMouseDown /// /// public override void InternalMouseDown(MouseEventArgs objArg) { base.InternalMouseDown(objArg); _IsMouseDown = true; _MouseDownItem = _HotItem; } #endregion #region InternalMouseUp /// /// InternalMouseUp /// /// 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 /// /// Gets the ControlBoxItem from the given Point /// /// /// 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 /// /// OnItemAdded /// /// protected internal override void OnItemAdded(BaseItem item) { base.OnItemAdded(item); MyRefresh(); } #endregion #region OnAfterItemRemoved /// /// OnAfterItemRemoved /// /// protected internal override void OnAfterItemRemoved(BaseItem item, int itemIndex) { base.OnAfterItemRemoved(item, itemIndex); MyRefresh(); } #endregion #region RemoveUserItems /// /// Removes all user added items from the ControlBox /// 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 /// /// Returns copy of the item. /// 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