1086 lines
35 KiB
C#
1086 lines
35 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Windows.Forms;
|
|
using System.ComponentModel;
|
|
using WeifenLuo.WinFormsUI.Docking;
|
|
|
|
namespace DockSample.Customization
|
|
{
|
|
internal class VS2003DockPaneStrip : DockPaneStripBase
|
|
{
|
|
private class TabVS2003 : Tab
|
|
{
|
|
internal TabVS2003(IDockContent content)
|
|
: base(content)
|
|
{
|
|
}
|
|
|
|
private int m_tabX;
|
|
protected internal int TabX
|
|
{
|
|
get { return m_tabX; }
|
|
set { m_tabX = value; }
|
|
}
|
|
|
|
private int m_tabWidth;
|
|
protected internal int TabWidth
|
|
{
|
|
get { return m_tabWidth; }
|
|
set { m_tabWidth = value; }
|
|
}
|
|
|
|
private int m_maxWidth;
|
|
protected internal int MaxWidth
|
|
{
|
|
get { return m_maxWidth; }
|
|
set { m_maxWidth = value; }
|
|
}
|
|
|
|
private bool m_flag;
|
|
protected internal bool Flag
|
|
{
|
|
get { return m_flag; }
|
|
set { m_flag = value; }
|
|
}
|
|
}
|
|
|
|
protected override DockPaneStripBase.Tab CreateTab(IDockContent content)
|
|
{
|
|
return new TabVS2003(content);
|
|
}
|
|
|
|
private class DocumentButton : Label
|
|
{
|
|
public DocumentButton(Image image)
|
|
{
|
|
Image = image;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
#region consts
|
|
private const int _ToolWindowStripGapLeft = 4;
|
|
private const int _ToolWindowStripGapRight = 3;
|
|
private const int _ToolWindowImageHeight = 16;
|
|
private const int _ToolWindowImageWidth = 16;
|
|
private const int _ToolWindowImageGapTop = 3;
|
|
private const int _ToolWindowImageGapBottom = 1;
|
|
private const int _ToolWindowImageGapLeft = 3;
|
|
private const int _ToolWindowImageGapRight = 2;
|
|
private const int _ToolWindowTextGapRight = 1;
|
|
private const int _ToolWindowTabSeperatorGapTop = 3;
|
|
private const int _ToolWindowTabSeperatorGapBottom = 3;
|
|
|
|
private const int _DocumentTabMaxWidth = 200;
|
|
private const int _DocumentButtonGapTop = 5;
|
|
private const int _DocumentButtonGapBottom = 5;
|
|
private const int _DocumentButtonGapBetween = 0;
|
|
private const int _DocumentButtonGapRight = 3;
|
|
private const int _DocumentTabGapTop = 3;
|
|
private const int _DocumentTabGapLeft = 3;
|
|
private const int _DocumentTabGapRight = 3;
|
|
private const int _DocumentIconGapLeft = 6;
|
|
private const int _DocumentIconHeight = 16;
|
|
private const int _DocumentIconWidth = 16;
|
|
#endregion
|
|
|
|
private InertButton m_buttonClose, m_buttonScrollLeft, m_buttonScrollRight;
|
|
private IContainer m_components;
|
|
private ToolTip m_toolTip;
|
|
|
|
/// <exclude/>
|
|
protected IContainer Components
|
|
{
|
|
get { return m_components; }
|
|
}
|
|
|
|
private int m_offsetX = 0;
|
|
private int OffsetX
|
|
{
|
|
get { return m_offsetX; }
|
|
set
|
|
{
|
|
m_offsetX = value;
|
|
#if DEBUG
|
|
if (m_offsetX > 0)
|
|
throw new InvalidOperationException();
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#region Customizable Properties
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowStripGapLeft"]/*'/>
|
|
protected virtual int ToolWindowStripGapLeft
|
|
{
|
|
get { return _ToolWindowStripGapLeft; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowStripGapRight"]/*'/>
|
|
protected virtual int ToolWindowStripGapRight
|
|
{
|
|
get { return _ToolWindowStripGapRight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageHeight"]/*'/>
|
|
protected virtual int ToolWindowImageHeight
|
|
{
|
|
get { return _ToolWindowImageHeight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageWidth"]/*'/>
|
|
protected virtual int ToolWindowImageWidth
|
|
{
|
|
get { return _ToolWindowImageWidth; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageGapTop"]/*'/>
|
|
protected virtual int ToolWindowImageGapTop
|
|
{
|
|
get { return _ToolWindowImageGapTop; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageGapBottom"]/*'/>
|
|
protected virtual int ToolWindowImageGapBottom
|
|
{
|
|
get { return _ToolWindowImageGapBottom; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageGapLeft"]/*'/>
|
|
protected virtual int ToolWindowImageGapLeft
|
|
{
|
|
get { return _ToolWindowImageGapLeft; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowImageGapRight"]/*'/>
|
|
protected virtual int ToolWindowImageGapRight
|
|
{
|
|
get { return _ToolWindowImageGapRight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowTextGapRight"]/*'/>
|
|
protected virtual int ToolWindowTextGapRight
|
|
{
|
|
get { return _ToolWindowTextGapRight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowSeperatorGaptop"]/*'/>
|
|
protected virtual int ToolWindowTabSeperatorGapTop
|
|
{
|
|
get { return _ToolWindowTabSeperatorGapTop; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowSeperatorGapBottom"]/*'/>
|
|
protected virtual int ToolWindowTabSeperatorGapBottom
|
|
{
|
|
get { return _ToolWindowTabSeperatorGapBottom; }
|
|
}
|
|
|
|
private static Image _imageCloseEnabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageCloseEnabled"]/*'/>
|
|
protected virtual Image ImageCloseEnabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageCloseEnabled == null)
|
|
_imageCloseEnabled = Resources.DockPaneStrip_CloseEnabled;
|
|
return _imageCloseEnabled;
|
|
}
|
|
}
|
|
|
|
private static Image _imageCloseDisabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageCloseDisabled"]/*'/>
|
|
protected virtual Image ImageCloseDisabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageCloseDisabled == null)
|
|
_imageCloseDisabled = Resources.DockPaneStrip_CloseDisabled;
|
|
return _imageCloseDisabled;
|
|
}
|
|
}
|
|
|
|
private static Image _imageScrollLeftEnabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageScrollLeftEnabled"]/*'/>
|
|
protected virtual Image ImageScrollLeftEnabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageScrollLeftEnabled == null)
|
|
_imageScrollLeftEnabled = Resources.DockPaneStrip_ScrollLeftEnabled;
|
|
return _imageScrollLeftEnabled;
|
|
}
|
|
}
|
|
|
|
private static Image _imageScrollLeftDisabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageScrollLeftDisabled"]/*'/>
|
|
protected virtual Image ImageScrollLeftDisabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageScrollLeftDisabled == null)
|
|
_imageScrollLeftDisabled = Resources.DockPaneStrip_ScrollLeftDisabled;
|
|
return _imageScrollLeftDisabled;
|
|
}
|
|
}
|
|
|
|
private static Image _imageScrollRightEnabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageScrollRightEnabled"]/*'/>
|
|
protected virtual Image ImageScrollRightEnabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageScrollRightEnabled == null)
|
|
_imageScrollRightEnabled = Resources.DockPaneStrip_ScrollRightEnabled;
|
|
return _imageScrollRightEnabled;
|
|
}
|
|
}
|
|
|
|
private static Image _imageScrollRightDisabled = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ImageScrollRightDisabled"]/*'/>
|
|
protected virtual Image ImageScrollRightDisabled
|
|
{
|
|
get
|
|
{
|
|
if (_imageScrollRightDisabled == null)
|
|
_imageScrollRightDisabled = Resources.DockPaneStrip_ScrollRightDisabled;
|
|
return _imageScrollRightDisabled;
|
|
}
|
|
}
|
|
|
|
private static string _toolTipClose = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolTipClose"]/*'/>
|
|
protected virtual string ToolTipClose
|
|
{
|
|
get
|
|
{
|
|
if (_toolTipClose == null)
|
|
_toolTipClose = Strings.DockPaneStrip_ToolTipClose;
|
|
return _toolTipClose;
|
|
}
|
|
}
|
|
|
|
private static string _toolTipScrollLeft = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolTipScrollLeft"]/*'/>
|
|
protected virtual string ToolTipScrollLeft
|
|
{
|
|
get
|
|
{
|
|
if (_toolTipScrollLeft == null)
|
|
_toolTipScrollLeft = Strings.DockPaneStrip_ToolTipScrollLeft;
|
|
return _toolTipScrollLeft;
|
|
}
|
|
}
|
|
|
|
private static string _toolTipScrollRight = null;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolTipScrollRight"]/*'/>
|
|
protected virtual string ToolTipScrollRight
|
|
{
|
|
get
|
|
{
|
|
if (_toolTipScrollRight == null)
|
|
_toolTipScrollRight = Strings.DockPaneStrip_ToolTipScrollRight;
|
|
return _toolTipScrollRight;
|
|
}
|
|
}
|
|
|
|
private static TextFormatFlags _toolWindowTextFormat =
|
|
TextFormatFlags.EndEllipsis |
|
|
TextFormatFlags.HorizontalCenter |
|
|
TextFormatFlags.SingleLine |
|
|
TextFormatFlags.VerticalCenter;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ToolWindowTextStringFormat"]/*'/>
|
|
protected virtual TextFormatFlags ToolWindowTextFormat
|
|
{
|
|
get { return _toolWindowTextFormat; }
|
|
}
|
|
|
|
private static TextFormatFlags _documentTextFormat =
|
|
TextFormatFlags.PathEllipsis |
|
|
TextFormatFlags.SingleLine |
|
|
TextFormatFlags.VerticalCenter;
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentTextStringFormat"]/*'/>
|
|
public static TextFormatFlags DocumentTextFormat
|
|
{
|
|
get { return _documentTextFormat; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentTabMaxWidth"]/*'/>
|
|
protected virtual int DocumentTabMaxWidth
|
|
{
|
|
get { return _DocumentTabMaxWidth; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentButtonGapTop"]/*'/>
|
|
protected virtual int DocumentButtonGapTop
|
|
{
|
|
get { return _DocumentButtonGapTop; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentButtonGapBottom"]/*'/>
|
|
protected virtual int DocumentButtonGapBottom
|
|
{
|
|
get { return _DocumentButtonGapBottom; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentButtonGapBetween"]/*'/>
|
|
protected virtual int DocumentButtonGapBetween
|
|
{
|
|
get { return _DocumentButtonGapBetween; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentButtonGapRight"]/*'/>
|
|
protected virtual int DocumentButtonGapRight
|
|
{
|
|
get { return _DocumentButtonGapRight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentTabGapTop"]/*'/>
|
|
protected virtual int DocumentTabGapTop
|
|
{
|
|
get { return _DocumentTabGapTop; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentTabGapLeft"]/*'/>
|
|
protected virtual int DocumentTabGapLeft
|
|
{
|
|
get { return _DocumentTabGapLeft; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentTabGapRight"]/*'/>
|
|
protected virtual int DocumentTabGapRight
|
|
{
|
|
get { return _DocumentTabGapRight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentIconGapLeft"]/*'/>
|
|
protected virtual int DocumentIconGapLeft
|
|
{
|
|
get { return _DocumentIconGapLeft; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentIconWidth"]/*'/>
|
|
protected virtual int DocumentIconWidth
|
|
{
|
|
get { return _DocumentIconWidth; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="DocumentIconHeight"]/*'/>
|
|
protected virtual int DocumentIconHeight
|
|
{
|
|
get { return _DocumentIconHeight; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="OutlineInnerPen"]/*'/>
|
|
protected virtual Pen OutlineInnerPen
|
|
{
|
|
get { return SystemPens.ControlText; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="OutlineOuterPen"]/*'/>
|
|
protected virtual Pen OutlineOuterPen
|
|
{
|
|
get { return SystemPens.ActiveCaptionText; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ActiveBackBrush"]/*'/>
|
|
protected virtual Brush ActiveBackBrush
|
|
{
|
|
get { return SystemBrushes.Control; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="ActiveTextBrush"]/*'/>
|
|
protected virtual Color ActiveTextColor
|
|
{
|
|
get { return SystemColors.ControlText; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="TabSeperatorPen"]/*'/>
|
|
protected virtual Pen TabSeperatorPen
|
|
{
|
|
get { return SystemPens.GrayText; }
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Property[@name="InactiveTextBrush"]/*'/>
|
|
protected virtual Color InactiveTextColor
|
|
{
|
|
get { return SystemColors.ControlDarkDark; }
|
|
}
|
|
#endregion
|
|
|
|
public VS2003DockPaneStrip(DockPane pane) : base(pane)
|
|
{
|
|
SetStyle(ControlStyles.ResizeRedraw, true);
|
|
SetStyle(ControlStyles.UserPaint, true);
|
|
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
|
|
|
|
SuspendLayout();
|
|
|
|
Font = SystemInformation.MenuFont;
|
|
BackColor = Color.WhiteSmoke;
|
|
|
|
m_components = new Container();
|
|
m_toolTip = new ToolTip(Components);
|
|
|
|
m_buttonClose = new InertButton(ImageCloseEnabled, ImageCloseDisabled);
|
|
m_buttonScrollLeft = new InertButton(ImageScrollLeftEnabled, ImageScrollLeftDisabled);
|
|
m_buttonScrollRight = new InertButton(ImageScrollRightEnabled, ImageScrollRightDisabled);
|
|
|
|
m_buttonClose.ToolTipText = ToolTipClose;
|
|
m_buttonClose.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
|
m_buttonClose.Click += new EventHandler(Close_Click);
|
|
|
|
m_buttonScrollLeft.Enabled = false;
|
|
m_buttonScrollLeft.RepeatClick = true;
|
|
m_buttonScrollLeft.ToolTipText = ToolTipScrollLeft;
|
|
m_buttonScrollLeft.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
|
m_buttonScrollLeft.Click += new EventHandler(ScrollLeft_Click);
|
|
|
|
m_buttonScrollRight.Enabled = false;
|
|
m_buttonScrollRight.RepeatClick = true;
|
|
m_buttonScrollRight.ToolTipText = ToolTipScrollRight;
|
|
m_buttonScrollRight.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
|
m_buttonScrollRight.Click += new EventHandler(ScrollRight_Click);
|
|
|
|
Controls.AddRange(new Control[] { m_buttonClose,
|
|
m_buttonScrollLeft,
|
|
m_buttonScrollRight });
|
|
|
|
ResumeLayout();
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
Components.Dispose();
|
|
}
|
|
base.Dispose (disposing);
|
|
}
|
|
|
|
protected override int MeasureHeight()
|
|
{
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
return MeasureHeight_ToolWindow();
|
|
else
|
|
return MeasureHeight_Document();
|
|
}
|
|
|
|
private int MeasureHeight_ToolWindow()
|
|
{
|
|
if (DockPane.IsAutoHide || Tabs.Count <= 1)
|
|
return 0;
|
|
|
|
int height = Math.Max(Font.Height, ToolWindowImageHeight)
|
|
+ ToolWindowImageGapTop + ToolWindowImageGapBottom;
|
|
|
|
return height;
|
|
}
|
|
|
|
private int MeasureHeight_Document()
|
|
{
|
|
int height = Math.Max(Font.Height + DocumentTabGapTop,
|
|
ImageCloseEnabled.Height + DocumentButtonGapTop + DocumentButtonGapBottom);
|
|
|
|
return height;
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
base.OnPaint (e);
|
|
CalculateTabs();
|
|
DrawTabStrip(e.Graphics);
|
|
}
|
|
|
|
protected override void OnRefreshChanges()
|
|
{
|
|
CalculateTabs();
|
|
SetInertButtons();
|
|
Invalidate();
|
|
}
|
|
|
|
protected override GraphicsPath GetOutline(int index)
|
|
{
|
|
Point[] pts = new Point[8];
|
|
|
|
if (Appearance == DockPane.AppearanceStyle.Document)
|
|
{
|
|
Rectangle rectTab = GetTabRectangle(index);
|
|
rectTab.Intersect(TabsRectangle);
|
|
int y = DockPane.PointToClient(PointToScreen(new Point(0, rectTab.Bottom))).Y;
|
|
Rectangle rectPaneClient = DockPane.ClientRectangle;
|
|
pts[0] = DockPane.PointToScreen(new Point(rectPaneClient.Left, y));
|
|
pts[1] = PointToScreen(new Point(rectTab.Left, rectTab.Bottom));
|
|
pts[2] = PointToScreen(new Point(rectTab.Left, rectTab.Top));
|
|
pts[3] = PointToScreen(new Point(rectTab.Right, rectTab.Top));
|
|
pts[4] = PointToScreen(new Point(rectTab.Right, rectTab.Bottom));
|
|
pts[5] = DockPane.PointToScreen(new Point(rectPaneClient.Right, y));
|
|
pts[6] = DockPane.PointToScreen(new Point(rectPaneClient.Right, rectPaneClient.Bottom));
|
|
pts[7] = DockPane.PointToScreen(new Point(rectPaneClient.Left, rectPaneClient.Bottom));
|
|
}
|
|
else
|
|
{
|
|
Rectangle rectTab = GetTabRectangle(index);
|
|
rectTab.Intersect(TabsRectangle);
|
|
int y = DockPane.PointToClient(PointToScreen(new Point(0, rectTab.Top))).Y;
|
|
Rectangle rectPaneClient = DockPane.ClientRectangle;
|
|
pts[0] = DockPane.PointToScreen(new Point(rectPaneClient.Left, rectPaneClient.Top));
|
|
pts[1] = DockPane.PointToScreen(new Point(rectPaneClient.Right, rectPaneClient.Top));
|
|
pts[2] = DockPane.PointToScreen(new Point(rectPaneClient.Right, y));
|
|
pts[3] = PointToScreen(new Point(rectTab.Right, rectTab.Top));
|
|
pts[4] = PointToScreen(new Point(rectTab.Right, rectTab.Bottom));
|
|
pts[5] = PointToScreen(new Point(rectTab.Left, rectTab.Bottom));
|
|
pts[6] = PointToScreen(new Point(rectTab.Left, rectTab.Top));
|
|
pts[7] = DockPane.PointToScreen(new Point(rectPaneClient.Left, y));
|
|
}
|
|
|
|
GraphicsPath path = new GraphicsPath();
|
|
path.AddLines(pts);
|
|
return path;
|
|
}
|
|
|
|
private void CalculateTabs()
|
|
{
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
CalculateTabs_ToolWindow();
|
|
else
|
|
CalculateTabs_Document();
|
|
}
|
|
|
|
private void CalculateTabs_ToolWindow()
|
|
{
|
|
if (Tabs.Count <= 1 || DockPane.IsAutoHide)
|
|
return;
|
|
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
|
|
// Calculate tab widths
|
|
int countTabs = Tabs.Count;
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
tab.MaxWidth = GetTabOriginalWidth(Tabs.IndexOf(tab));
|
|
tab.Flag = false;
|
|
}
|
|
|
|
// Set tab whose max width less than average width
|
|
bool anyWidthWithinAverage = true;
|
|
int totalWidth = rectTabStrip.Width - ToolWindowStripGapLeft - ToolWindowStripGapRight;
|
|
int totalAllocatedWidth = 0;
|
|
int averageWidth = totalWidth / countTabs;
|
|
int remainedTabs = countTabs;
|
|
for (anyWidthWithinAverage=true; anyWidthWithinAverage && remainedTabs>0;)
|
|
{
|
|
anyWidthWithinAverage = false;
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
if (tab.Flag)
|
|
continue;
|
|
|
|
if (tab.MaxWidth <= averageWidth)
|
|
{
|
|
tab.Flag = true;
|
|
tab.TabWidth = tab.MaxWidth;
|
|
totalAllocatedWidth += tab.TabWidth;
|
|
anyWidthWithinAverage = true;
|
|
remainedTabs--;
|
|
}
|
|
}
|
|
if (remainedTabs != 0)
|
|
averageWidth = (totalWidth - totalAllocatedWidth) / remainedTabs;
|
|
}
|
|
|
|
// If any tab width not set yet, set it to the average width
|
|
if (remainedTabs > 0)
|
|
{
|
|
int roundUpWidth = (totalWidth - totalAllocatedWidth) - (averageWidth * remainedTabs);
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
if (tab.Flag)
|
|
continue;
|
|
|
|
tab.Flag = true;
|
|
if (roundUpWidth > 0)
|
|
{
|
|
tab.TabWidth = averageWidth + 1;
|
|
roundUpWidth --;
|
|
}
|
|
else
|
|
tab.TabWidth = averageWidth;
|
|
}
|
|
}
|
|
|
|
// Set the X position of the tabs
|
|
int x = rectTabStrip.X + ToolWindowStripGapLeft;
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
tab.TabX = x;
|
|
x += tab.TabWidth;
|
|
}
|
|
}
|
|
|
|
private void CalculateTabs_Document()
|
|
{
|
|
Rectangle rectTabStrip = TabsRectangle;
|
|
|
|
int totalWidth = 0;
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
tab.TabWidth = Math.Min(GetTabOriginalWidth(Tabs.IndexOf(tab)), DocumentTabMaxWidth);
|
|
totalWidth += tab.TabWidth;
|
|
}
|
|
|
|
if (totalWidth + OffsetX < rectTabStrip.Width && OffsetX < 0)
|
|
OffsetX = Math.Min(0, rectTabStrip.Width - totalWidth);
|
|
|
|
int x = rectTabStrip.X + OffsetX;
|
|
foreach (TabVS2003 tab in Tabs)
|
|
{
|
|
tab.TabX = x;
|
|
x += tab.TabWidth;
|
|
}
|
|
}
|
|
|
|
protected override void EnsureTabVisible(IDockContent content)
|
|
{
|
|
if (Appearance != DockPane.AppearanceStyle.Document || !Tabs.Contains(content))
|
|
return;
|
|
|
|
Rectangle rectTabStrip = TabsRectangle;
|
|
Rectangle rectTab = GetTabRectangle(Tabs.IndexOf(content));
|
|
|
|
if (rectTab.Right > rectTabStrip.Right)
|
|
{
|
|
OffsetX -= rectTab.Right - rectTabStrip.Right;
|
|
rectTab.X -= rectTab.Right - rectTabStrip.Right;
|
|
}
|
|
|
|
if (rectTab.Left < rectTabStrip.Left)
|
|
OffsetX += rectTabStrip.Left - rectTab.Left;
|
|
|
|
OnRefreshChanges();
|
|
}
|
|
|
|
private int GetTabOriginalWidth(int index)
|
|
{
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
return GetTabOriginalWidth_ToolWindow(index);
|
|
else
|
|
return GetTabOriginalWidth_Document(index);
|
|
}
|
|
|
|
private int GetTabOriginalWidth_ToolWindow(int index)
|
|
{
|
|
IDockContent content = Tabs[index].Content;
|
|
using (Graphics g = CreateGraphics())
|
|
{
|
|
Size sizeString = TextRenderer.MeasureText(g, content.DockHandler.TabText, Font);
|
|
return ToolWindowImageWidth + sizeString.Width + ToolWindowImageGapLeft
|
|
+ ToolWindowImageGapRight + ToolWindowTextGapRight;
|
|
}
|
|
}
|
|
|
|
private int GetTabOriginalWidth_Document(int index)
|
|
{
|
|
IDockContent content = Tabs[index].Content;
|
|
|
|
int height = GetTabRectangle_Document(index).Height;
|
|
|
|
using (Graphics g = CreateGraphics())
|
|
{
|
|
Size sizeText;
|
|
if (content == DockPane.ActiveContent && DockPane.IsActiveDocumentPane)
|
|
{
|
|
using (Font boldFont = new Font(this.Font, FontStyle.Bold))
|
|
{
|
|
sizeText = TextRenderer.MeasureText(g, content.DockHandler.TabText, boldFont, new Size(DocumentTabMaxWidth, height), DocumentTextFormat);
|
|
}
|
|
}
|
|
else
|
|
sizeText = TextRenderer.MeasureText(content.DockHandler.TabText, Font, new Size(DocumentTabMaxWidth, height), DocumentTextFormat);
|
|
|
|
if (DockPane.DockPanel.ShowDocumentIcon)
|
|
return sizeText.Width + DocumentIconWidth + DocumentIconGapLeft;
|
|
else
|
|
return sizeText.Width;
|
|
}
|
|
}
|
|
|
|
private void DrawTabStrip(Graphics g)
|
|
{
|
|
OnBeginDrawTabStrip();
|
|
|
|
if (Appearance == DockPane.AppearanceStyle.Document)
|
|
DrawTabStrip_Document(g);
|
|
else
|
|
DrawTabStrip_ToolWindow(g);
|
|
|
|
OnEndDrawTabStrip();
|
|
}
|
|
|
|
private void DrawTabStrip_Document(Graphics g)
|
|
{
|
|
int count = Tabs.Count;
|
|
if (count == 0)
|
|
return;
|
|
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
g.DrawLine(OutlineOuterPen, rectTabStrip.Left, rectTabStrip.Bottom - 1,
|
|
rectTabStrip.Right, rectTabStrip.Bottom - 1);
|
|
|
|
// Draw the tabs
|
|
Rectangle rectTabOnly = TabsRectangle;
|
|
Rectangle rectTab = Rectangle.Empty;
|
|
g.SetClip(rectTabOnly);
|
|
for (int i=0; i<count; i++)
|
|
{
|
|
rectTab = GetTabRectangle(i);
|
|
if (rectTab.IntersectsWith(rectTabOnly))
|
|
DrawTab(g, Tabs[i] as TabVS2003, rectTab);
|
|
}
|
|
}
|
|
|
|
private void DrawTabStrip_ToolWindow(Graphics g)
|
|
{
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
|
|
g.DrawLine(OutlineInnerPen, rectTabStrip.Left, rectTabStrip.Top,
|
|
rectTabStrip.Right, rectTabStrip.Top);
|
|
|
|
for (int i=0; i<Tabs.Count; i++)
|
|
DrawTab(g, Tabs[i] as TabVS2003, GetTabRectangle(i));
|
|
}
|
|
|
|
private Rectangle GetTabRectangle(int index)
|
|
{
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
return GetTabRectangle_ToolWindow(index);
|
|
else
|
|
return GetTabRectangle_Document(index);
|
|
}
|
|
|
|
private Rectangle GetTabRectangle_ToolWindow(int index)
|
|
{
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
|
|
TabVS2003 tab = (TabVS2003)(Tabs[index]);
|
|
return new Rectangle(tab.TabX, rectTabStrip.Y, tab.TabWidth, rectTabStrip.Height);
|
|
}
|
|
|
|
private Rectangle GetTabRectangle_Document(int index)
|
|
{
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
TabVS2003 tab = (TabVS2003)Tabs[index];
|
|
|
|
return new Rectangle(tab.TabX, rectTabStrip.Y + DocumentTabGapTop, tab.TabWidth, rectTabStrip.Height - DocumentTabGapTop);
|
|
}
|
|
|
|
private void DrawTab(Graphics g, TabVS2003 tab, Rectangle rect)
|
|
{
|
|
OnBeginDrawTab(tab);
|
|
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
DrawTab_ToolWindow(g, tab, rect);
|
|
else
|
|
DrawTab_Document(g, tab, rect);
|
|
|
|
OnEndDrawTab(tab);
|
|
}
|
|
|
|
private void DrawTab_ToolWindow(Graphics g, TabVS2003 tab, Rectangle rect)
|
|
{
|
|
Rectangle rectIcon = new Rectangle(
|
|
rect.X + ToolWindowImageGapLeft,
|
|
rect.Y + rect.Height - 1 - ToolWindowImageGapBottom - ToolWindowImageHeight,
|
|
ToolWindowImageWidth, ToolWindowImageHeight);
|
|
Rectangle rectText = rectIcon;
|
|
rectText.X += rectIcon.Width + ToolWindowImageGapRight;
|
|
rectText.Width = rect.Width - rectIcon.Width - ToolWindowImageGapLeft -
|
|
ToolWindowImageGapRight - ToolWindowTextGapRight;
|
|
|
|
if (DockPane.ActiveContent == tab.Content)
|
|
{
|
|
g.FillRectangle(ActiveBackBrush, rect);
|
|
g.DrawLine(OutlineOuterPen,
|
|
rect.X, rect.Y, rect.X, rect.Y + rect.Height - 1);
|
|
g.DrawLine(OutlineInnerPen,
|
|
rect.X, rect.Y + rect.Height - 1, rect.X + rect.Width - 1, rect.Y + rect.Height - 1);
|
|
g.DrawLine(OutlineInnerPen,
|
|
rect.X + rect.Width - 1, rect.Y, rect.X + rect.Width - 1, rect.Y + rect.Height - 1);
|
|
TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, Font, rectText, ActiveTextColor, ToolWindowTextFormat);
|
|
}
|
|
else
|
|
{
|
|
if (Tabs.IndexOf(DockPane.ActiveContent) != Tabs.IndexOf(tab) + 1)
|
|
g.DrawLine(TabSeperatorPen,
|
|
rect.X + rect.Width - 1,
|
|
rect.Y + ToolWindowTabSeperatorGapTop,
|
|
rect.X + rect.Width - 1,
|
|
rect.Y + rect.Height - 1 - ToolWindowTabSeperatorGapBottom);
|
|
TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, Font, rectText, InactiveTextColor, ToolWindowTextFormat);
|
|
}
|
|
|
|
if (rect.Contains(rectIcon))
|
|
g.DrawIcon(tab.Content.DockHandler.Icon, rectIcon);
|
|
}
|
|
|
|
private void DrawTab_Document(Graphics g, TabVS2003 tab, Rectangle rect)
|
|
{
|
|
Rectangle rectText = rect;
|
|
if (DockPane.DockPanel.ShowDocumentIcon)
|
|
{
|
|
rectText.X += DocumentIconWidth + DocumentIconGapLeft;
|
|
rectText.Width -= DocumentIconWidth + DocumentIconGapLeft;
|
|
}
|
|
|
|
if (DockPane.ActiveContent == tab.Content)
|
|
{
|
|
g.FillRectangle(ActiveBackBrush, rect);
|
|
g.DrawLine(OutlineOuterPen, rect.X, rect.Y, rect.X, rect.Y + rect.Height);
|
|
g.DrawLine(OutlineOuterPen, rect.X, rect.Y, rect.X + rect.Width - 1, rect.Y);
|
|
g.DrawLine(OutlineInnerPen,
|
|
rect.X + rect.Width - 1, rect.Y,
|
|
rect.X + rect.Width - 1, rect.Y + rect.Height - 1);
|
|
|
|
if (DockPane.DockPanel.ShowDocumentIcon)
|
|
{
|
|
Icon icon = (tab.Content as Form).Icon;
|
|
Rectangle rectIcon = new Rectangle(
|
|
rect.X + DocumentIconGapLeft,
|
|
rect.Y + (rect.Height - DocumentIconHeight) / 2,
|
|
DocumentIconWidth, DocumentIconHeight);
|
|
|
|
g.DrawIcon(tab.ContentForm.Icon, rectIcon);
|
|
}
|
|
|
|
if (DockPane.IsActiveDocumentPane)
|
|
{
|
|
using (Font boldFont = new Font(this.Font, FontStyle.Bold))
|
|
{
|
|
TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, boldFont, rectText, ActiveTextColor, DocumentTextFormat);
|
|
}
|
|
}
|
|
else
|
|
TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, Font, rectText, InactiveTextColor, DocumentTextFormat);
|
|
}
|
|
else
|
|
{
|
|
if (Tabs.IndexOf(DockPane.ActiveContent) != Tabs.IndexOf(tab) + 1)
|
|
g.DrawLine(TabSeperatorPen,
|
|
rect.X + rect.Width - 1, rect.Y,
|
|
rect.X + rect.Width - 1, rect.Y + rect.Height - 1 - DocumentTabGapTop);
|
|
|
|
if (DockPane.DockPanel.ShowDocumentIcon)
|
|
{
|
|
Icon icon = tab.ContentForm.Icon;
|
|
Rectangle rectIcon = new Rectangle(
|
|
rect.X + DocumentIconGapLeft,
|
|
rect.Y + (rect.Height - DocumentIconHeight) / 2,
|
|
DocumentIconWidth, DocumentIconHeight);
|
|
|
|
g.DrawIcon(tab.ContentForm.Icon, rectIcon);
|
|
}
|
|
|
|
TextRenderer.DrawText(g, tab.Content.DockHandler.TabText, Font, rectText, InactiveTextColor, DocumentTextFormat);
|
|
}
|
|
}
|
|
|
|
private Rectangle TabsRectangle
|
|
{
|
|
get
|
|
{
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
return ClientRectangle;
|
|
|
|
Rectangle rectWindow = ClientRectangle;
|
|
int x = rectWindow.X;
|
|
int y = rectWindow.Y;
|
|
int width = rectWindow.Width;
|
|
int height = rectWindow.Height;
|
|
|
|
x += DocumentTabGapLeft;
|
|
width -= DocumentTabGapLeft +
|
|
DocumentTabGapRight +
|
|
DocumentButtonGapRight +
|
|
m_buttonClose.Width +
|
|
m_buttonScrollRight.Width +
|
|
m_buttonScrollLeft.Width +
|
|
2 * DocumentButtonGapBetween;
|
|
|
|
return new Rectangle(x, y, width, height);
|
|
}
|
|
}
|
|
|
|
private void ScrollLeft_Click(object sender, EventArgs e)
|
|
{
|
|
Rectangle rectTabStrip = TabsRectangle;
|
|
|
|
int index;
|
|
for (index=0; index<Tabs.Count; index++)
|
|
if (GetTabRectangle(index).IntersectsWith(rectTabStrip))
|
|
break;
|
|
|
|
Rectangle rectTab = GetTabRectangle(index);
|
|
if (rectTab.Left < rectTabStrip.Left)
|
|
OffsetX += rectTabStrip.Left - rectTab.Left;
|
|
else if (index == 0)
|
|
OffsetX = 0;
|
|
else
|
|
OffsetX += rectTabStrip.Left - GetTabRectangle(index - 1).Left;
|
|
|
|
OnRefreshChanges();
|
|
}
|
|
|
|
private void ScrollRight_Click(object sender, EventArgs e)
|
|
{
|
|
Rectangle rectTabStrip = TabsRectangle;
|
|
|
|
int index;
|
|
int count = Tabs.Count;
|
|
for (index=0; index<count; index++)
|
|
if (GetTabRectangle(index).IntersectsWith(rectTabStrip))
|
|
break;
|
|
|
|
if (index + 1 < count)
|
|
{
|
|
OffsetX -= GetTabRectangle(index + 1).Left - rectTabStrip.Left;
|
|
CalculateTabs();
|
|
}
|
|
|
|
Rectangle rectLastTab = GetTabRectangle(count - 1);
|
|
if (rectLastTab.Right < rectTabStrip.Right)
|
|
OffsetX += rectTabStrip.Right - rectLastTab.Right;
|
|
|
|
OnRefreshChanges();
|
|
}
|
|
|
|
private void SetInertButtons()
|
|
{
|
|
// Set the visibility of the inert buttons
|
|
m_buttonScrollLeft.Visible = m_buttonScrollRight.Visible = m_buttonClose.Visible = (DockPane.DockState == DockState.Document);
|
|
|
|
m_buttonClose.ForeColor = m_buttonScrollRight.ForeColor = m_buttonScrollLeft.ForeColor = SystemColors.ControlDarkDark;
|
|
m_buttonClose.BorderColor = m_buttonScrollRight.BorderColor = m_buttonScrollLeft.BorderColor = SystemColors.ControlDarkDark;
|
|
|
|
// Enable/disable scroll buttons
|
|
int count = Tabs.Count;
|
|
|
|
Rectangle rectTabOnly = TabsRectangle;
|
|
Rectangle rectTab = (count == 0) ? Rectangle.Empty : GetTabRectangle(count - 1);
|
|
m_buttonScrollLeft.Enabled = (OffsetX < 0);
|
|
m_buttonScrollRight.Enabled = rectTab.Right > rectTabOnly.Right;
|
|
|
|
// show/hide close button
|
|
if (Appearance == DockPane.AppearanceStyle.ToolWindow)
|
|
m_buttonClose.Visible = false;
|
|
else
|
|
{
|
|
bool showCloseButton = DockPane.ActiveContent == null ? true : DockPane.ActiveContent.DockHandler.CloseButton;
|
|
if (m_buttonClose.Visible != showCloseButton)
|
|
{
|
|
m_buttonClose.Visible = showCloseButton;
|
|
PerformLayout();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <exclude/>
|
|
protected override void OnLayout(LayoutEventArgs levent)
|
|
{
|
|
Rectangle rectTabStrip = ClientRectangle;
|
|
|
|
// Set position and size of the buttons
|
|
int buttonWidth = ImageCloseEnabled.Width;
|
|
int buttonHeight = ImageCloseEnabled.Height;
|
|
int height = rectTabStrip.Height - DocumentButtonGapTop - DocumentButtonGapBottom;
|
|
if (buttonHeight < height)
|
|
{
|
|
buttonWidth = buttonWidth * (height / buttonHeight);
|
|
buttonHeight = height;
|
|
}
|
|
Size buttonSize = new Size(buttonWidth, buttonHeight);
|
|
m_buttonClose.Size = m_buttonScrollLeft.Size = m_buttonScrollRight.Size = buttonSize;
|
|
int x = rectTabStrip.X + rectTabStrip.Width - DocumentTabGapLeft
|
|
- DocumentButtonGapRight - buttonWidth;
|
|
int y = rectTabStrip.Y + DocumentButtonGapTop;
|
|
m_buttonClose.Location = new Point(x, y);
|
|
Point point = m_buttonClose.Location;
|
|
bool showCloseButton = DockPane.ActiveContent == null ? true : DockPane.ActiveContent.DockHandler.CloseButton;
|
|
if (showCloseButton)
|
|
point.Offset(-(DocumentButtonGapBetween + buttonWidth), 0);
|
|
m_buttonScrollRight.Location = point;
|
|
point.Offset(-(DocumentButtonGapBetween + buttonWidth), 0);
|
|
m_buttonScrollLeft.Location = point;
|
|
|
|
OnRefreshChanges();
|
|
|
|
base.OnLayout (levent);
|
|
}
|
|
|
|
private void Close_Click(object sender, EventArgs e)
|
|
{
|
|
DockPane.CloseActiveContent();
|
|
}
|
|
|
|
/// <exclude/>
|
|
protected override int HitTest(Point ptMouse)
|
|
{
|
|
Rectangle rectTabStrip = TabsRectangle;
|
|
|
|
for (int i=0; i<Tabs.Count; i++)
|
|
{
|
|
Rectangle rectTab = GetTabRectangle(i);
|
|
rectTab.Intersect(rectTabStrip);
|
|
if (rectTab.Contains(ptMouse))
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/// <exclude/>
|
|
protected override void OnMouseMove(MouseEventArgs e)
|
|
{
|
|
int index = HitTest(PointToClient(Control.MousePosition));
|
|
string toolTip = string.Empty;
|
|
|
|
base.OnMouseMove(e);
|
|
|
|
if (index != -1)
|
|
{
|
|
Rectangle rectTab = GetTabRectangle(index);
|
|
if (Tabs[index].Content.DockHandler.ToolTipText != null)
|
|
toolTip = Tabs[index].Content.DockHandler.ToolTipText;
|
|
else if (rectTab.Width < GetTabOriginalWidth(index))
|
|
toolTip = Tabs[index].Content.DockHandler.TabText;
|
|
}
|
|
|
|
if (m_toolTip.GetToolTip(this) != toolTip)
|
|
{
|
|
m_toolTip.Active = false;
|
|
m_toolTip.SetToolTip(this, toolTip);
|
|
m_toolTip.Active = true;
|
|
}
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Method[@name="OnBeginDrawTabStrip()"]/*'/>
|
|
protected virtual void OnBeginDrawTabStrip()
|
|
{
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Method[@name="OnEndDrawTabStrip()"]/*'/>
|
|
protected virtual void OnEndDrawTabStrip()
|
|
{
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Method[@name="OnBeginDrawTab(DockPaneTab)"]/*'/>
|
|
protected virtual void OnBeginDrawTab(Tab tab)
|
|
{
|
|
}
|
|
|
|
/// <include file='CodeDoc/DockPaneStripVS2003.xml' path='//CodeDoc/Class[@name="DockPaneStripVS2003"]/Method[@name="OnEndDrawTab(DockPaneTab)"]/*'/>
|
|
protected virtual void OnEndDrawTab(Tab tab)
|
|
{
|
|
}
|
|
}
|
|
}
|