context: using System;
  using System.Drawing;
  using System.Windows.Forms;
  using System.ComponentModel;
  using WeifenLuo.WinFormsUI.Docking;
  
  namespace DockSample.Customization
  {
  	/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/ClassDef/*'/>
  	internal class VS2003DockPaneCaption : DockPaneCaptionBase
  	{
  		#region consts
  		private const int _TextGapTop = 2;
  		private const int _TextGapBottom = 0;
  		private const int _TextGapLeft = 3;
  		private const int _TextGapRight = 3;
  		private const int _ButtonGapTop = 2;
  		private const int _ButtonGapBottom = 1;
  		private const int _ButtonGapBetween = 1;
  		private const int _ButtonGapLeft = 1;
  		private const int _ButtonGapRight = 2;
  		#endregion
  
  		private InertButton m_buttonClose;
  		private InertButton m_buttonAutoHide;
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Construct[@name="(DockPane)"]/*'/>
  		protected internal VS2003DockPaneCaption(DockPane pane) : base(pane)
  		{
  			SuspendLayout();
  
  			Font = SystemInformation.MenuFont;
  
  			m_buttonClose = new InertButton(ImageCloseEnabled, ImageCloseDisabled);
  			m_buttonAutoHide = new InertButton();
  
  			m_buttonClose.ToolTipText = ToolTipClose;
  			m_buttonClose.Anchor = AnchorStyles.Top | AnchorStyles.Right;
  			m_buttonClose.Click += new EventHandler(this.Close_Click);
  
  			m_buttonAutoHide.ToolTipText = ToolTipAutoHide;
  			m_buttonAutoHide.Anchor = AnchorStyles.Top | AnchorStyles.Right;
  			m_buttonAutoHide.Click += new EventHandler(AutoHide_Click);
  
  			Controls.AddRange(new Control[]	{	m_buttonClose, m_buttonAutoHide });
  
  			ResumeLayout();
  		}
  
  		#region Customizable Properties
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="TextGapTop"]/*'/>
  		protected virtual int TextGapTop
  		{
  			get	{	return _TextGapTop;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="TextGapBottom"]/*'/>
  		protected virtual int TextGapBottom
  		{
  			get	{	return _TextGapBottom;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="TextGapLeft"]/*'/>
  		protected virtual int TextGapLeft
  		{
  			get	{	return _TextGapLeft;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="TextGapRight"]/*'/>
  		protected virtual int TextGapRight
  		{
  			get	{	return _TextGapRight;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ButtonGapTop"]/*'/>
  		protected virtual int ButtonGapTop
  		{
  			get	{	return _ButtonGapTop;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ButtonGapBottom"]/*'/>
  		protected virtual int ButtonGapBottom
  		{
  			get	{	return _ButtonGapBottom;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ButtonGapLeft"]/*'/>
  		protected virtual int ButtonGapLeft
  		{
  			get	{	return _ButtonGapLeft;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ButtonGapRight"]/*'/>
  		protected virtual int ButtonGapRight
  		{
  			get	{	return _ButtonGapRight;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ButtonGapBetween"]/*'/>
  		protected virtual int ButtonGapBetween
  		{
  			get	{	return _ButtonGapBetween;	}
  		}
  
  		private static Image _imageCloseEnabled = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ImageCloseEnabled"]/*'/>
  		protected virtual Image ImageCloseEnabled
  		{
  			get
  			{	
  				if (_imageCloseEnabled == null)
  					_imageCloseEnabled = Resources.DockPaneCaption_CloseEnabled;
  				return _imageCloseEnabled;
  			}
  		}
  
  		private static Image _imageCloseDisabled = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ImageCloseDisabled"]/*'/>
  		protected virtual Image ImageCloseDisabled
  		{
  			get
  			{	
  				if (_imageCloseDisabled == null)
  					_imageCloseDisabled = Resources.DockPaneCaption_CloseDisabled;
  				return _imageCloseDisabled;
  			}
  		}
  
  		private static Image _imageAutoHideYes = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ImageAutoHideYes"]/*'/>
  		protected virtual Image ImageAutoHideYes
  		{
  			get
  			{	
  				if (_imageAutoHideYes == null)
  					_imageAutoHideYes = Resources.DockPaneCaption_AutoHideYes;
  				return _imageAutoHideYes;
  			}
  		}
  
  		private static Image _imageAutoHideNo = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ImageAutoHideNo"]/*'/>
  		protected virtual Image ImageAutoHideNo
  		{
  			get
  			{	
  				if (_imageAutoHideNo == null)
  					_imageAutoHideNo = Resources.DockPaneCaption_AutoHideNo;
  				return _imageAutoHideNo;
  			}
  		}
  
  		private static string _toolTipClose = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ToolTipClose"]/*'/>
  		protected virtual string ToolTipClose
  		{
  			get
  			{	
  				if (_toolTipClose == null)
  					_toolTipClose = Strings.DockPaneCaption_ToolTipClose;
  				return _toolTipClose;
  			}
  		}
  
  		private static string _toolTipAutoHide = null;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ToolTipAutoHide"]/*'/>
  		protected virtual string ToolTipAutoHide
  		{
  			get
  			{	
  				if (_toolTipAutoHide == null)
  					_toolTipAutoHide = Strings.DockPaneCaption_ToolTipAutoHide;
  				return _toolTipAutoHide;
  			}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ActiveBackColor"]/*'/>
  		protected virtual Color ActiveBackColor
  		{
  			get	{	return SystemColors.ActiveCaption;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="InactiveBackColor"]/*'/>
  		protected virtual Color InactiveBackColor
  		{
  			get	{	return SystemColors.Control;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ActiveTextColor"]/*'/>
  		protected virtual Color ActiveTextColor
  		{
  			get	{	return SystemColors.ActiveCaptionText;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="InactiveTextColor"]/*'/>
  		protected virtual Color InactiveTextColor
  		{
  			get	{	return SystemColors.ControlText;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="InactiveBorderColor"]/*'/>
  		protected virtual Color InactiveBorderColor
  		{
  			get	{	return SystemColors.GrayText; }
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="ActiveButtonBorderColor"]/*'/>
  		protected virtual Color ActiveButtonBorderColor
  		{
  			get	{	return ActiveTextColor;	}
  		}
  
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="InactiveButtonBorderColor"]/*'/>
  		protected virtual Color InactiveButtonBorderColor
  		{
  			get	{	return Color.Empty;	}
  		}
  
  		private static TextFormatFlags _textFormat =
              TextFormatFlags.SingleLine |
              TextFormatFlags.EndEllipsis |
              TextFormatFlags.VerticalCenter;
  		/// <include file='CodeDoc/DockPaneCaptionVS2003.xml' path='//CodeDoc/Class[@name="DockPaneCaptionVS2003"]/Property[@name="TextStringFormat"]/*'/>
  		protected virtual TextFormatFlags TextFormat
  		{
              get
              {
                  return _textFormat;
              }
  		}
  
  		#endregion
  
  		/// <exclude/>
  		protected override int MeasureHeight()
  		{
  			int height = Font.Height + TextGapTop + TextGapBottom;
  
  			if (height < ImageCloseEnabled.Height + ButtonGapTop + ButtonGapBottom)
  				height = ImageCloseEnabled.Height + ButtonGapTop + ButtonGapBottom;
  
  			return height;
  		}
  
  		/// <exclude/>
  		protected override void OnPaint(PaintEventArgs e)
  		{
  			base.OnPaint (e);
  			DrawCaption(e.Graphics);
  		}
  
  		private void DrawCaption(Graphics g)
  		{
  			BackColor = DockPane.IsActivated ? ActiveBackColor : InactiveBackColor;
  
  			Rectangle rectCaption = ClientRectangle;
  
  			if (!DockPane.IsActivated)
  			{
  				using (Pen pen = new Pen(InactiveBorderColor))
  				{
  					g.DrawLine(pen, rectCaption.X + 1, rectCaption.Y, rectCaption.X + rectCaption.Width - 2, rectCaption.Y);
  					g.DrawLine(pen, rectCaption.X + 1, rectCaption.Y + rectCaption.Height - 1, rectCaption.X + rectCaption.Width - 2, rectCaption.Y + rectCaption.Height - 1);
  					g.DrawLine(pen, rectCaption.X, rectCaption.Y + 1, rectCaption.X, rectCaption.Y + rectCaption.Height - 2);
  					g.DrawLine(pen, rectCaption.X + rectCaption.Width - 1, rectCaption.Y + 1, rectCaption.X + rectCaption.Width - 1, rectCaption.Y + rectCaption.Height - 2);
  				}
  			}
  
  			m_buttonClose.ForeColor = m_buttonAutoHide.ForeColor = (DockPane.IsActivated ? ActiveTextColor : InactiveTextColor);
  			m_buttonClose.BorderColor = m_buttonAutoHide.BorderColor = (DockPane.IsActivated ? ActiveButtonBorderColor : InactiveButtonBorderColor);
  
  			Rectangle rectCaptionText = rectCaption;
  			rectCaptionText.X += TextGapLeft;
  			if (ShouldShowCloseButton && ShouldShowAutoHideButton)
  				rectCaptionText.Width = rectCaption.Width - ButtonGapRight
  					- ButtonGapLeft	- TextGapLeft - TextGapRight -
  					(m_buttonAutoHide.Width + ButtonGapBetween + m_buttonClose.Width);
  			else if (ShouldShowCloseButton || ShouldShowAutoHideButton)
  				rectCaptionText.Width = rectCaption.Width - ButtonGapRight
  					- ButtonGapLeft	- TextGapLeft - TextGapRight - m_buttonClose.Width;
  			else
  				rectCaptionText.Width = rectCaption.Width - TextGapLeft - TextGapRight;
  			rectCaptionText.Y += TextGapTop;
  			rectCaptionText.Height -= TextGapTop + TextGapBottom;
              TextRenderer.DrawText(g, DockPane.CaptionText, Font, rectCaptionText, DockPane.IsActivated ? ActiveTextColor : InactiveTextColor, TextFormat);
  		}
  
  		/// <exclude/>
  		protected override void OnLayout(LayoutEventArgs levent)
  		{
  			SetButtonsPosition();
  			base.OnLayout (levent);
  		}
  
  		/// <exclude/>
  		protected override void OnRefreshChanges()
  		{
  			SetButtons();
  			Invalidate();
  		}
  
  		private bool ShouldShowCloseButton
  		{
  			get	{	return (DockPane.ActiveContent != null)? DockPane.ActiveContent.DockHandler.CloseButton : false;	}
  		}
  
  		private bool ShouldShowAutoHideButton
  		{
  
gt: 			get	{	return !DockPane.IsFloat;	}