3834 lines
96 KiB
C#

#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Media;
using System.Windows.Forms;
using DevComponents.DotNetBar.Rendering;
namespace DevComponents.DotNetBar
{
public class SuperTabStripItem : BaseItem, IDesignTimeProvider
{
#region Events
/// <summary>
/// Occurs when a tab is added to the Tabs collection
/// </summary>
[Description("Occurs when a tab is added to the Tabs collection.")]
public event EventHandler<SuperTabStripTabItemOpenEventArgs> TabItemOpen;
/// <summary>
/// Occurs when a tab is about to Close
/// </summary>
[Description("Occurs when a tab is about to Close.")]
public event EventHandler<SuperTabStripTabItemCloseEventArgs> TabItemClose;
/// <summary>
/// Occurs when a tab is removed from the Tabs collection
/// </summary>
[Description("Occurs when a tab is removed from the Tabs collection.")]
public event EventHandler<SuperTabStripTabRemovedEventArgs> TabRemoved;
/// <summary>
/// Occurs when a tab is about to be displayed
/// </summary>
[Description("Occurs when a tab is about to be displayed.")]
public event EventHandler<SuperTabStripBeforeTabDisplayEventArgs> BeforeTabDisplay;
/// <summary>
/// Occurs when a tab is being moved or dragged by the user
/// </summary>
[Description("Occurs when a tab is being moved or dragged by the user.")]
public event EventHandler<SuperTabStripTabMovingEventArgs> TabMoving;
/// <summary>
/// Occurs when a tab has been moved or dragged by the user
/// </summary>
[Description("Occurs when a tab has been moved or dragged by the user.")]
public event EventHandler<SuperTabStripTabMovedEventArgs> TabMoved;
/// <summary>
/// Occurs when the Selected tab is changing
/// </summary>
[Description("Occurs when the Selected tab is changing.")]
public event EventHandler<SuperTabStripSelectedTabChangingEventArgs> SelectedTabChanging;
/// <summary>
/// Occurs when the Selected tab has changed
/// </summary>
[Description("Occurs when the Selected tab has changed.")]
public event EventHandler<SuperTabStripSelectedTabChangedEventArgs> SelectedTabChanged;
/// <summary>
/// Occurs when the control needs a tab's bordering path
/// </summary>
[Description("Occurs when the control needs a tab's bordering path.")]
public event EventHandler<SuperTabGetTabItemPathEventArgs> GetTabItemPath;
/// <summary>
/// Occurs when the control needs a tab's Content Rectangle
/// </summary>
[Description("Occurs when the control needs a tab's Content Rectangle.")]
public event EventHandler<SuperTabGetTabItemContentRectangleEventArgs> GetTabItemContentRectangle;
/// <summary>
/// Occurs when the control needs to measure a tab
/// </summary>
[Description("Occurs when the control needs to measure a tab.")]
public event EventHandler<SuperTabMeasureTabItemEventArgs> MeasureTabItem;
/// <summary>
/// Occurs before any tab rendering is done
/// </summary>
[Description("Occurs before any tab rendering is done.")]
public event EventHandler<SuperTabPreRenderTabItemEventArgs> PreRenderTabItem;
/// <summary>
/// Occurs After all tab rendering is complete
/// </summary>
[Description("Occurs After all tab rendering is complete.")]
public event EventHandler<SuperTabPostRenderTabItemEventArgs> PostRenderTabItem;
/// <summary>
/// Occurs when the control needs to get the tab's Text Bounds
/// </summary>
[Description("Occurs when the control needs to get the tab's Text Bounds.")]
public event EventHandler<SuperTabGetTabTextBoundsEventArgs> GetTabTextBounds;
/// <summary>
/// Occurs when the control needs to get the tab's Image Bounds
/// </summary>
[Description("Occurs when the control needs to get the tab's Image Bounds.")]
public event EventHandler<SuperTabGetTabImageBoundsEventArgs> GetTabImageBounds;
/// <summary>
/// Occurs when the control needs to get the tab's Close Button Bounds
/// </summary>
[Description("Occurs when the control needs to get the tab's Close Button Bounds.")]
public event EventHandler<SuperTabGetTabCloseBoundsEventArgs> GetTabCloseBounds;
/// <summary>
/// Occurs when the TabStrip background needs painted
/// </summary>
[Description("Occurs when the TabStrip background needs painted.")]
public event EventHandler<SuperTabStripPaintBackgroundEventArgs> TabStripPaintBackground;
/// <summary>
/// Occurs when the TabStrip TabColor has changed
/// </summary>
[Description("Occurs when the TabStrip TabColor has changed.")]
public event EventHandler<SuperTabStripTabColorChangedEventArgs> TabStripTabColorChanged;
/// <summary>
/// Occurs when the TabStrip Color has changed
/// </summary>
[Description("Occurs when the TabStrip TabColor has changed.")]
public event EventHandler<EventArgs> TabStripColorChanged;
#endregion
#region Private variables
private eSuperTabStyle _TabStyle = eSuperTabStyle.Office2007;
private eSuperTabLayoutType _TabLayoutType = eSuperTabLayoutType.SingleLine;
private Image _TabCloseButtonNormal;
private Image _TabCloseButtonHot;
private Image _TabCloseButtonPressed;
private Size _TabCloseButtonSize = new Size(16, 16);
private Size _DefaultTabCloseButtonSize = new Size(16, 16);
private int _TabHorizontalSpacing = 5;
private int _TabVerticalSpacing = 4;
private bool _CloseButtonOnTabsVisible;
private bool _CloseButtonOnTabsAlwaysDisplayed = true;
private bool _DisplaySelectedTextOnly;
private bool _ShowFocusRectangle;
private Size _FixedTabSize = Size.Empty;
private bool _HorizontalText = true;
private bool _AutoCloseTabs = true;
private bool _AutoSelectAttachedControl;
private bool _ReorderTabsEnabled = true;
private bool _RotateVerticalText;
private Font _TabFont;
private Font _SelectedTabFont;
private SuperTabColorTable _TabStripColor = new SuperTabColorTable();
private SuperTabItem _HotTab;
private SuperTabItem _SelectedTab;
private BaseItem _VisibleTab;
private int _SelectedTabIndex;
private SuperTabControlBox _TabControlBox;
private SuperTabStripBaseDisplay _TabDisplay;
private Rectangle _TabItemsBounds;
private SuperTabItem _DesignTimeSelection;
private eTabStripAlignment _TabAlignment = eTabStripAlignment.Top;
private eTabCloseButtonPosition _CloseButtonPosition = eTabCloseButtonPosition.Right;
private SuperTabStrip _TabStrip;
private int _TabLines;
private eItemAlignment _TextAlignment;
private eSuperTabArea _TabArea;
private SuperTabItem _MouseDownTab;
private Point _MouseDownLocation;
private bool _IsTabDragging;
private SuperTabDragWindow _TabDragWindow;
private BaseItem _InsertTab;
private bool _InsertBefore;
private bool _RecalcInProgress;
private Padding _ItemPadding;
private ImageAlignment _ImageAlignment = ImageAlignment.NotSet;
#endregion
/// <summary>
/// Constructor
/// </summary>
/// <param name="tabStrip">Associated SuperTabStrip</param>
public SuperTabStripItem(SuperTabStrip tabStrip)
{
_TabStrip = tabStrip;
_TabControlBox = new SuperTabControlBox(this);
_TabDisplay = new Office2007SuperTabStrip(this);
_ItemPadding = new Padding(0, 0, 0, 0);
SetIsContainer(true);
HookEvents(true);
}
protected override void Dispose(bool disposing)
{
if (BarUtilities.DisposeItemImages && !DesignMode)
{
BarUtilities.DisposeImage(ref _TabCloseButtonNormal);
BarUtilities.DisposeImage(ref _TabCloseButtonHot);
BarUtilities.DisposeImage(ref _TabCloseButtonPressed);
}
if (disposing)
_TabControlBox.Dispose();
base.Dispose(disposing);
}
#region Public properties
#region AutoCloseTabs
/// <summary>
/// Gets or sets AutoCloseTabs
/// </summary>
public bool AutoCloseTabs
{
get { return (_AutoCloseTabs); }
set { _AutoCloseTabs = value; }
}
#endregion
#region AutoSelectAttachedControl
/// <summary>
/// Gets or sets whether the control attached to the TabItem.AttachedControl property
/// is automatically selected when TabItem becomes the selected tab. Default value is true.
/// </summary>
public bool AutoSelectAttachedControl
{
get { return (_AutoSelectAttachedControl); }
set { _AutoSelectAttachedControl = value; }
}
#endregion
#region CloseButton properties
#region TabCloseButtonNormal
/// <summary>
/// Gets or sets TabCloseButtonNormal
/// </summary>
public Image TabCloseButtonNormal
{
get { return (_TabCloseButtonNormal); }
set
{
_TabCloseButtonNormal = value;
_TabCloseButtonSize = (_TabCloseButtonNormal != null)
? _TabCloseButtonNormal.Size : _DefaultTabCloseButtonSize;
MyRefresh();
}
}
#endregion
#region TabCloseButtonHot
/// <summary>
/// Gets or sets TabCloseButtonHot
/// </summary>
public Image TabCloseButtonHot
{
get { return (_TabCloseButtonHot); }
set
{
_TabCloseButtonHot = value;
MyRefresh();
}
}
#endregion
#region TabCloseButtonPressed
/// <summary>
/// Gets or sets TabCloseButtonPressed
/// </summary>
public Image TabCloseButtonPressed
{
get { return (_TabCloseButtonPressed); }
set
{
_TabCloseButtonPressed = value;
MyRefresh();
}
}
#endregion
#region TabHorizontalSpacing
/// <summary>
/// Gets or sets TabHorizontalSpacing
/// </summary>
public int TabHorizontalSpacing
{
get { return (_TabHorizontalSpacing); }
set
{
if (_TabHorizontalSpacing != value)
{
_TabHorizontalSpacing = value;
MyRefresh();
}
}
}
#endregion
#region TabVerticalSpacing
/// <summary>
/// Gets or sets TabVerticalSpacing
/// </summary>
public int TabVerticalSpacing
{
get { return (_TabVerticalSpacing); }
set
{
if (_TabVerticalSpacing != value)
{
_TabVerticalSpacing = value;
MyRefresh();
}
}
}
#endregion
#region CloseButtonOnTabsVisible
/// <summary>
/// Gets or sets CloseButtonOnTabsVisible
/// </summary>
public bool CloseButtonOnTabsVisible
{
get { return (_CloseButtonOnTabsVisible); }
set
{
if (_CloseButtonOnTabsVisible != value)
{
_CloseButtonOnTabsVisible = value;
MyRefresh();
}
}
}
#endregion
#region CloseButtonOnTabsAlwaysDisplayed
/// <summary>
/// Gets or sets CloseButtonOnTabsAlwaysDisplayed
/// </summary>
public bool CloseButtonOnTabsAlwaysDisplayed
{
get { return (_CloseButtonOnTabsAlwaysDisplayed); }
set
{
if (_CloseButtonOnTabsAlwaysDisplayed != value)
{
_CloseButtonOnTabsAlwaysDisplayed = value;
MyRefresh();
}
}
}
#endregion
#region CloseButtonPosition
/// <summary>
/// Gets or sets CloseButtonPosition
/// </summary>
public eTabCloseButtonPosition CloseButtonPosition
{
get { return _CloseButtonPosition; }
set
{
_CloseButtonPosition = value;
MyRefresh();
}
}
#endregion
#endregion
#region ControlBox
/// <summary>
/// Gets the ControlBox
/// </summary>
public SuperTabControlBox ControlBox
{
get { return (_TabControlBox); }
}
#endregion
#region DesignTimeSelection
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public SuperTabItem DesignTimeSelection
{
get { return _DesignTimeSelection; }
set
{
_DesignTimeSelection = value;
Refresh();
}
}
#endregion
#region DisplaySelectedTextOnly
/// <summary>
/// Gets or sets DisplaySelectedTextOnly
/// </summary>
public bool DisplaySelectedTextOnly
{
get { return _DisplaySelectedTextOnly; }
set
{
_DisplaySelectedTextOnly = value;
MyRefresh();
}
}
#endregion
#region Expanded
/// <summary>
/// Gets or set the Expanded state
/// </summary>
public override bool Expanded
{
get { return (base.Expanded); }
set
{
base.Expanded = value;
for (int i = 0; i < SubItems.Count; i++)
SubItems[i].Expanded = value;
if (ControlBox.Visible == true)
{
ControlBox.Expanded = value;
for (int i = 0; i < ControlBox.SubItems.Count; i++)
ControlBox.SubItems[i].Expanded = value;
}
}
}
#endregion
#region Font properties
#region TabFont
/// <summary>
/// Gets or sets the tab font
/// </summary>
public Font TabFont
{
get { return (_TabFont); }
set
{
_TabFont = value;
ClearSizingFont();
MyRefresh();
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeTabFont()
{
return (_TabFont != null);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetTabFont()
{
TabFont = null;
}
#region ClearSizingFont
private void ClearSizingFont()
{
foreach (BaseItem item in SubItems)
{
SuperTabItem tab = item as SuperTabItem;
if (tab != null)
tab.SizingFont = null;
}
}
#endregion
#endregion
#region SelectedTabFont
/// <summary>
/// Gets or sets the selected tab font
/// </summary>
public Font SelectedTabFont
{
get { return (_SelectedTabFont); }
set
{
_SelectedTabFont = value;
ClearSizingFont();
MyRefresh();
}
}
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeSelectedTabFont()
{
return (_SelectedTabFont != null);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public void ResetSelectedTabFont()
{
SelectedTabFont = null;
}
#endregion
#endregion
#region HorizontalText
/// <summary>
/// Gets or sets the HorizontalText
/// </summary>
public bool HorizontalText
{
get { return (_HorizontalText); }
set
{
_HorizontalText = value;
MyRefresh();
}
}
#endregion
#region ImageAlignment
/// <summary>
/// Gets or sets the default alignment of the Image within the tab
/// </summary>
[DefaultValue(ImageAlignment.NotSet), Category("Appearance")]
[Description("Indicates the default alignment of the Image within the tab.")]
public ImageAlignment ImageAlignment
{
get { return (_ImageAlignment); }
set
{
if (_ImageAlignment != value)
{
_ImageAlignment = value;
MyRefresh();
}
}
}
#endregion
#region ItemPadding
/// <summary>
/// Gets or sets the BaseItem tab padding.
/// </summary>
public Padding ItemPadding
{
get { return (_ItemPadding); }
set { _ItemPadding = value; }
}
#endregion
#region RotateVerticalText
/// <summary>
/// Gets or sets RotateVerticalText
/// </summary>
public bool RotateVerticalText
{
get { return (_RotateVerticalText); }
set
{
_RotateVerticalText = value;
MyRefresh();
}
}
#endregion
#region ShowFocusRectangle
/// <summary>
/// Gets or sets ShowFocusRectangle
/// </summary>
public bool ShowFocusRectangle
{
get { return (_ShowFocusRectangle); }
set { _ShowFocusRectangle = value; }
}
#endregion
#region Tab properties
#region FixedTabSize
/// <summary>
/// Gets or sets the FixedTabSize
/// </summary>
public Size FixedTabSize
{
get { return _FixedTabSize; }
set
{
value.Width = Math.Max(0, value.Width);
value.Height = Math.Max(0, value.Height);
if ((value.Width > 0 || value.Height > 0) && _TabDisplay != null)
{
Size minSize = _TabDisplay.MinTabSize;
if (value.Width > 0)
{
if (minSize.Width > value.Width)
value.Width = minSize.Width;
}
if (value.Height > 0)
{
if (minSize.Height > value.Height)
value.Height = minSize.Height;
}
}
if (_FixedTabSize != value)
{
_FixedTabSize = value;
MyRefresh();
}
}
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeFixedTabSize()
{
return (_FixedTabSize.IsEmpty == false);
}
#endregion
#region IsTabDragging
/// <summary>
/// Gets or sets
/// </summary>
public bool IsTabDragging
{
get { return (_IsTabDragging); }
internal set { _IsTabDragging = value; }
}
#endregion
#region MinTabStripHeight
/// <summary>
/// Gets the MinTabStripHeight
/// </summary>
public int MinTabStripHeight
{
get { return (_TabDisplay.MinTabStripHeight); }
}
#endregion
#region ReorderTabsEnabled
/// <summary>
/// Gets or sets ReorderTabsEnabled
/// </summary>
public bool ReorderTabsEnabled
{
get { return (_ReorderTabsEnabled); }
set { _ReorderTabsEnabled = value; }
}
#endregion
#region SelectedTab
/// <summary>
/// Gets or sets the selected tab
/// </summary>
public SuperTabItem SelectedTab
{
get { return (_SelectedTab); }
set
{
if (value != null)
{
if (value.Visible == true)
SelectTab(value, eEventSource.Code);
}
else
{
SelectTab(null, eEventSource.Code);
}
}
}
#endregion
#region SelectedTabIndex
/// <summary>
/// Gets or sets the selected tab index
/// </summary>
public int SelectedTabIndex
{
get
{
if (_SelectedTab != null)
return (SubItems.IndexOf(_SelectedTab));
return (-1);
}
set
{
if (value >= 0 && value < SubItems.Count)
{
SuperTabItem tab = SubItems[value] as SuperTabItem;
if (tab != null)
{
if (tab.Visible == true)
SelectedTab = tab;
}
else
{
SelectedTab = null;
}
}
}
}
#endregion
#region TabAlignment
/// <summary>
/// Gets or sets the tab alignment
/// </summary>
public eTabStripAlignment TabAlignment
{
get { return (_TabAlignment); }
set
{
if (_TabAlignment != value)
{
_TabAlignment = value;
SyncOrientation();
MyRefresh();
}
}
}
#region SyncOrientation
/// <summary>
/// Syncs the Orientation of each SubItem to
/// the current TabAlignment Orientation
/// </summary>
private void SyncOrientation()
{
eDesignMarkerOrientation orientation = GetTabAlignmentBasedOrientation();
foreach (BaseItem item in SubItems)
item.DesignMarkerOrientation = orientation;
}
#endregion
#region GetTabAlignmentBasedOrientation
/// <summary>
/// Gets the Orientation based upon the current
/// TabAlignment
/// </summary>
/// <returns></returns>
private eDesignMarkerOrientation GetTabAlignmentBasedOrientation()
{
return ((IsVertical == true)
? eDesignMarkerOrientation.Vertical
: eDesignMarkerOrientation.Horizontal);
}
#endregion
#region OnItemAdded
/// <summary>
/// Makes sure all newly added items
/// are set to the design orientation and style
/// </summary>
/// <param name="item"></param>
protected internal override void OnItemAdded(BaseItem item)
{
item.DesignMarkerOrientation = GetTabAlignmentBasedOrientation();
item.Style = GetStyleFromTabStyle();
base.OnItemAdded(item);
}
#endregion
#endregion
#region TabLayoutType
/// <summary>
/// Gets or sets the TabLayoutType
/// </summary>
public eSuperTabLayoutType TabLayoutType
{
get { return (_TabLayoutType); }
set
{
_TabLayoutType = value;
_TabControlBox.Bounds = Rectangle.Empty;
OnTabStyleChanged();
MyRefresh();
}
}
#endregion
#region TabStripColor
/// <summary>
/// Gets or sets the TabStripColor
/// </summary>
public SuperTabColorTable TabStripColor
{
get { return (_TabStripColor); }
set
{
if (_TabStripColor.Equals(value) == false)
{
if (_TabStripColor != null)
_TabStripColor.ColorTableChanged -= ColorTableColorTableChanged;
_TabStripColor = value;
if (value != null)
_TabStripColor.ColorTableChanged += ColorTableColorTableChanged;
OnTabStripColorChanged();
MyRefresh();
}
}
}
#endregion
#region TabStyle
/// <summary>
/// Gets or sets the TabStyle
/// </summary>
public eSuperTabStyle TabStyle
{
get { return (_TabStyle); }
set
{
if (_TabStyle != value)
{
_TabStyle = value;
switch (value)
{
case eSuperTabStyle.Office2007:
_TabDisplay = new Office2007SuperTabStrip(this);
break;
case eSuperTabStyle.Office2010BackstageBlue:
_TabDisplay = new Office2010BackstageSuperTabStrip(this);
break;
case eSuperTabStyle.OneNote2007:
_TabDisplay = new OneNote2007SuperTabStrip(this);
break;
case eSuperTabStyle.OfficeMobile2014:
_TabDisplay = new OfficeMobile2014SuperTabStrip(this);
break;
case eSuperTabStyle.VisualStudio2008Dock:
_TabDisplay = new VS2008DockSuperTabStrip(this);
break;
case eSuperTabStyle.VisualStudio2008Document:
_TabDisplay = new VS2008DocumentSuperTabStrip(this);
break;
case eSuperTabStyle.WinMediaPlayer12:
_TabDisplay = new WinMediaPlayer12SuperTabStrip(this);
break;
}
ApplyTabStyle();
}
}
}
#region ApplyTabStyle
/// <summary>
/// Applies the current TabStyle to each tab and
/// sets the item style to the DotNetBarStyle from the TabStyle
/// </summary>
private void ApplyTabStyle()
{
eDotNetBarStyle style = GetStyleFromTabStyle();
foreach (BaseItem item in SubItems)
{
SuperTabItem tab = item as SuperTabItem;
if (tab != null)
tab.TabStyle = _TabStyle;
item.Style = style;
}
TabStrip.RecalcLayout();
}
#endregion
#region GetStyleFromTabStyle
/// <summary>
/// Gets the DotNetBarStyle from the SuperTabStyle
/// </summary>
/// <returns>eDotNetBarStyle</returns>
private eDotNetBarStyle GetStyleFromTabStyle()
{
eDotNetBarStyle style = eDotNetBarStyle.StyleManagerControlled;
eSuperTabStyle tabStyle = _TabStyle;
if (tabStyle == eSuperTabStyle.VisualStudio2008Dock ||
tabStyle == eSuperTabStyle.VisualStudio2008Document)
{
style = eDotNetBarStyle.VS2005;
}
return style;
}
#endregion
#endregion
#endregion
#region TextAlignment
/// <summary>
/// Gets or sets the TextAlignment
/// </summary>
public eItemAlignment TextAlignment
{
get { return (_TextAlignment); }
set
{
if (_TextAlignment != value)
{
_TextAlignment = value;
Refresh();
}
}
}
#endregion
#endregion
#region Internal properties
#region FirstVisibleTab
/// <summary>
/// Gets the First Visible Tab
/// </summary>
internal SuperTabItem FirstVisibleTab
{
get
{
for (int i = 0; i < SubItems.Count; i++)
{
BaseItem item = SubItems[i];
if (item is SuperTabItem)
{
if (item.Visible == true &&
(item.Enabled == true || DesignMode == true))
{
return ((SuperTabItem)item);
}
}
}
return (null);
}
}
#endregion
#region HotTab
/// <summary>
/// Gets the HotTab
/// </summary>
internal SuperTabItem HotTab
{
get { return (_HotTab); }
}
#endregion
#region InsertTab
/// <summary>
/// Gets the InsertTab
/// </summary>
internal BaseItem InsertTab
{
get { return (_InsertTab); }
}
#endregion
#region InsertBefore
/// <summary>
/// Gets whether to insert before or after
/// </summary>
internal bool InsertBefore
{
get { return (_InsertBefore); }
}
#endregion
#region MouseOverTab
/// <summary>
/// Gets the MouseOver tab
/// </summary>
internal SuperTabItem MouseOverTab
{
get { return (_HotTab); }
}
#endregion
#region IsVertical
/// <summary>
/// Gets TabStrip vertical orientation
/// </summary>
internal bool IsVertical
{
get
{
return (_TabAlignment == eTabStripAlignment.Left ||
_TabAlignment == eTabStripAlignment.Right);
}
}
#endregion
#region LastVisibleTab
/// <summary>
/// Gets the Last Visible Tab
/// </summary>
internal SuperTabItem LastVisibleTab
{
get
{
for (int i = SubItems.Count - 1; i >= 0; i--)
{
BaseItem item = SubItems[i];
if (item is SuperTabItem)
{
if (item.Visible == true &&
(item.Enabled == true || DesignMode == true))
{
return ((SuperTabItem)item);
}
}
}
return (null);
}
}
#endregion
#region TabCloseButtonSize
/// <summary>
/// Gets the tab close button size
/// </summary>
internal Size TabCloseButtonSize
{
get { return (_TabCloseButtonSize); }
}
#endregion
#region TabDisplay
/// <summary>
/// Gets the TabDisplay
/// </summary>
internal SuperTabStripBaseDisplay TabDisplay
{
get { return (_TabDisplay); }
}
#endregion
#region TabItemsBounds
/// <summary>
/// Gets or sets the TabItemsBounds
/// </summary>
internal Rectangle TabItemsBounds
{
get { return (_TabItemsBounds); }
set { _TabItemsBounds = value; }
}
#endregion
#region TabLines
/// <summary>
/// Gets or sets the number of TabLines
/// </summary>
internal int TabLines
{
get { return (_TabLines); }
set { _TabLines = value; }
}
#endregion
#region TabStrip
/// <summary>
/// Gets the TabStrip
/// </summary>
internal SuperTabStrip TabStrip
{
get { return (_TabStrip); }
}
#endregion
#region VisibleTabCount
/// <summary>
/// Gets the visible tab count
/// </summary>
internal int VisibleTabCount
{
get
{
int count = 0;
for (int i = 0; i < SubItems.Count; i++)
{
if (SubItems[i].Parent != null && SubItems[i].Visible)
count++;
}
return (count);
}
}
#endregion
#region VisibleTab
/// <summary>
/// Gets or sets the promoted visible tab
/// </summary>
internal BaseItem VisibleTab
{
get { return (_VisibleTab ?? _SelectedTab); }
set
{
if (_VisibleTab != value)
{
_VisibleTab = value;
MyRefresh();
}
}
}
#endregion
#endregion
#region HookEvents
/// <summary>
/// Hooks or unhooks our events
/// </summary>
/// <param name="hook"></param>
private void HookEvents(bool hook)
{
if (hook == true)
SubItemsChanged += SuperTabStripItemSubItemsChanged;
else
SubItemsChanged -= SuperTabStripItemSubItemsChanged;
}
#endregion
#region Event processing
#region SubItemsChanged
/// <summary>
/// Handles SubItemsChanged events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void SuperTabStripItemSubItemsChanged(object sender, CollectionChangeEventArgs e)
{
switch (e.Action)
{
case CollectionChangeAction.Add:
TabItemAdded(e.Element as BaseItem);
break;
case CollectionChangeAction.Remove:
TabItemRemoved(e.Element as BaseItem);
break;
case CollectionChangeAction.Refresh:
MyRefresh();
break;
}
}
#endregion
#region TabItemAdded
/// <summary>
/// Handles newly added items
/// </summary>
/// <param name="item"></param>
internal void TabItemAdded(BaseItem item)
{
SuperTabItem tab = item as SuperTabItem;
if (tab != null)
{
tab.TabStripItem = this;
//tab.Visible = true;
tab.TabColorChanged += TabTabColorChanged;
if (TabItemOpen != null)
{
SuperTabStripTabItemOpenEventArgs args =
new SuperTabStripTabItemOpenEventArgs(tab);
TabItemOpen(this, args);
}
if (tab.Visible == true)
{
if (SelectedTab == null && VisibleTabCount == 1)
SelectedTab = tab;
}
}
MyRefresh();
}
#endregion
#region TabRemoved
/// <summary>
/// Handles newly removed items
/// </summary>
/// <param name="item"></param>
internal void TabItemRemoved(BaseItem item)
{
if (TabRemoved != null)
{
SuperTabStripTabRemovedEventArgs args = new
SuperTabStripTabRemovedEventArgs(item);
TabRemoved(this, args);
}
SuperTabItem tab = item as SuperTabItem;
if (tab != null)
{
tab.TabColorChanged -= TabTabColorChanged;
SuperTabControlPanel panel = tab.AttachedControl as SuperTabControlPanel;
if (panel != null)
panel.PanelColorChanged -= TabTabColorChanged;
if (SelectedTab == tab)
OnSelectedTabRemoved(_SelectedTabIndex, tab);
if (VisibleTabCount == 0)
SelectedTab = null;
}
Refresh();
}
#endregion
#region Tab_TabColorChanged
/// <summary>
/// Handles tab color changes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void TabTabColorChanged(object sender, EventArgs e)
{
if (TabStripTabColorChanged != null)
{
SuperTabItem tab = sender as SuperTabItem;
if (tab != null)
{
TabStripTabColorChanged(this,
new SuperTabStripTabColorChangedEventArgs(tab));
}
}
Refresh();
}
#endregion
#region ColorTable_ColorTableChanged
/// <summary>
/// Handles color table changes
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void ColorTableColorTableChanged(object sender, EventArgs e)
{
OnTabStripColorChanged();
}
#endregion
#endregion
#region MyRefresh
/// <summary>
/// Performs NeedRecalcSize and refresh
/// </summary>
private void MyRefresh()
{
NeedRecalcSize = true;
Refresh();
}
#endregion
#region RecalcSize
/// <summary>
/// Recalculates the size of the tabs.
/// </summary>
public override void RecalcSize()
{
if (SuspendLayout == false && BarFunctions.IsHandleValid(this.ContainerControl as Control)) // Do not force Control to create Handle by going through RecalcSize since it will break layout on controls
{
if (_RecalcInProgress == false)
{
try
{
_RecalcInProgress = true;
RecalcDisplaySize();
}
finally
{
_RecalcInProgress = false;
}
}
}
}
#region RecalcDisplaySize
private void RecalcDisplaySize()
{
base.RecalcSize();
Control container = ContainerControl as Control;
if (container != null)
{
using (Graphics g = BarFunctions.CreateGraphics(container))
{
if (_TabControlBox.Visible == true)
{
_TabControlBox.RecalcSize();
if (DesignMode == false)
_TabControlBox.Displayed = true;
}
_TabDisplay.RecalcSize(g);
}
}
}
#endregion
#endregion
#region EnsureVisible
/// <summary>
/// Ensures that the given item is visible on the TabStrip
/// </summary>
/// <param name="item"></param>
public void EnsureVisible(BaseItem item)
{
VisibleTab = item;
}
#endregion
#region SelectTab
/// <summary>
/// Selects the given tab
/// </summary>
/// <param name="tab"></param>
/// <param name="eventSource"></param>
public void SelectTab(SuperTabItem tab, eEventSource eventSource)
{
if (tab != null &&
(tab.Enabled == true || DesignMode == true))
{
bool refresh = (_VisibleTab != tab || _SelectedTab != tab);
if (_SelectedTab != tab)
{
SuperTabControl tc = _TabStrip.Parent as SuperTabControl;
if (tc != null && tc.ValidateFormOnTabSelection)
{
Form form = tc.FindForm();
if (form != null)
{
if (form.Validate() == false)
return;
}
}
SuperTabItem oldTab = _SelectedTab;
if (OnSelectedTabChanging(tab, eventSource) == false)
{
_VisibleTab = tab;
OnBeforeTabDisplay(tab);
Control hideControl = null;
if (_SelectedTab != null && _SelectedTab.AttachedControl != null)
hideControl = _SelectedTab.AttachedControl;
_SelectedTab = tab;
_SelectedTabIndex = SubItems.IndexOf(tab);
if (_SelectedTab.AttachedControl != null)
{
_SelectedTab.AttachedControl.BringToFront();
_SelectedTab.AttachedControl.Visible = true;
if (tc != null)
{
bool select = !(tc.TabStop && tc.Focused && eventSource == eEventSource.Keyboard);
if (_AutoSelectAttachedControl && select)
_SelectedTab.AttachedControl.Select();
}
if (hideControl == _SelectedTab.AttachedControl)
hideControl = null;
}
if (hideControl != null)
hideControl.Visible = false;
OnSelectedTabChanged(oldTab, _SelectedTab, eventSource);
}
}
if (refresh == true)
MyRefresh();
}
else
{
_SelectedTab = null;
MyRefresh();
}
}
#endregion
#region SelectPreviousTab
/// <summary>
/// Selects the previous tab
/// </summary>
/// <returns></returns>
public bool SelectPreviousTab()
{
return SelectPreviousTab(eEventSource.Code);
}
/// <summary>
/// Selects the previous tab
/// </summary>
/// <returns></returns>
internal bool SelectPreviousTab(eEventSource eventSource)
{
if (SelectedTab != null && SubItems.IndexOf(SelectedTab) > 0)
{
for (int i = SubItems.IndexOf(SelectedTab) - 1; i >= 0; i--)
{
BaseItem item = SubItems[i];
if (item.Visible == true &&
(item.Enabled == true || DesignMode == true))
{
if (item is SuperTabItem)
{
SelectTab((SuperTabItem)item, eventSource);
return (true);
}
}
}
}
return (false);
}
#endregion
#region SelectNextTab
/// <summary>
/// Selects the next tab
/// </summary>
/// <returns></returns>
public bool SelectNextTab()
{
return SelectNextTab(eEventSource.Code);
}
/// <summary>
/// Selects the next tab
/// </summary>
/// <returns></returns>
internal bool SelectNextTab(eEventSource eventSource)
{
if (SelectedTab != null && SubItems.IndexOf(SelectedTab) < SubItems.Count)
{
for (int i = SubItems.IndexOf(SelectedTab) + 1; i < SubItems.Count; i++)
{
BaseItem item = SubItems[i];
if (item.Visible == true &&
(item.Enabled == true || DesignMode == true))
{
if (item is SuperTabItem)
{
SelectTab((SuperTabItem)item, eventSource);
return (true);
}
}
}
}
return (false);
}
#endregion
#region SelectNewTab
internal void SelectNewTab(BaseItem item)
{
SelectNewTab(Math.Max(0, SubItems.IndexOf(item)));
}
internal void SelectNewTab(int index)
{
SubItemsCollection items = SubItems;
int k = GetNextSelectableTab(items, index);
if (k < 0)
k = GetPrevSelectableTab(items, index);
if (k >= 0)
{
SelectTab(items[k] as SuperTabItem, eEventSource.Code);
RecalcSize();
}
else
{
SelectedTab = null;
}
}
#endregion
#region GetNewSelectTab
internal SuperTabItem GetNewSelectTab(int index)
{
SubItemsCollection items = SubItems;
if ((uint) index < items.Count)
{
int k = GetNextSelectableTab(items, index);
if (k < 0)
k = GetPrevSelectableTab(items, index);
if (k >= 0)
return (items[k] as SuperTabItem);
}
return (null);
}
#endregion
#region GetNextSelectableTab
internal int GetNextSelectableTab(SuperTabItem tab)
{
SubItemsCollection items = SubItems;
return (GetNextSelectableTab(items, items.IndexOf(tab)));
}
internal int GetNextSelectableTab(SubItemsCollection items, int n)
{
n = Math.Max(n, 0);
for (int i = n; i < items.Count; i++)
{
SuperTabItem tab = items[i] as SuperTabItem;
if (tab != null && tab.Parent != null && tab.Visible && tab.Enabled)
return (i);
}
return (-1);
}
#endregion
#region GetPrevSelectableTab
internal int GetPrevSelectableTab(SuperTabItem tab)
{
SubItemsCollection items = SubItems;
return (GetPrevSelectableTab(items, items.IndexOf(tab)));
}
internal int GetPrevSelectableTab(SubItemsCollection items, int n)
{
n = Math.Min(n, items.Count - 1);
for (int i = n; i >= 0; i--)
{
SuperTabItem tab = items[i] as SuperTabItem;
if (tab != null && tab.Parent != null && tab.Visible && tab.Enabled)
return (i);
}
return (-1);
}
#endregion
#region GetNextVisibleTab
internal int GetNextVisibleTab(SubItemsCollection items, int n)
{
n = Math.Max(n, 0);
for (int i = n; i < items.Count; i++)
{
SuperTabItem tab = items[i] as SuperTabItem;
if (tab != null && tab.Parent != null && tab.Visible)
return (i);
}
return (-1);
}
#endregion
#region GetPrevVisibleTab
internal int GetPrevVisibleTab(SubItemsCollection items, int n)
{
n = Math.Min(n, items.Count - 1);
for (int i = n; i >= 0; i--)
{
SuperTabItem tab = items[i] as SuperTabItem;
if (tab != null && tab.Parent != null && tab.Visible)
return (i);
}
return (-1);
}
#endregion
#region UpdateSelectedTab
/// <summary>
/// UpdateSelectedTab
/// </summary>
internal void UpdateSelectedTab()
{
if (DesignMode == false)
SelectNewTab(SelectedTab);
RecalcSize();
}
#endregion
#region "On" processing
#region OnTabStyleChanged
/// <summary>
/// OnTabStyleChanged
/// </summary>
private void OnTabStyleChanged()
{
MyRefresh();
EnsureVisible(SelectedTab);
}
#endregion
#region OnMeasureTabItem
/// <summary>
/// OnMeasureTabItem
/// </summary>
/// <param name="tab"></param>
/// <param name="size"></param>
/// <param name="g"></param>
/// <returns></returns>
internal Size OnMeasureTabItem(SuperTabItem tab, Size size, Graphics g)
{
if (MeasureTabItem != null)
{
SuperTabMeasureTabItemEventArgs args =
new SuperTabMeasureTabItemEventArgs(tab, size, g);
MeasureTabItem(this, args);
return (args.Size);
}
return (size);
}
#endregion
#region OnPreRenderTabItem
/// <summary>
/// OnPreRenderTabItem
/// </summary>
/// <param name="tab"></param>
/// <param name="g"></param>
/// <returns></returns>
internal bool OnPreRenderTabItem(SuperTabItem tab, Graphics g)
{
if (PreRenderTabItem != null)
{
SuperTabPreRenderTabItemEventArgs args =
new SuperTabPreRenderTabItemEventArgs(tab, g);
PreRenderTabItem(this, args);
return (args.Cancel);
}
return (false);
}
#endregion
#region OnPostRenderTabItem
/// <summary>
/// OnPostRenderTabItem
/// </summary>
/// <param name="tab"></param>
/// <param name="g"></param>
internal void OnPostRenderTabItem(SuperTabItem tab, Graphics g)
{
if (PostRenderTabItem != null)
{
SuperTabPostRenderTabItemEventArgs args =
new SuperTabPostRenderTabItemEventArgs(tab, g);
PostRenderTabItem(this, args);
}
}
#endregion
#region OnGetTabItemContentRectangle
/// <summary>
/// OnGetTabItemContentRectangle
/// </summary>
/// <param name="tab"></param>
/// <returns></returns>
internal Rectangle OnGetTabItemContentRectangle(SuperTabItem tab)
{
if (GetTabItemContentRectangle != null)
{
SuperTabGetTabItemContentRectangleEventArgs args =
new SuperTabGetTabItemContentRectangleEventArgs(tab);
GetTabItemContentRectangle(this, args);
return (args.ContentRectangle);
}
return (tab.TabItemDisplay.ContentRectangle());
}
#endregion
#region OnGetTabItemPath
/// <summary>
/// OnGetTabItemPath
/// </summary>
/// <param name="tab"></param>
/// <returns></returns>
internal GraphicsPath OnGetTabItemPath(SuperTabItem tab)
{
if (GetTabItemPath != null)
{
SuperTabGetTabItemPathEventArgs args =
new SuperTabGetTabItemPathEventArgs(tab);
GetTabItemPath(this, args);
return (args.Path);
}
return (null);
}
#endregion
#region OnSelectedTabRemoved
/// <summary>
/// OnSelectedTabRemoved
/// </summary>
/// <param name="index"></param>
/// <param name="item"></param>
internal void OnSelectedTabRemoved(int index, SuperTabItem item)
{
SelectNewTab(index);
}
#endregion
#region OnSelectedTabChanging
/// <summary>
/// OnSelectedTabChanging
/// </summary>
/// <param name="value"></param>
/// <param name="eventSource"></param>
/// <returns></returns>
private bool OnSelectedTabChanging(SuperTabItem value, eEventSource eventSource)
{
if (SelectedTabChanging != null)
{
SuperTabStripSelectedTabChangingEventArgs eventData = new
SuperTabStripSelectedTabChangingEventArgs(_SelectedTab, value, eventSource);
SelectedTabChanging(this, eventData);
return (eventData.Cancel);
}
return (false);
}
#endregion
#region OnSelectedTabChanged
/// <summary>
/// OnSelectedTabChanged
/// </summary>
/// <param name="oldTab"></param>
/// <param name="newTab"></param>
/// <param name="eventSource"></param>
private void OnSelectedTabChanged(SuperTabItem oldTab,
SuperTabItem newTab, eEventSource eventSource)
{
if (SelectedTabChanged != null)
{
SuperTabStripSelectedTabChangedEventArgs eventData = new
SuperTabStripSelectedTabChangedEventArgs(oldTab, newTab, eventSource);
SelectedTabChanged(this, eventData);
}
}
#endregion
#region OnBeforeTabDisplay
/// <summary>
/// OnBeforeTabDisplay
/// </summary>
/// <param name="item"></param>
internal void OnBeforeTabDisplay(SuperTabItem item)
{
if (BeforeTabDisplay != null)
{
SuperTabStripBeforeTabDisplayEventArgs args = new
SuperTabStripBeforeTabDisplayEventArgs(item);
BeforeTabDisplay(this, args);
}
}
#endregion
#region OnTabItemClose
/// <summary>
/// OnTabItemClose
/// </summary>
/// <param name="tab"></param>
/// <returns></returns>
private bool OnTabItemClose(SuperTabItem tab)
{
if (TabItemClose != null)
{
SuperTabStripTabItemCloseEventArgs args =
new SuperTabStripTabItemCloseEventArgs(tab);
args.Cancel = (AutoCloseTabs == false);
TabItemClose(this, args);
return (args.Cancel);
}
return (AutoCloseTabs == false);
}
#endregion
#region OnTabStripColorChanged
/// <summary>
/// OnTabStripColorChanged
/// </summary>
private void OnTabStripColorChanged()
{
if (TabStripColorChanged != null)
TabStripColorChanged(this, EventArgs.Empty);
MyRefresh();
}
#endregion
#region OnPaintBackground
/// <summary>
/// OnPaintBackground
/// </summary>
/// <param name="g"></param>
/// <param name="ct"></param>
internal void OnPaintBackground(Graphics g, SuperTabColorTable ct)
{
if (TabStripPaintBackground != null)
TabStripPaintBackground(this, new SuperTabStripPaintBackgroundEventArgs(g, ct));
}
#endregion
#region OnGetTextBounds
/// <summary>
/// OnGetTextBounds
/// </summary>
/// <param name="tab"></param>
/// <param name="bounds"></param>
/// <returns></returns>
internal Rectangle OnGetTextBounds(SuperTabItem tab, Rectangle bounds)
{
if (GetTabTextBounds != null)
{
SuperTabGetTabTextBoundsEventArgs ev = new
SuperTabGetTabTextBoundsEventArgs(tab, bounds);
GetTabTextBounds(this, ev);
bounds = ev.Bounds;
}
return (bounds);
}
#endregion
#region OnGetImageBounds
/// <summary>
/// OnGetImageBounds
/// </summary>
/// <param name="tab"></param>
/// <param name="bounds"></param>
/// <returns></returns>
internal Rectangle OnGetImageBounds(SuperTabItem tab, Rectangle bounds)
{
if (GetTabImageBounds != null)
{
SuperTabGetTabImageBoundsEventArgs ev = new
SuperTabGetTabImageBoundsEventArgs(tab, bounds);
GetTabImageBounds(this, ev);
bounds = ev.Bounds;
}
return (bounds);
}
#endregion
#region OnGetCloseBounds
/// <summary>
/// OnGetCloseBounds
/// </summary>
/// <param name="tab"></param>
/// <param name="bounds"></param>
/// <returns></returns>
internal Rectangle OnGetCloseBounds(SuperTabItem tab, Rectangle bounds)
{
if (GetTabCloseBounds != null)
{
SuperTabGetTabCloseBoundsEventArgs ev = new
SuperTabGetTabCloseBoundsEventArgs(tab, bounds);
GetTabCloseBounds(this, ev);
bounds = ev.Bounds;
}
return (bounds);
}
#endregion
#region OnTabMoving
/// <summary>
/// OnTabMoving
/// </summary>
/// <param name="moveTab"></param>
/// <param name="insertTab"></param>
/// <param name="insertBefore"></param>
/// <returns></returns>
protected bool OnTabMoving(
BaseItem moveTab, BaseItem insertTab, bool insertBefore)
{
if (TabMoving != null)
{
SuperTabStripTabMovingEventArgs ev =
new SuperTabStripTabMovingEventArgs(moveTab, insertTab, insertBefore);
TabMoving(this, ev);
return (ev.CanMove);
}
return (true);
}
#endregion
#region OnTabMoved
/// <summary>
/// OnTabMoved
/// </summary>
/// <param name="tab">Tab that was moved</param>
/// <param name="oldOrder">Old tab order</param>
/// <param name="newOrder">New tab order</param>
/// <returns></returns>
protected bool OnTabMoved(SuperTabItem tab,
List<BaseItem> oldOrder, ref List<BaseItem> newOrder)
{
if (TabMoved != null)
{
SuperTabStripTabMovedEventArgs ev =
new SuperTabStripTabMovedEventArgs(tab, oldOrder, newOrder);
TabMoved(this, ev);
newOrder = ev.NewOrder;
return (ev.Cancel);
}
return (false);
}
#endregion
#endregion
#region ItemAtLocation
/// <summary>
/// ItemAtLocation
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public override BaseItem ItemAtLocation(int x, int y)
{
Point pt = new Point(x, y);
return (GetTabFromPoint(pt) ?? GetItemFromPoint(pt));
}
#endregion
#region Mouse support
#region InternalClick
/// <summary>
/// InternalClick
/// </summary>
/// <param name="mb"></param>
/// <param name="pt"></param>
public override void InternalClick(MouseButtons mb, Point pt)
{
base.InternalClick(mb, pt);
SuperTabItem tab = GetTabFromPoint(pt);
if (tab != null)
tab.InternalClick(mb, pt);
}
#endregion
#region InternalMouseDown
/// <summary>
/// InternalMouseDown
/// </summary>
/// <param name="objArg"></param>
public override void InternalMouseDown(MouseEventArgs objArg)
{
base.InternalMouseDown(objArg);
InternalOnMouseDown(objArg);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public void InternalOnMouseDown(MouseEventArgs objArg)
{
HideToolTip();
_TabArea = eSuperTabArea.InNone;
SuperTabItem tab = GetTabFromPoint(objArg.Location);
_MouseDownTab = tab;
_MouseDownLocation = objArg.Location;
if (tab != null)
{
if (objArg.Button == MouseButtons.Left)
{
if (tab.Enabled == true || DesignMode == true)
{
_TabArea = tab.GetTabAreaFromPoint(objArg.Location);
if (_TabArea == eSuperTabArea.InContent || _TabArea == eSuperTabArea.InImage)
{
tab.TabStrip.Focus();
if (_SelectedTab != tab)
SelectTab(tab, eEventSource.Mouse);
}
}
else
{
_MouseDownTab = null;
SystemSounds.Beep.Play();
}
}
}
else
{
if (ControlBox.Visible == true)
{
if (ControlBox.IsMouseOver == true)
ControlBox.InternalMouseDown(objArg);
}
}
}
#endregion
#region InternalMouseUp
/// <summary>
/// InternalMouseUp
/// </summary>
/// <param name="objArg"></param>
public override void InternalMouseUp(MouseEventArgs objArg)
{
base.InternalMouseUp(objArg);
InternalOnMouseUp(objArg);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public void InternalOnMouseUp(MouseEventArgs objArg)
{
if (_IsTabDragging == false)
ProcessMouseUp(objArg);
else
ProcessTabUp();
_InsertTab = null;
_MouseDownTab = null;
_IsTabDragging = false;
}
#region ProcessMouseUp
private void ProcessMouseUp(MouseEventArgs objArg)
{
SuperTabItem tab = GetTabFromPoint(objArg.Location);
if (tab != null)
{
if (objArg.Button == MouseButtons.Left)
{
eSuperTabArea upTabArea = tab.GetTabAreaFromPoint(objArg.Location);
if (_TabArea == eSuperTabArea.InCloseBox && upTabArea == eSuperTabArea.InCloseBox)
{
CloseTab(tab);
}
}
}
else
{
if (ControlBox.Visible == true)
{
if (ControlBox.IsMouseDown == true)
ControlBox.InternalMouseUp(objArg);
}
}
}
#endregion
#region ProcessTabUp
private void ProcessTabUp()
{
_TabDragWindow.Owner.Cursor = Cursors.Default;
_TabDragWindow.Dispose();
_TabDragWindow = null;
if (_InsertTab != null)
{
SuperTabItem dragTab = _HotTab;
List<BaseItem> oldOrder = GetOldOrder();
List<BaseItem> newOrder = GetNewOrder();
if (OnTabMoved(dragTab, oldOrder, ref newOrder) == false)
{
SubItems.Clear();
foreach (BaseItem item in newOrder)
{
bool visible = item.Visible;
SubItems.Add(item);
if (visible == false)
item.Visible = false;
}
SelectedTab = dragTab;
}
}
Refresh();
}
#region GetOldOrder
private List<BaseItem> GetOldOrder()
{
List<BaseItem> items = new List<BaseItem>(SubItems.Count);
foreach (BaseItem item in SubItems)
items.Add(item);
return (items);
}
#endregion
#region GetNewOrder
private List<BaseItem> GetNewOrder()
{
List<BaseItem> items = GetOldOrder();
int n = items.IndexOf(_InsertTab);
int m = items.IndexOf(_HotTab);
if (n >= 0 && m >= 0)
{
if ((_InsertBefore == false && n + 1 != m) ||
(_InsertBefore == true && n - 1 != m))
{
items.Remove(_HotTab);
n = items.IndexOf(_InsertTab);
if (_InsertBefore == false)
n++;
items.Insert(n, _HotTab);
}
}
return (items);
}
#endregion
#endregion
#endregion
#region InternalMouseMove
/// <summary>
/// InternalMouseMove
/// </summary>
/// <param name="objArg"></param>
public override void InternalMouseMove(MouseEventArgs objArg)
{
if (_IsTabDragging == false)
base.InternalMouseMove(objArg);
InternalOnMouseMove(objArg);
}
/// <summary>
/// InternalOnMouseMove
/// </summary>
/// <param name="objArg"></param>
[EditorBrowsable(EditorBrowsableState.Never)]
public void InternalOnMouseMove(MouseEventArgs objArg)
{
SyncMouseState();
if (_IsTabDragging == false)
ProcessMouseMove(objArg);
else
ProcessTabMove(objArg);
}
#region SyncMouseState
private void SyncMouseState()
{
if (_MouseDownTab != null)
{
if (Control.MouseButtons == MouseButtons.None)
{
if (_TabDragWindow != null)
{
_TabDragWindow.Dispose();
_TabDragWindow = null;
}
_InsertTab = null;
_MouseDownTab = null;
_IsTabDragging = false;
}
}
}
#endregion
#region ProcessMouseMove
/// <summary>
/// ProcessMouseMove
/// </summary>
/// <param name="objArg"></param>
private void ProcessMouseMove(MouseEventArgs objArg)
{
SuperTabItem tab = GetTabFromPoint(objArg.Location);
if (_HotTab != tab || _HotTab != null)
HotTabMouseMove(objArg, tab);
else
ControlBoxMouseMove(objArg);
}
#region HotTabMouseMove
/// <summary>
/// HotTabMouseMove
/// </summary>
/// <param name="objArg"></param>
/// <param name="tab"></param>
private void HotTabMouseMove(MouseEventArgs objArg, SuperTabItem tab)
{
if (_HotTab != tab)
{
if (_HotTab != null)
_HotTab.Refresh();
if (_HotTab == null || _HotTab.CloseButtonPressed == false)
_HotTab = tab;
if (_HotTab != null)
_HotTab.Refresh();
ResetHover();
HideToolTip();
}
else if (_HotTab != null)
{
StartTabMove(objArg);
}
}
#endregion
#region ControlBoxMouseMove
/// <summary>
/// ControlBoxMouseMove
/// </summary>
/// <param name="objArg"></param>
private void ControlBoxMouseMove(MouseEventArgs objArg)
{
if (ControlBox.Visible == true)
{
if (ControlBox.Bounds.Contains(objArg.Location))
{
if (ControlBox.IsMouseOver == false)
ControlBox.InternalMouseEnter();
ControlBox.InternalMouseMove(objArg);
}
else
{
if (ControlBox.IsMouseOver == true)
ControlBox.InternalMouseLeave();
}
}
}
#endregion
#endregion
#region ProcessTabMove
/// <summary>
/// ProcessTabMove
/// </summary>
/// <param name="objArg"></param>
private void ProcessTabMove(MouseEventArgs objArg)
{
_TabDragWindow.Location = new Point(Control.MousePosition.X,
Control.MousePosition.Y + _TabDragWindow.Owner.Cursor.Size.Height / 2);
_InsertTab = null;
BaseItem item = GetItemFromPoint(objArg.Location);
if (item != null && _HotTab != null)
{
Point pt = objArg.Location;
switch (_TabStrip.TabAlignment)
{
case eTabStripAlignment.Top:
case eTabStripAlignment.Bottom:
_InsertBefore = (pt.X < item.Bounds.X + (item.Bounds.Width / 2));
break;
default:
_InsertBefore = (pt.Y < item.Bounds.Y + (item.Bounds.Height / 2));
break;
}
int n = SubItems.IndexOf(item);
int m = SubItems.IndexOf(_HotTab);
if (m != n && ((_InsertBefore == true && n - 1 != m) || (_InsertBefore == false && n + 1 != m)))
_InsertTab = item;
}
if (OnTabMoving(_HotTab, _InsertTab, _InsertBefore) == false)
_InsertTab = null;
_TabDragWindow.Owner.Cursor =
(_InsertTab != null) ? Cursors.Hand : Cursors.No;
Refresh();
}
#endregion
#region StartTabMove
/// <summary>
/// StartTabMove
/// </summary>
/// <param name="objArg"></param>
/// <returns></returns>
private bool StartTabMove(MouseEventArgs objArg)
{
if (_ReorderTabsEnabled == true && _HotTab == _MouseDownTab &&
_MouseDownTab.CloseButtonPressed == false)
{
if (Math.Abs(_MouseDownLocation.X - objArg.Location.X) > 8 ||
Math.Abs(_MouseDownLocation.Y - objArg.Location.Y) > 8)
{
_IsTabDragging = true;
_TabDragWindow = new SuperTabDragWindow();
_TabDragWindow.Owner = TabStrip.FindForm();
_TabDragWindow.Paint += TabDragWindowPaint;
SetDragWindowRegion();
_TabDragWindow.Show();
_TabDragWindow.Size = _MouseDownTab.Bounds.Size;
return (true);
}
}
return (false);
}
#endregion
#region SetDragWindowRegion
/// <summary>
/// SetDragWindowRegion
/// </summary>
private void SetDragWindowRegion()
{
Rectangle saveRect = _MouseDownTab.Bounds;
Rectangle dragRect = saveRect;
dragRect.Location = new Point(0, 0);
try
{
_MouseDownTab.Bounds = dragRect;
using (GraphicsPath path = _MouseDownTab.GetTabItemPath())
{
GraphicsPath cpath = (GraphicsPath) path.Clone();
using (Pen pen = new Pen(Color.Black, 2))
cpath.Widen(pen);
Region rgn = new Region(path);
rgn.Union(cpath);
_TabDragWindow.Region = rgn;
}
}
finally
{
_MouseDownTab.Bounds = saveRect;
}
}
#endregion
#region TabDragWindow_Paint
/// <summary>
/// TabDragWindow_Paint
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void TabDragWindowPaint(object sender, PaintEventArgs e)
{
ItemPaintArgs p = new ItemPaintArgs(null, _TabStrip, e.Graphics, new ColorScheme());
Rectangle saveRect = _MouseDownTab.Bounds;
Rectangle dragRect = saveRect;
dragRect.Location = new Point(0, 0);
try
{
_MouseDownTab.Bounds = dragRect;
_MouseDownTab.Paint(p);
}
finally
{
_MouseDownTab.Bounds = saveRect;
}
}
#endregion
#endregion
#region InternalMouseLeave
/// <summary>
/// InternalMouseLeave
/// </summary>
public override void InternalMouseLeave()
{
base.InternalMouseLeave();
InternalOnMouseLeave();
}
/// <summary>
/// InternalOnMouseLeave
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
public void InternalOnMouseLeave()
{
HideToolTip();
if (_HotTab != null)
{
if (SubItems.Contains(_HotTab))
{
_HotTab.CloseButtonMouseOver = false;
_HotTab.Refresh();
_HotTab = null;
Refresh();
}
else
{
_HotTab = null;
}
}
else
{
if (ControlBox.Visible == true)
{
if (ControlBox.IsMouseOver == true)
ControlBox.InternalMouseLeave();
}
}
}
#endregion
#endregion
#region GetTabFromPoint
/// <summary>
/// Get the tab at the given Point
/// </summary>
/// <param name="pt"></param>
/// <returns>SuperTabItem or null</returns>
public SuperTabItem GetTabFromPoint(Point pt)
{
if (SelectedTab != null)
{
if (SelectedTab.PointInTab(pt) == true)
return (SelectedTab);
}
for (int i = 0; i < SubItems.Count; i++)
{
SuperTabItem tab = SubItems[i] as SuperTabItem;
if (tab != null)
{
if (tab.Visible == true && tab.Displayed == true)
{
if (tab.PointInTab(pt) == true)
return (tab);
}
}
}
return (null);
}
#endregion
#region GetItemFromPoint
/// <summary>
/// Gets the item at the given point
/// </summary>
/// <param name="pt"></param>
/// <returns>BaseItem or null</returns>
public BaseItem GetItemFromPoint(Point pt)
{
for (int i = 0; i < SubItems.Count; i++)
{
BaseItem item = SubItems[i];
if (item.Visible == true && item.Displayed == true)
{
if (item.DisplayRectangle.Contains(pt))
return (item);
}
}
return (null);
}
#endregion
#region GetNextVisibleTab
/// <summary>
/// Gets the next visible Tab
/// </summary>
/// <param name="index"></param>
/// <returns>SuperTabItem</returns>
internal SuperTabItem GetNextVisibleTab(int index)
{
if (index < 0 || index >= SubItems.Count)
index = 0;
for (int i = index; i < SubItems.Count; i++)
{
SuperTabItem tab = SubItems[i] as SuperTabItem;
if (tab != null && tab.Visible == true)
return (tab);
}
return (null);
}
#endregion
#region CloseTab
/// <summary>
/// Closes the given tab
/// </summary>
/// <param name="tab"></param>
public void CloseTab(SuperTabItem tab)
{
if (tab != null && SubItems.Contains(tab))
{
if (OnTabItemClose(tab) == false)
{
if (_TabStrip.IsDesignMode == false)
{
SubItems.Remove(tab);
Control c = tab.AttachedControl;
if (c != null)
{
if (_TabStrip.Controls.Contains(c))
_TabStrip.Controls.Remove(c);
c.Dispose();
}
_TabStrip.RecalcLayout();
}
}
}
}
#endregion
#region Paint
/// <summary>
/// Paint processing
/// </summary>
/// <param name="p"></param>
public override void Paint(ItemPaintArgs p)
{
if (_TabDisplay != null)
_TabDisplay.Paint(p);
}
#endregion
#region SubItemSizeChanged
/// <summary>
/// SubItemSizeChanged
/// </summary>
/// <param name="objChildItem"></param>
public override void SubItemSizeChanged(BaseItem objChildItem)
{
base.SubItemSizeChanged(objChildItem);
_TabStrip.RecalcLayout();
if (DesignMode == false)
SelectNewTab(SelectedTab);
}
#endregion
#region Copy
/// <summary>
/// Returns copy of the item.
/// </summary>
public override BaseItem Copy()
{
SuperTabStripItem objCopy = new SuperTabStripItem(_TabStrip);
CopyToItem(objCopy);
return (objCopy);
}
/// <summary>
/// Copies specific properties to new instance of the item.
/// </summary>
/// <param name="copy">New SuperTabStripItem instance</param>
protected override void CopyToItem(BaseItem copy)
{
SuperTabStripItem objCopy = copy as SuperTabStripItem;
if (objCopy != null)
{
base.CopyToItem(objCopy);
objCopy.AutoCloseTabs = _AutoCloseTabs;
objCopy.TabCloseButtonNormal = _TabCloseButtonNormal;
objCopy.TabCloseButtonHot = _TabCloseButtonHot;
objCopy.TabHorizontalSpacing = _TabHorizontalSpacing;
objCopy.TabVerticalSpacing = _TabVerticalSpacing;
objCopy.CloseButtonOnTabsVisible = _CloseButtonOnTabsVisible;
objCopy.CloseButtonOnTabsAlwaysDisplayed = _CloseButtonOnTabsAlwaysDisplayed;
objCopy.CloseButtonPosition = _CloseButtonPosition;
objCopy.DisplaySelectedTextOnly = _DisplaySelectedTextOnly;
objCopy.TabFont = _TabFont;
objCopy.SelectedTabFont = _SelectedTabFont;
objCopy.HorizontalText = _HorizontalText;
objCopy.ShowFocusRectangle = _ShowFocusRectangle;
objCopy.FixedTabSize = _FixedTabSize;
objCopy.ReorderTabsEnabled = _ReorderTabsEnabled;
objCopy.TabAlignment = _TabAlignment;
objCopy.TabLayoutType = _TabLayoutType;
objCopy.TabStripColor = _TabStripColor;
objCopy.TabStyle = _TabStyle;
objCopy.TextAlignment = _TextAlignment;
}
}
#endregion
#region IDesignTimeProvider Members
protected virtual InsertPosition GetContainerInsertPosition(Point pScreen, BaseItem dragItem)
{
InsertPosition ip = DesignTimeProviderContainer.GetInsertPosition(this, pScreen, dragItem);
if (ip != null)
{
if (ip.TargetProvider != this && dragItem is SuperTabItem)
return (null);
}
return (ip);
}
InsertPosition IDesignTimeProvider.GetInsertPosition(Point pScreen, BaseItem dragItem)
{
return (GetContainerInsertPosition(pScreen, dragItem));
}
void IDesignTimeProvider.DrawReversibleMarker(int iPos, bool before)
{
DesignTimeProviderContainer.DrawReversibleMarker(this, iPos, before);
}
void IDesignTimeProvider.InsertItemAt(BaseItem objItem, int iPos, bool before)
{
DesignTimeProviderContainer.InsertItemAt(this, objItem, iPos, before);
}
#endregion
}
#region enums
public enum eSuperTabStyle
{
Office2007,
Office2010BackstageBlue,
OfficeMobile2014,
OneNote2007,
VisualStudio2008Dock,
VisualStudio2008Document,
WinMediaPlayer12,
}
public enum eSuperTabLayoutType
{
SingleLine,
SingleLineFit,
MultiLine,
MultiLineFit
}
#endregion
#region ValueChangingEventArgs
/// <summary>
/// Generic ValueChangingEventArgs
/// </summary>
/// <typeparam name="T1">oldValue type</typeparam>
/// <typeparam name="T2">newValue type</typeparam>
public class ValueChangingEventArgs<T1, T2> : CancelEventArgs
{
#region Private variables
private T1 _OldValue;
private T2 _NewValue;
#endregion
public ValueChangingEventArgs(T1 oldValue, T2 newValue)
{
_OldValue = oldValue;
_NewValue = newValue;
}
#region Public properties
/// <summary>
/// Gets the old value
/// </summary>
public T1 OldValue
{
get { return (_OldValue); }
}
/// <summary>
/// Gets the new value
/// </summary>
public T2 NewValue
{
get { return (_NewValue); }
}
#endregion
}
#endregion
#region ValueChangingSourceEventArgs
/// <summary>
/// Generic ValueChangingSourceEventArgs
/// </summary>
/// <typeparam name="T1">oldValue type</typeparam>
/// <typeparam name="T2">newValue type</typeparam>
/// <typeparam name="T3">EventSource</typeparam>
public class ValueChangingSourceEventArgs<T1, T2, T3> : CancelEventArgs
{
#region Private variables
private T1 _OldValue;
private T2 _NewValue;
private T3 _EventSource;
#endregion
public ValueChangingSourceEventArgs(T1 oldValue, T2 newValue, T3 eventSource)
{
_OldValue = oldValue;
_NewValue = newValue;
_EventSource = eventSource;
}
#region Public properties
/// <summary>
/// Gets the old value
/// </summary>
public T1 OldValue
{
get { return (_OldValue); }
}
/// <summary>
/// Gets the new value
/// </summary>
public T2 NewValue
{
get { return (_NewValue); }
}
/// <summary>
/// Gets the eventSource
/// </summary>
public T3 EventSource
{
get { return (_EventSource); }
}
#endregion
}
#endregion
#region ValueChangedEventArgs
/// <summary>
/// Generic ValueChangedEventArgs
/// </summary>
/// <typeparam name="T1">oldValue type</typeparam>
/// <typeparam name="T2">newValue type</typeparam>
public class ValueChangedEventArgs<T1, T2> : EventArgs
{
#region Private variables
private T1 _OldValue;
private T2 _NewValue;
#endregion
public ValueChangedEventArgs(T1 oldValue, T2 newValue)
{
_OldValue = oldValue;
_NewValue = newValue;
}
#region Public properties
/// <summary>
/// Gets the old value
/// </summary>
public T1 OldValue
{
get { return (_OldValue); }
}
/// <summary>
/// Gets the new value
/// </summary>
public T2 NewValue
{
get { return (_NewValue); }
}
#endregion
}
#endregion
#region ValueChangedSourceEventArgs
/// <summary>
/// Generic ValueChangedSourceEventArgs
/// </summary>
/// <typeparam name="T1">oldValue type</typeparam>
/// <typeparam name="T2">newValue type</typeparam>
/// <typeparam name="T3">EventSource</typeparam>
public class ValueChangedEventArgs<T1, T2, T3> : EventArgs
{
#region Private variables
private T1 _OldValue;
private T2 _NewValue;
private T3 _EventSource;
#endregion
public ValueChangedEventArgs(T1 oldValue, T2 newValue, T3 eventSource)
{
_OldValue = oldValue;
_NewValue = newValue;
_EventSource = eventSource;
}
#region Public properties
/// <summary>
/// Gets the old value
/// </summary>
public T1 OldValue
{
get { return (_OldValue); }
}
/// <summary>
/// Gets the new value
/// </summary>
public T2 NewValue
{
get { return (_NewValue); }
}
/// <summary>
/// Gets the eventSource
/// </summary>
public T3 EventSource
{
get { return (_EventSource); }
}
#endregion
}
#endregion
#region TabActionEventArgs
public class TabActionEventArgs : EventArgs
{
#region Private variables
private BaseItem _Tab;
#endregion
public TabActionEventArgs(BaseItem tab)
{
_Tab = tab;
}
#region Public properties
/// <summary>
/// Gets the tab
/// </summary>
public BaseItem Tab
{
get { return (_Tab); }
}
#endregion
}
#endregion
#region SuperTabStripTabActionCancelEventArgs
public class SuperTabStripTabActionCancelEventArgs : CancelEventArgs
{
#region Private variables
private BaseItem _Tab;
#endregion
public SuperTabStripTabActionCancelEventArgs(BaseItem tab)
{
_Tab = tab;
}
#region Public properties
/// <summary>
/// Gets the tab
/// </summary>
public BaseItem Tab
{
get { return (_Tab); }
}
#endregion
}
#endregion
#region SuperTabStripSelectedTabChangingEventArgs
public class SuperTabStripSelectedTabChangingEventArgs : ValueChangingSourceEventArgs<BaseItem, BaseItem, eEventSource>
{
public SuperTabStripSelectedTabChangingEventArgs(BaseItem oldValue, BaseItem newValue, eEventSource source)
: base(oldValue, newValue, source)
{
}
}
#endregion
#region SuperTabStripSelectedTabChangedEventArgs
public class SuperTabStripSelectedTabChangedEventArgs : ValueChangingSourceEventArgs<BaseItem, BaseItem, eEventSource>
{
public SuperTabStripSelectedTabChangedEventArgs(BaseItem oldValue, BaseItem newValue, eEventSource source)
: base(oldValue, newValue, source)
{
}
}
#endregion
#region SuperTabStripBeforeTabDisplayEventArgs
public class SuperTabStripBeforeTabDisplayEventArgs : TabActionEventArgs
{
public SuperTabStripBeforeTabDisplayEventArgs(BaseItem tab)
: base(tab)
{
}
}
#endregion
#region SuperTabStripTabRemovedEventArgs
public class SuperTabStripTabRemovedEventArgs : TabActionEventArgs
{
public SuperTabStripTabRemovedEventArgs(BaseItem tab)
: base(tab)
{
}
}
#endregion
#region SuperTabStripTabMovingEventArgs
public class SuperTabStripTabMovingEventArgs : EventArgs
{
#region Private variables
private BaseItem _MoveTab;
private BaseItem _InsertTab;
private bool _InsertBefore;
private bool _CanMove = true;
#endregion
public SuperTabStripTabMovingEventArgs(
BaseItem moveTab, BaseItem insertTab, bool insertBefore)
{
_MoveTab = moveTab;
_InsertTab = insertTab;
_InsertBefore = insertBefore;
}
#region Public properties
public BaseItem MoveTab
{
get { return (_MoveTab); }
}
public BaseItem InsertTab
{
get { return (_InsertTab); }
}
public bool InsertBefore
{
get { return (_InsertBefore); }
}
public bool CanMove
{
get { return (_CanMove); }
set { _CanMove = value; }
}
#endregion
}
#endregion
#region SuperTabStripTabMovedEventArgs
public class SuperTabStripTabMovedEventArgs : SuperTabStripTabActionCancelEventArgs
{
#region Private variables
List<BaseItem> _OldOrder;
List<BaseItem> _NewOrder;
#endregion
public SuperTabStripTabMovedEventArgs(
BaseItem tab, List<BaseItem> oldOrder, List<BaseItem> newOrder)
: base(tab)
{
_OldOrder = oldOrder;
_NewOrder = newOrder;
}
#region Public properties
/// <summary>
/// Gets the old order of the tabs
/// </summary>
public List<BaseItem> OldOrder
{
get { return (_OldOrder); }
}
/// <summary>
/// Gets or sets the new order of the tabs
/// </summary>
public List<BaseItem> NewOrder
{
get { return (_NewOrder); }
set { _NewOrder = value; }
}
#endregion
}
#endregion
#region SuperTabStripTabItemCloseEventArgs
public class SuperTabStripTabItemCloseEventArgs : SuperTabStripTabActionCancelEventArgs
{
public SuperTabStripTabItemCloseEventArgs(BaseItem tab)
: base(tab)
{
}
}
#endregion
#region SuperTabStripTabItemOpenEventArgs
public class SuperTabStripTabItemOpenEventArgs : TabActionEventArgs
{
public SuperTabStripTabItemOpenEventArgs(BaseItem tab)
: base(tab)
{
}
}
#endregion
#region SuperTabMeasureTabItemEventArgs
public class SuperTabMeasureTabItemEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
private Size _Size;
private Graphics _Graphics;
#endregion
public SuperTabMeasureTabItemEventArgs(SuperTabItem tab, Size size, Graphics graphics)
{
_Tab = tab;
_Size = size;
_Graphics = graphics;
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public Size Size
{
get { return (_Size); }
set { _Size = value; }
}
public Graphics Graphics
{
get { return (_Graphics); }
}
#endregion
}
#endregion
#region SuperTabPreRenderTabItemEventArgs
public class SuperTabPreRenderTabItemEventArgs : CancelEventArgs
{
#region Private variables
private SuperTabItem _Tab;
private Graphics _Graphics;
#endregion
public SuperTabPreRenderTabItemEventArgs(SuperTabItem tab, Graphics graphics)
{
_Tab = tab;
_Graphics = graphics;
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public Graphics Graphics
{
get { return (_Graphics); }
}
#endregion
}
#endregion
#region SuperTabPostRenderTabItemEventArgs
public class SuperTabPostRenderTabItemEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
private Graphics _Graphics;
#endregion
public SuperTabPostRenderTabItemEventArgs(SuperTabItem tab, Graphics graphics)
{
_Tab = tab;
_Graphics = graphics;
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public Graphics Graphics
{
get { return (_Graphics); }
}
#endregion
}
#endregion
#region SuperTabGetTabTextBoundsEventArgs
public class SuperTabGetTabTextBoundsEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
private Rectangle _Bounds;
#endregion
public SuperTabGetTabTextBoundsEventArgs(SuperTabItem tab, Rectangle bounds)
{
_Tab = tab;
_Bounds = bounds;
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public Rectangle Bounds
{
get { return (_Bounds); }
set { _Bounds = value; }
}
#endregion
}
#endregion
#region SuperTabGetTabImageBoundsEventArgs
public class SuperTabGetTabImageBoundsEventArgs : SuperTabGetTabTextBoundsEventArgs
{
public SuperTabGetTabImageBoundsEventArgs(SuperTabItem tab, Rectangle bounds)
: base(tab, bounds)
{
}
}
#endregion
#region SuperTabGetTabCloseBoundsEventArgs
public class SuperTabGetTabCloseBoundsEventArgs : SuperTabGetTabImageBoundsEventArgs
{
public SuperTabGetTabCloseBoundsEventArgs(SuperTabItem tab, Rectangle bounds)
: base(tab, bounds)
{
}
}
#endregion
#region SuperTabStripPaintBackgroundEventArgs
public class SuperTabStripPaintBackgroundEventArgs : EventArgs
{
#region Private variables
private Graphics _Graphics;
private SuperTabColorTable _ColorTable;
#endregion
public SuperTabStripPaintBackgroundEventArgs(Graphics graphics, SuperTabColorTable colorTable)
{
_Graphics = graphics;
_ColorTable = colorTable;
}
#region Public properties
public Graphics Graphics
{
get { return (_Graphics); }
}
public SuperTabColorTable ColorTable
{
get { return (_ColorTable); }
}
#endregion
}
#endregion
#region SuperTabStripTabColorChangedEventArgs
/// <summary>
/// TabStripTabColorChangedEventArgs
/// </summary>
public class SuperTabStripTabColorChangedEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
#endregion
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
#endregion
public SuperTabStripTabColorChangedEventArgs(SuperTabItem tab)
{
_Tab = tab;
}
}
#endregion
#region SuperTabGetTabItemPathEventArgs
public class SuperTabGetTabItemPathEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
private GraphicsPath _Path;
#endregion
public SuperTabGetTabItemPathEventArgs(SuperTabItem tab)
{
_Tab = tab;
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public GraphicsPath Path
{
get { return (_Path); }
set { _Path = value; }
}
#endregion
}
#endregion
#region SuperTabGetTabItemGetContentRectangleEventArgs
public class SuperTabGetTabItemContentRectangleEventArgs : EventArgs
{
#region Private variables
private SuperTabItem _Tab;
private Rectangle _ContentRectangle;
#endregion
public SuperTabGetTabItemContentRectangleEventArgs(SuperTabItem tab)
{
_Tab = tab;
_ContentRectangle = tab.TabItemDisplay.ContentRectangle();
}
#region Public properties
public SuperTabItem Tab
{
get { return (_Tab); }
}
public Rectangle ContentRectangle
{
get { return (_ContentRectangle); }
set { _ContentRectangle = value; }
}
#endregion
}
#endregion
}
#endif