1629 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1629 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Drawing;
 | 
						|
using System.Drawing.Drawing2D;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Drawing.Text;
 | 
						|
 | 
						|
namespace DevComponents.DotNetBar
 | 
						|
{
 | 
						|
    [System.ComponentModel.ToolboxItem(false), System.ComponentModel.DesignTimeVisible(false), System.Runtime.InteropServices.ComVisible(false)]
 | 
						|
    public class AutoHidePanel : System.Windows.Forms.Control
 | 
						|
    {
 | 
						|
        private ArrayList m_Panels = new ArrayList(10);
 | 
						|
        private System.Windows.Forms.Timer m_Timer = null;
 | 
						|
 | 
						|
        private eDotNetBarStyle m_Style = eDotNetBarStyle.OfficeXP;
 | 
						|
 | 
						|
        private bool m_EnableHoverExpand = true;
 | 
						|
        private bool m_EnableFocusCollapse = true;
 | 
						|
 | 
						|
        private int m_AutoHideShowTimeout = 800;
 | 
						|
        private ColorScheme m_ColorScheme = null;
 | 
						|
        private DotNetBarManager m_Owner = null;
 | 
						|
 | 
						|
        public AutoHidePanel()
 | 
						|
        {
 | 
						|
            this.SetStyle(ControlStyles.Selectable, false);
 | 
						|
            this.SetStyle(ControlStyles.UserPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.Opaque, true);
 | 
						|
            this.SetStyle(DisplayHelp.DoubleBufferFlag, true);
 | 
						|
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
 | 
						|
            this.SetStyle(ControlStyles.ResizeRedraw, true);
 | 
						|
            //this.Font = SystemFonts.DefaultFont; // SystemInformation.MenuFont.Clone() as Font;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Clean up any resources being used.
 | 
						|
        /// </summary>
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            if (disposing)
 | 
						|
            {
 | 
						|
                DestroyTimer();
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    panel.Dispose();
 | 
						|
                }
 | 
						|
                m_Panels.Clear();
 | 
						|
            }
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        internal void SetOwner(DotNetBarManager owner)
 | 
						|
        {
 | 
						|
            m_Owner = owner;
 | 
						|
        }
 | 
						|
 | 
						|
        private Size _FixedSize = Size.Empty;
 | 
						|
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
 | 
						|
        public Size FixedSize
 | 
						|
        {
 | 
						|
            get { return _FixedSize; }
 | 
						|
            set { _FixedSize = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool m_AntiAlias = false;
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether anti-alias smoothing is used while painting. Default value is false.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(false), Browsable(true), Category("Appearance"), Description("Gets or sets whether anti-aliasing is used while painting.")]
 | 
						|
        public bool AntiAlias
 | 
						|
        {
 | 
						|
            get { return m_AntiAlias; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (m_AntiAlias != value)
 | 
						|
                {
 | 
						|
                    m_AntiAlias = value;
 | 
						|
                    this.Invalidate();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnPaint(PaintEventArgs p)
 | 
						|
        {
 | 
						|
            eTextFormat format = eTextFormat.Default | eTextFormat.VerticalCenter | eTextFormat.SingleLine;
 | 
						|
            Graphics g = p.Graphics;
 | 
						|
            ColorScheme scheme = null;
 | 
						|
 | 
						|
            if (this.BackColor == Color.Transparent || this.BackgroundImage != null)
 | 
						|
            {
 | 
						|
                base.OnPaintBackground(p);
 | 
						|
            }
 | 
						|
 | 
						|
            TextRenderingHint textHint = g.TextRenderingHint;
 | 
						|
            SmoothingMode sm = g.SmoothingMode;
 | 
						|
            if (m_AntiAlias)
 | 
						|
            {
 | 
						|
                g.TextRenderingHint = BarUtilities.AntiAliasTextRenderingHint;
 | 
						|
                g.SmoothingMode = SmoothingMode.AntiAlias;
 | 
						|
            }
 | 
						|
            bool office2007Style = BarFunctions.IsOffice2007Style(m_Style);
 | 
						|
 | 
						|
            if (office2007Style && m_ColorScheme == null && Rendering.GlobalManager.Renderer is Rendering.Office2007Renderer)
 | 
						|
                scheme = ((Rendering.Office2007Renderer)Rendering.GlobalManager.Renderer).ColorTable.LegacyColors;
 | 
						|
            else if (m_Owner != null && m_Owner.UseGlobalColorScheme)
 | 
						|
                scheme = m_Owner.ColorScheme;
 | 
						|
            else if (m_ColorScheme != null)
 | 
						|
                scheme = m_ColorScheme;
 | 
						|
            else
 | 
						|
                scheme = new ColorScheme(m_Style);
 | 
						|
 | 
						|
            Rectangle clientRect = this.ClientRectangle;
 | 
						|
            clientRect.Inflate(1, 1);
 | 
						|
            if (scheme.AutoHidePanelBackgroundImage != null)
 | 
						|
                BarFunctions.PaintBackgroundImage(g, clientRect, scheme.AutoHidePanelBackgroundImage, eBackgroundImagePosition.Tile, 255);
 | 
						|
 | 
						|
            if (!scheme.AutoHidePanelBackground.IsEmpty)
 | 
						|
            {
 | 
						|
                DisplayHelp.FillRectangle(g, clientRect, scheme.AutoHidePanelBackground, scheme.AutoHidePanelBackground2, 90);
 | 
						|
            }
 | 
						|
            else if (IsGradientStyle)
 | 
						|
            {
 | 
						|
                DisplayHelp.FillRectangle(g, clientRect, scheme.BarBackground, scheme.BarBackground2, scheme.BarBackgroundGradientAngle);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                using (SolidBrush brush = new SolidBrush(ControlPaint.Light(this.BackColor)))
 | 
						|
                    g.FillRectangle(brush, this.DisplayRectangle);
 | 
						|
            }
 | 
						|
 | 
						|
            if (m_Style == eDotNetBarStyle.VS2005 || office2007Style)
 | 
						|
            {
 | 
						|
                VS2005TabDisplay td = StyleManager.IsMetro(m_Style) ? new VS2012TabDisplay(this, scheme) : new VS2005TabDisplay(this, scheme);
 | 
						|
                td.DisplayTextForActiveTabOnly = office2007Style;
 | 
						|
                td.Paint(g, m_Panels);
 | 
						|
 | 
						|
 | 
						|
                if (m_AntiAlias)
 | 
						|
                {
 | 
						|
                    g.TextRenderingHint = textHint;
 | 
						|
                    g.SmoothingMode = sm;
 | 
						|
                }
 | 
						|
 | 
						|
                return;
 | 
						|
            }
 | 
						|
 | 
						|
            const int margin = 2;
 | 
						|
            int width = this.Width - 2;
 | 
						|
            int height = this.Height - 2;
 | 
						|
 | 
						|
            Color textColor = Color.Empty;
 | 
						|
            SolidBrush backBrush = null;
 | 
						|
            Pen linePen = null;
 | 
						|
            if (m_Style == eDotNetBarStyle.Office2003)
 | 
						|
            {
 | 
						|
                textColor = scheme.ItemText;
 | 
						|
                linePen = new Pen(scheme.ItemHotBorder, 1);
 | 
						|
            }
 | 
						|
            else if (m_Style == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_Style))
 | 
						|
            {
 | 
						|
                textColor = scheme.ItemText;
 | 
						|
                linePen = new Pen(scheme.MenuBorder, 1);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                textColor = g.GetNearestColor(ControlPaint.DarkDark(this.BackColor));
 | 
						|
                backBrush = new SolidBrush(this.BackColor);
 | 
						|
                linePen = new Pen(g.GetNearestColor(ControlPaint.Dark(this.BackColor)), 1);
 | 
						|
            }
 | 
						|
 | 
						|
            if (this.Dock == DockStyle.Top || this.Dock == DockStyle.Bottom || this.Dock == DockStyle.None)
 | 
						|
            {
 | 
						|
                int x = 2;
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    for (int i = 0; i < panel.Tabs.Count; i++)
 | 
						|
                    {
 | 
						|
                        DockItemTab tab = panel.Tabs[i] as DockItemTab;
 | 
						|
                        CompositeImage icon = tab.Icon;
 | 
						|
                        tab.DisplayRectangle.X = x;
 | 
						|
                        tab.DisplayRectangle.Y = 0;
 | 
						|
                        tab.DisplayRectangle.Height = height;
 | 
						|
                        x += PanelBar.TabPadding;
 | 
						|
                        if (panel.ActiveTab == i || panel.BoundBar.AutoHideTabTextAlwaysVisible)
 | 
						|
                        {
 | 
						|
                            if (icon != null)
 | 
						|
                            {
 | 
						|
 | 
						|
                                if (this.Dock == DockStyle.Top)
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, 0, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, 0, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, 0, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height);
 | 
						|
                                    icon.DrawImage(g, new Rectangle(x, (height - icon.Height) / 2, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,x,(height-icon.Height)/2,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, margin, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, margin, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, margin, icon.Width + panel.MaxTextWidth + PanelBar.TabPadding * 3, height);
 | 
						|
                                    icon.DrawImage(g, new Rectangle(x, (height - icon.Height) / 2 + margin, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,x,(height-icon.Height)/2+margin,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                x += (icon.Width + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (this.Dock == DockStyle.Top)
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, 0, tab.TextSize.Width + PanelBar.TabPadding * 2, height), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, 0, tab.TextSize.Width + PanelBar.TabPadding * 2, height);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, 0, tab.TextSize.Width + PanelBar.TabPadding * 2, height);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, margin, tab.TextSize.Width + PanelBar.TabPadding * 2, height), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, margin, tab.TextSize.Width + PanelBar.TabPadding * 2, height);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, margin, tab.TextSize.Width + PanelBar.TabPadding * 2, height);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
 | 
						|
                            TextDrawing.DrawStringLegacy(g, tab.Text, this.Font, textColor, new Rectangle(x, this.Dock == DockStyle.Top ? 0 : margin, (icon == null ? tab.TextSize.Width : panel.MaxTextWidth), height), format);
 | 
						|
                            x += ((icon == null ? tab.TextSize.Width : panel.MaxTextWidth) + PanelBar.TabPadding);
 | 
						|
                            tab.DisplayRectangle.Width = x - tab.DisplayRectangle.X;
 | 
						|
                            if (this.Dock == DockStyle.Top)
 | 
						|
                                tab.DisplayRectangle.Offset(0, -1);
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                tab.DisplayRectangle.Offset(0, 1);
 | 
						|
                                tab.DisplayRectangle.Height += 2;
 | 
						|
                            }
 | 
						|
                            g.DrawRectangle(linePen, tab.DisplayRectangle);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            if (icon != null)
 | 
						|
                            {
 | 
						|
                                if (this.Dock == DockStyle.Top)
 | 
						|
                                {
 | 
						|
                                    if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, 0, icon.Width + PanelBar.TabPadding * 2, height);
 | 
						|
                                    icon.DrawImage(g, new Rectangle(x, (height - icon.Height) / 2, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,x,(height-icon.Height)/2,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, margin, icon.Width + PanelBar.TabPadding * 2, height);
 | 
						|
                                    icon.DrawImage(g, new Rectangle(x, (height - icon.Height) / 2 + margin, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,x,(height-icon.Height)/2+margin,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                x += (icon.Width + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                TextDrawing.DrawStringLegacy(g, tab.Text, this.Font, textColor, new Rectangle(x, this.Dock == DockStyle.Top ? 0 : margin, tab.TextSize.Width, height), format);
 | 
						|
                                x += (tab.TextSize.Width + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            tab.DisplayRectangle.Width = x - tab.DisplayRectangle.X;
 | 
						|
                            if (this.Dock == DockStyle.Top)
 | 
						|
                                tab.DisplayRectangle.Y--;
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                tab.DisplayRectangle.Y++;
 | 
						|
                                tab.DisplayRectangle.Height += 2;
 | 
						|
                            }
 | 
						|
                            g.DrawRectangle(linePen, tab.DisplayRectangle);
 | 
						|
                        }
 | 
						|
                        if (x > this.Width)
 | 
						|
                            break;
 | 
						|
                    }
 | 
						|
                    x += 4;
 | 
						|
                    if (x > this.Width)
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else if (this.Dock == DockStyle.Left || this.Dock == DockStyle.Right)
 | 
						|
            {
 | 
						|
                int y = 2;
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    for (int i = 0; i < panel.Tabs.Count; i++)
 | 
						|
                    {
 | 
						|
                        DockItemTab tab = panel.Tabs[i] as DockItemTab;
 | 
						|
                        CompositeImage icon = tab.Icon;
 | 
						|
                        tab.DisplayRectangle.X = 0;
 | 
						|
                        tab.DisplayRectangle.Y = y;
 | 
						|
                        tab.DisplayRectangle.Width = width;
 | 
						|
                        y += PanelBar.TabPadding;
 | 
						|
                        if (panel.ActiveTab == i || panel.BoundBar.AutoHideTabTextAlwaysVisible)
 | 
						|
                        {
 | 
						|
                            if (icon != null)
 | 
						|
                            {
 | 
						|
                                if (this.Dock == DockStyle.Left)
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3);
 | 
						|
                                    icon.DrawImage(g, new Rectangle((width - icon.Width - margin) / 2, y, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,(width-icon.Width-margin)/2,y,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(margin, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, margin, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, margin, tab.DisplayRectangle.Y, width, icon.Height + panel.MaxTextWidth + PanelBar.TabPadding * 3);
 | 
						|
                                    icon.DrawImage(g, new Rectangle((width - icon.Width + margin) / 2, y, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,(width-icon.Width+margin)/2,y,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                y += (icon.Height + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (this.Dock == DockStyle.Left)
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if ((m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005) && !scheme.ItemPressedBackground2.IsEmpty)
 | 
						|
                                    {
 | 
						|
                                        using (LinearGradientBrush gradient = BarFunctions.CreateLinearGradientBrush(new Rectangle(margin, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2), scheme.ItemPressedBackground, scheme.ItemPressedBackground2, scheme.ItemPressedBackgroundGradientAngle))
 | 
						|
                                            g.FillRectangle(gradient, margin, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2);
 | 
						|
 | 
						|
                                    }
 | 
						|
                                    else if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, margin, tab.DisplayRectangle.Y, width, tab.TextSize.Width + PanelBar.TabPadding * 2);
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            g.RotateTransform(90);
 | 
						|
                            TextDrawing.DrawStringLegacy(g, tab.Text, this.Font, textColor, new Rectangle(y, -width, (icon == null ? tab.TextSize.Width : panel.MaxTextWidth), width), format);
 | 
						|
                            g.ResetTransform();
 | 
						|
                            y += ((icon == null ? tab.TextSize.Width : panel.MaxTextWidth) + PanelBar.TabPadding);
 | 
						|
                            if (this.Dock == DockStyle.Left)
 | 
						|
                                tab.DisplayRectangle.Offset(-1, 0);
 | 
						|
                            else
 | 
						|
                                tab.DisplayRectangle.Offset(1, 0);
 | 
						|
                            tab.DisplayRectangle.Height = y - tab.DisplayRectangle.Y;
 | 
						|
                            g.DrawRectangle(linePen, tab.DisplayRectangle);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            if (icon != null)
 | 
						|
                            {
 | 
						|
                                if (this.Dock == DockStyle.Left)
 | 
						|
                                {
 | 
						|
                                    if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, tab.DisplayRectangle.X, tab.DisplayRectangle.Y, width, icon.Height + PanelBar.TabPadding * 2);
 | 
						|
                                    icon.DrawImage(g, new Rectangle((width - icon.Width - margin) / 2, y, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,(width-icon.Width-margin)/2,y,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if (backBrush != null)
 | 
						|
                                        g.FillRectangle(backBrush, margin, tab.DisplayRectangle.Y, width, icon.Height + PanelBar.TabPadding * 2);
 | 
						|
                                    icon.DrawImage(g, new Rectangle((width - icon.Width + margin) / 2, y, icon.Width, icon.Height));
 | 
						|
                                    //g.DrawImage(icon,(width-icon.Width+margin)/2,y,icon.Width,icon.Height);
 | 
						|
                                }
 | 
						|
                                y += (icon.Height + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                g.RotateTransform(90);
 | 
						|
                                TextDrawing.DrawStringLegacy(g, tab.Text, this.Font, textColor, new Rectangle(y, -width, tab.TextSize.Width, width), format);
 | 
						|
                                g.ResetTransform();
 | 
						|
                                y += (tab.TextSize.Width + PanelBar.TabPadding);
 | 
						|
                            }
 | 
						|
                            tab.DisplayRectangle.Height = y - tab.DisplayRectangle.Y;
 | 
						|
                            if (this.Dock == DockStyle.Left)
 | 
						|
                                tab.DisplayRectangle.X--;
 | 
						|
                            else
 | 
						|
                                tab.DisplayRectangle.X++;
 | 
						|
                            g.DrawRectangle(linePen, tab.DisplayRectangle);
 | 
						|
                        }
 | 
						|
                        if (y > this.Height)
 | 
						|
                            break;
 | 
						|
                    }
 | 
						|
                    y += 4;
 | 
						|
                    if (y > this.Height)
 | 
						|
                        break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            linePen.Dispose();
 | 
						|
 | 
						|
 | 
						|
            if (m_AntiAlias)
 | 
						|
            {
 | 
						|
                g.TextRenderingHint = textHint;
 | 
						|
                g.SmoothingMode = sm;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool IsGradientStyle
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                if (m_Style == eDotNetBarStyle.Office2003 || m_Style == eDotNetBarStyle.VS2005 || BarFunctions.IsOffice2007Style(m_Style))
 | 
						|
                    return true;
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        private DockItemTab _MouseOverTab = null;
 | 
						|
        private void SetMouseOverTab(AutoHidePanel.DockItemTab tab)
 | 
						|
        {
 | 
						|
            if (tab == _MouseOverTab) return;
 | 
						|
 | 
						|
            if (_MouseOverTab != null)
 | 
						|
            {
 | 
						|
                _MouseOverTab.IsMouseOver = false;
 | 
						|
                this.Invalidate(_MouseOverTab.DisplayRectangle);
 | 
						|
            }
 | 
						|
 | 
						|
            _MouseOverTab = tab;
 | 
						|
 | 
						|
            if (_MouseOverTab != null)
 | 
						|
            {
 | 
						|
                _MouseOverTab.IsMouseOver = true;
 | 
						|
                this.Invalidate(_MouseOverTab.DisplayRectangle);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        protected override void OnMouseMove(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            DockItemTab tab = HitTestTab(e.X, e.Y);
 | 
						|
            SetMouseOverTab(tab);
 | 
						|
 | 
						|
            base.OnMouseMove(e);
 | 
						|
        }
 | 
						|
        protected override void OnMouseEnter(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnMouseEnter(e);
 | 
						|
            CreateTimer();
 | 
						|
        }
 | 
						|
        protected override void OnMouseLeave(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnMouseLeave(e);
 | 
						|
            SetMouseOverTab(null);
 | 
						|
            if (m_Timer != null)
 | 
						|
                m_Timer.Interval = m_AutoHideShowTimeout;
 | 
						|
        }
 | 
						|
        private void CreateTimer()
 | 
						|
        {
 | 
						|
            if (m_Timer != null)
 | 
						|
            {
 | 
						|
                m_Timer.Start();
 | 
						|
                return;
 | 
						|
            }
 | 
						|
            m_Timer = new Timer();
 | 
						|
            m_Timer.Interval = m_AutoHideShowTimeout;
 | 
						|
            m_Timer.Tick += new EventHandler(this.TimerTick);
 | 
						|
            m_Timer.Start();
 | 
						|
        }
 | 
						|
        internal void StopTimer()
 | 
						|
        {
 | 
						|
            if (m_Timer != null)
 | 
						|
                m_Timer.Stop();
 | 
						|
        }
 | 
						|
        internal void StartTimer()
 | 
						|
        {
 | 
						|
            if (m_Timer != null)
 | 
						|
                m_Timer.Start();
 | 
						|
        }
 | 
						|
 | 
						|
        private void TimerTick(object sender, EventArgs e)
 | 
						|
        {
 | 
						|
            Point p = this.PointToClient(Control.MousePosition);
 | 
						|
 | 
						|
            if (this.ClientRectangle.Contains(p))
 | 
						|
            {
 | 
						|
                IntPtr activeWnd = NativeFunctions.GetActiveWindow();
 | 
						|
                Form parentForm = this.FindForm();
 | 
						|
                if (parentForm != null && parentForm.Handle != activeWnd)
 | 
						|
                {
 | 
						|
                    Control c = parentForm;
 | 
						|
                    bool bExit = true;
 | 
						|
                    while (c.Parent != null)
 | 
						|
                    {
 | 
						|
                        c = c.Parent;
 | 
						|
                        if (c.Handle == activeWnd)
 | 
						|
                        {
 | 
						|
                            bExit = false;
 | 
						|
                            break;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (bExit)
 | 
						|
                        return;
 | 
						|
                }
 | 
						|
                if (!m_EnableHoverExpand)
 | 
						|
                    return;
 | 
						|
                if (parentForm != null)
 | 
						|
                {
 | 
						|
                    Point mousePosition = Control.MousePosition;
 | 
						|
                    Point parentPoint = parentForm.PointToClient(mousePosition);
 | 
						|
                    Control childAtPoint = parentForm.GetChildAtPoint(parentPoint, GetChildAtPointSkip.Invisible | GetChildAtPointSkip.Transparent);
 | 
						|
                    while (childAtPoint != null && !(childAtPoint is AutoHidePanel))
 | 
						|
                    {
 | 
						|
                        parentPoint = childAtPoint.PointToClient(mousePosition);
 | 
						|
                        childAtPoint = childAtPoint.GetChildAtPoint(parentPoint, GetChildAtPointSkip.Invisible | GetChildAtPointSkip.Transparent);
 | 
						|
                    }
 | 
						|
                    if (!(childAtPoint is AutoHidePanel))
 | 
						|
                    {
 | 
						|
                        StopTimer();
 | 
						|
                        return;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                SelectPanel(p.X, p.Y);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                PanelBar activePanel = ActivePanelBar;
 | 
						|
                if (activePanel != null && !activePanel.BoundBar.IsSizingWindow)
 | 
						|
                {
 | 
						|
                    if (activePanel.BoundBar.Visible && !(!m_EnableFocusCollapse && IsBarActive(activePanel.BoundBar)))
 | 
						|
                    {
 | 
						|
                        p = activePanel.BoundBar.PointToClient(Control.MousePosition);
 | 
						|
                        if (!activePanel.BoundBar.ClientRectangle.Contains(p))
 | 
						|
                        {
 | 
						|
                            if (AnimateHide(activePanel.BoundBar))
 | 
						|
                                DestroyTimer();
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
        private void DestroyTimer()
 | 
						|
        {
 | 
						|
            if (m_Timer == null)
 | 
						|
                return;
 | 
						|
            m_Timer.Stop();
 | 
						|
            m_Timer.Dispose();
 | 
						|
            m_Timer = null;
 | 
						|
        }
 | 
						|
        private bool IsBarActive(Bar bar)
 | 
						|
        {
 | 
						|
            if (bar == null)
 | 
						|
                return false;
 | 
						|
            Form form = this.FindForm();
 | 
						|
            if (form == null)
 | 
						|
                return false;
 | 
						|
            Control activeControl = form.ActiveControl;
 | 
						|
            if (activeControl == null)
 | 
						|
                return false;
 | 
						|
            while (activeControl != null)
 | 
						|
            {
 | 
						|
                if (bar == activeControl)
 | 
						|
                    return true;
 | 
						|
                activeControl = activeControl.Parent;
 | 
						|
            }
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the timeout in milliseconds for auto hide/show action.
 | 
						|
        /// When timeout has elapsed and mouse has left the bar the bar will be automatically hidden.
 | 
						|
        /// If mouse is hovering over the collapsed bar and timeout has elapsed the bar will be displayed.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(800), Category("Behavior"), Description("Indicates timeout in milliseconds for auto hide/show action.")]
 | 
						|
        public int AutoHideShowTimeout
 | 
						|
        {
 | 
						|
            get { return m_AutoHideShowTimeout; }
 | 
						|
            set { m_AutoHideShowTimeout = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnMouseDown(MouseEventArgs e)
 | 
						|
        {
 | 
						|
            base.OnMouseDown(e);
 | 
						|
            if (e.Button == MouseButtons.Left)
 | 
						|
            {
 | 
						|
                SelectPanel(e.X, e.Y);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public void SelectPanel(int x, int y)
 | 
						|
        {
 | 
						|
            foreach (PanelBar panel in m_Panels)
 | 
						|
            {
 | 
						|
                foreach (DockItemTab tab in panel.Tabs)
 | 
						|
                {
 | 
						|
                    if (tab.DisplayRectangle.Contains(x, y))
 | 
						|
                    {
 | 
						|
                        PanelBar activePanel = ActivePanelBar;
 | 
						|
                        if (activePanel != null)
 | 
						|
                        {
 | 
						|
                            if (activePanel != panel)
 | 
						|
                            {
 | 
						|
                                if (activePanel.BoundBar.IsSizingWindow)
 | 
						|
                                    return;
 | 
						|
                                if (!AnimateHide(activePanel.BoundBar))
 | 
						|
                                    return;
 | 
						|
                            }
 | 
						|
                            else
 | 
						|
                            {
 | 
						|
                                if (panel.ActiveTab < panel.Tabs.Count)
 | 
						|
                                {
 | 
						|
                                    if (panel.Tabs[panel.ActiveTab] == tab && panel.BoundBar.Visible)
 | 
						|
                                        return;
 | 
						|
                                    ((DockItemTab)activePanel.Tabs[activePanel.ActiveTab]).Item.Displayed = false;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        if (panel.BoundBar.VisibleItemCount == 0)
 | 
						|
                            throw new InvalidOperationException("Bar.Items collection must contain at least one visible DockContainerItem object so auto-hide functionality can function properly.");
 | 
						|
                        panel.ActiveTab = panel.Tabs.IndexOf(tab);
 | 
						|
                        if (panel.BoundBar.IsDisposed) return;
 | 
						|
                        panel.BoundBar.SelectedDockTab = panel.BoundBar.Items.IndexOf(tab.Item);
 | 
						|
                        PopupManager.CloseAllPopups();
 | 
						|
                        AnimateShow(panel.BoundBar);
 | 
						|
                        this.Refresh();
 | 
						|
                        return;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the reference to DockContainerItem tab if any under specified coordinates.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="x">X - client mouse coordinate</param>
 | 
						|
        /// <param name="y">Y - client mouse coordinate</param>
 | 
						|
        /// <returns>Reference to DockContainerItem whose tab is at specified coordinates or null if there is no tab at given coordinates</returns>
 | 
						|
        public DockContainerItem HitTest(int x, int y)
 | 
						|
        {
 | 
						|
            DockItemTab tab = HitTestTab(x, y);
 | 
						|
            if (tab != null)
 | 
						|
                return tab.Item;
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
        private DockItemTab HitTestTab(int x, int y)
 | 
						|
        {
 | 
						|
            foreach (PanelBar panel in m_Panels)
 | 
						|
            {
 | 
						|
                foreach (DockItemTab tab in panel.Tabs)
 | 
						|
                {
 | 
						|
                    if (tab.DisplayRectangle.Contains(x, y))
 | 
						|
                    {
 | 
						|
                        return tab;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        internal DockContainerItem SelectedDockContainerItem
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                PanelBar panel = this.ActivePanelBar;
 | 
						|
                if (panel == null)
 | 
						|
                {
 | 
						|
                    foreach (PanelBar p in m_Panels)
 | 
						|
                    {
 | 
						|
                        for (int i = 0; i < p.Tabs.Count; i++)
 | 
						|
                        {
 | 
						|
                            DockItemTab tab = p.Tabs[i] as DockItemTab;
 | 
						|
                            if (p.ActiveTab == i)
 | 
						|
                                return tab.Item;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    DockItemTab tab = panel.Tabs[panel.ActiveTab] as DockItemTab;
 | 
						|
                    return tab.Item;
 | 
						|
                }
 | 
						|
                catch
 | 
						|
                {
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    foreach (DockItemTab tab in panel.Tabs)
 | 
						|
                    {
 | 
						|
                        if (tab.Item == value)
 | 
						|
                        {
 | 
						|
                            PanelBar activePanel = ActivePanelBar;
 | 
						|
                            if (activePanel != null)
 | 
						|
                            {
 | 
						|
                                if (activePanel != panel)
 | 
						|
                                {
 | 
						|
                                    if (activePanel.BoundBar.IsSizingWindow)
 | 
						|
                                        return;
 | 
						|
                                    if (!AnimateHide(activePanel.BoundBar))
 | 
						|
                                        return;
 | 
						|
                                }
 | 
						|
                                else
 | 
						|
                                {
 | 
						|
                                    if (panel.Tabs[panel.ActiveTab] == tab && panel.BoundBar.Visible)
 | 
						|
                                        return;
 | 
						|
                                    ((DockItemTab)activePanel.Tabs[activePanel.ActiveTab]).Item.Displayed = false;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                            panel.ActiveTab = panel.Tabs.IndexOf(tab);
 | 
						|
                            this.Refresh();
 | 
						|
                            return;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether bars on auto-hide panel are displayed when mouse hovers over the tab.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Browsable(true), Description("Indicates whether bars on auto-hide panel are displayed when mouse hovers over the tab.")]
 | 
						|
        public bool EnableHoverExpand
 | 
						|
        {
 | 
						|
            get { return m_EnableHoverExpand; }
 | 
						|
            set { m_EnableHoverExpand = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether bars that have focus are collapsed automatically or not.
 | 
						|
        /// </summary>
 | 
						|
        [DefaultValue(true), Browsable(true), Description("Indicates whether bars that have focus are collapsed automatically or not.")]
 | 
						|
        public bool EnableFocusCollapse
 | 
						|
        {
 | 
						|
            get { return m_EnableFocusCollapse; }
 | 
						|
            set { m_EnableFocusCollapse = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnFontChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnFontChanged(e);
 | 
						|
            RefreshPanels();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnSystemColorsChanged(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnSystemColorsChanged(e);
 | 
						|
            Application.DoEvents();
 | 
						|
            this.Font = SystemFonts.DefaultFont; // SystemInformation.MenuFont.Clone() as Font;
 | 
						|
        }
 | 
						|
 | 
						|
        private void RefreshPanels()
 | 
						|
        {
 | 
						|
            foreach (PanelBar panelbar in m_Panels)
 | 
						|
                panelbar.ReloadDockItems();
 | 
						|
            this.Invalidate();
 | 
						|
        }
 | 
						|
 | 
						|
        internal void ShowBar(Bar bar)
 | 
						|
        {
 | 
						|
            PanelBar panel = null;
 | 
						|
            foreach (PanelBar panelbar in m_Panels)
 | 
						|
            {
 | 
						|
                if (panelbar.BoundBar == bar)
 | 
						|
                {
 | 
						|
                    panel = panelbar;
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            PanelBar activePanel = ActivePanelBar;
 | 
						|
            if (activePanel == panel)
 | 
						|
                return;
 | 
						|
 | 
						|
            if (activePanel != null)
 | 
						|
            {
 | 
						|
                if (activePanel.BoundBar.IsSizingWindow)
 | 
						|
                    return;
 | 
						|
                if (!AnimateHide(activePanel.BoundBar))
 | 
						|
                {
 | 
						|
                    CreateTimer();
 | 
						|
                    return;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            panel.BoundBar.SelectedDockTab = panel.ActiveTab;
 | 
						|
            AnimateShow(panel.BoundBar);
 | 
						|
            this.Refresh();
 | 
						|
            CreateTimer();
 | 
						|
        }
 | 
						|
        internal void HideBar(Bar bar)
 | 
						|
        {
 | 
						|
            PanelBar activePanel = ActivePanelBar;
 | 
						|
            if (activePanel.BoundBar != bar)
 | 
						|
                return;
 | 
						|
            if (activePanel.BoundBar.Visible)
 | 
						|
            {
 | 
						|
                if (AnimateHide(activePanel.BoundBar))
 | 
						|
                    DestroyTimer();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private bool AnimateHide(Bar bar)
 | 
						|
        {
 | 
						|
            return bar.AnimateHide();
 | 
						|
        }
 | 
						|
 | 
						|
        private bool AnimateShow(Bar bar)
 | 
						|
        {
 | 
						|
            if (bar.Enabled)
 | 
						|
                return bar.AnimateShow();
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
 | 
						|
        private PanelBar ActivePanelBar
 | 
						|
        {
 | 
						|
            get
 | 
						|
            {
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    if (panel.ActiveTab >= 0 && panel.BoundBar.Visible)
 | 
						|
                        return panel;
 | 
						|
                }
 | 
						|
                return null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Sets bars position on the auto-hide panel.
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="bar">Bar for which position should be changed.</param>
 | 
						|
        /// <param name="iIndex">New indexed position of the bar.</param>
 | 
						|
        public void SetBarPosition(Bar bar, int iIndex)
 | 
						|
        {
 | 
						|
            if (iIndex < m_Panels.Count)
 | 
						|
            {
 | 
						|
                for (int i = 0; i < m_Panels.Count; i++)
 | 
						|
                {
 | 
						|
                    if (((PanelBar)m_Panels[i]).BoundBar == bar)
 | 
						|
                    {
 | 
						|
                        if (i != iIndex)
 | 
						|
                        {
 | 
						|
                            PanelBar panel = (PanelBar)m_Panels[i];
 | 
						|
                            m_Panels.RemoveAt(i);
 | 
						|
                            m_Panels.Insert(iIndex, panel);
 | 
						|
                            this.Refresh();
 | 
						|
                        }
 | 
						|
                        break;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the style of auto-hide panel.
 | 
						|
        /// </summary>
 | 
						|
        public eDotNetBarStyle Style
 | 
						|
        {
 | 
						|
            get { return m_Style; }
 | 
						|
            set
 | 
						|
            {
 | 
						|
                m_Style = value;
 | 
						|
                this.Invalidate();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the ColorScheme object used by this panel. Default value is null which means that ColorScheme is
 | 
						|
        /// automatically created as specified by Style property. Note that if your DotNetBarManager has UseGlobalColorScheme set to true
 | 
						|
        /// ColorScheme from DotNetBarManager will be used.
 | 
						|
        /// </summary>
 | 
						|
        [Browsable(false), DefaultValue(null)]
 | 
						|
        public ColorScheme ColorScheme
 | 
						|
        {
 | 
						|
            get { return m_ColorScheme; }
 | 
						|
            set { m_ColorScheme = value; }
 | 
						|
        }
 | 
						|
 | 
						|
        public void AddBar(Bar bar)
 | 
						|
        {
 | 
						|
            if (bar.Style == eDotNetBarStyle.Office2003)
 | 
						|
                m_Style = eDotNetBarStyle.Office2003;
 | 
						|
            else if (bar.Style == eDotNetBarStyle.VS2005)
 | 
						|
                m_Style = eDotNetBarStyle.VS2005;
 | 
						|
            else if (bar.Style == eDotNetBarStyle.Office2007)
 | 
						|
                m_Style = eDotNetBarStyle.Office2007;
 | 
						|
            else if (bar.Style == eDotNetBarStyle.Office2010)
 | 
						|
                m_Style = eDotNetBarStyle.Office2010;
 | 
						|
            else if (bar.Style == eDotNetBarStyle.Windows7)
 | 
						|
                m_Style = eDotNetBarStyle.Windows7;
 | 
						|
            else if (bar.Style == eDotNetBarStyle.StyleManagerControlled)
 | 
						|
                m_Style = bar.ItemsContainer.EffectiveStyle;
 | 
						|
            else
 | 
						|
                m_Style = eDotNetBarStyle.OfficeXP;
 | 
						|
 | 
						|
            PanelBar panel = new PanelBar(this, bar);
 | 
						|
            m_Panels.Add(panel);
 | 
						|
            if (this.Dock == DockStyle.Right || this.Dock == DockStyle.Left)
 | 
						|
            {
 | 
						|
                if (panel.PanelSize.Height > this.Width)
 | 
						|
                    this.Width = panel.PanelSize.Height;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                if (panel.PanelSize.Height > this.Height)
 | 
						|
                    this.Height = panel.PanelSize.Height;
 | 
						|
            }
 | 
						|
 | 
						|
            if (!this.Visible)
 | 
						|
            {
 | 
						|
                BarFunctions.SetControlVisible(this, true);
 | 
						|
            }
 | 
						|
            else
 | 
						|
                this.Refresh();
 | 
						|
            this.Parent.PerformLayout();
 | 
						|
            this.Parent.Update();
 | 
						|
        }
 | 
						|
 | 
						|
        public void RemoveBar(Bar bar)
 | 
						|
        {
 | 
						|
            foreach (PanelBar panel in m_Panels)
 | 
						|
            {
 | 
						|
                if (panel.BoundBar == bar)
 | 
						|
                {
 | 
						|
                    m_Panels.Remove(panel);
 | 
						|
                    panel.Dispose();
 | 
						|
                    if (m_Panels.Count == 0)
 | 
						|
                    {
 | 
						|
                        this.Visible = false;
 | 
						|
                        if (this.Dock == DockStyle.Right || this.Dock == DockStyle.Left)
 | 
						|
                        {
 | 
						|
                            this.Width = 0;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            this.Height = 0;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                        this.Refresh();
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            if (m_Panels.Count == 0)
 | 
						|
                DestroyTimer();
 | 
						|
        }
 | 
						|
 | 
						|
        public void RefreshBar(Bar bar)
 | 
						|
        {
 | 
						|
            foreach (PanelBar panel in m_Panels)
 | 
						|
            {
 | 
						|
                if (panel.BoundBar == bar)
 | 
						|
                {
 | 
						|
                    panel.ReloadDockItems();
 | 
						|
                    break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            this.Refresh();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnHandleDestroyed(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnHandleDestroyed(e);
 | 
						|
            DestroyTimer();
 | 
						|
        }
 | 
						|
 | 
						|
        protected override void OnResize(EventArgs e)
 | 
						|
        {
 | 
						|
            base.OnResize(e);
 | 
						|
            PanelBar panel = this.ActivePanelBar;
 | 
						|
            if (panel != null)
 | 
						|
            {
 | 
						|
                if (panel.BoundBar.Visible)
 | 
						|
                    panel.BoundBar.SetAutoHideSize();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #region DockItemTab
 | 
						|
        private class DockItemTab : IDisposable
 | 
						|
        {
 | 
						|
            public Rectangle DisplayRectangle = new Rectangle(0, 0, 0, 0);
 | 
						|
            public DockContainerItem Item = null;
 | 
						|
            public Size TextSize = Size.Empty;
 | 
						|
            public Size IconSize = Size.Empty;
 | 
						|
            private string m_Text = "";
 | 
						|
            private PanelBar m_Parent = null;
 | 
						|
            public DockItemTab(PanelBar parent, DockContainerItem item)
 | 
						|
            {
 | 
						|
                this.Item = item;
 | 
						|
                m_Parent = parent;
 | 
						|
                item.TextChanged += new EventHandler(this.ItemTextChanged);
 | 
						|
                CompositeImage image = this.Icon;
 | 
						|
                if (image != null)
 | 
						|
                    IconSize = image.Size;
 | 
						|
            }
 | 
						|
            public DockItemTab(PanelBar parent, string text)
 | 
						|
            {
 | 
						|
                m_Text = text;
 | 
						|
                m_Parent = parent;
 | 
						|
            }
 | 
						|
            public string Text
 | 
						|
            {
 | 
						|
                get
 | 
						|
                {
 | 
						|
                    if (this.Item == null)
 | 
						|
                        return m_Text;
 | 
						|
                    else
 | 
						|
                        return this.Item.Text;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            public CompositeImage Icon
 | 
						|
            {
 | 
						|
                get
 | 
						|
                {
 | 
						|
                    if (Item == null)
 | 
						|
                        return null;
 | 
						|
                    if (Item.Image != null)
 | 
						|
                    {
 | 
						|
                        return new CompositeImage(Item.Image, false);
 | 
						|
                    }
 | 
						|
                    if (Item.ImageIndex >= 0 && Item.ImageList != null)
 | 
						|
                        return new CompositeImage(Item.ImageList.Images[Item.ImageIndex], false);
 | 
						|
                    if (Item.Icon != null)
 | 
						|
                        return new CompositeImage(Item.Icon, false);
 | 
						|
                    return null;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            private bool _IsMouseOver = false;
 | 
						|
            public bool IsMouseOver
 | 
						|
            {
 | 
						|
                get
 | 
						|
                {
 | 
						|
                    return _IsMouseOver;
 | 
						|
                }
 | 
						|
                set
 | 
						|
                {
 | 
						|
                    _IsMouseOver = value;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            private void ItemTextChanged(object sender, EventArgs e)
 | 
						|
            {
 | 
						|
                Control container = ((BaseItem)sender).ContainerControl as Control;
 | 
						|
                if (container != null)
 | 
						|
                {
 | 
						|
                    Graphics g = BarFunctions.CreateGraphics(container);
 | 
						|
                    try
 | 
						|
                    {
 | 
						|
                        TextSize = TextDrawing.MeasureStringLegacy(g, ((BaseItem)sender).Text, m_Parent.Parent.Font, Size.Empty, eTextFormat.Default);
 | 
						|
                        TextSize.Width += 4;
 | 
						|
                    }
 | 
						|
                    finally
 | 
						|
                    {
 | 
						|
                        g.Dispose();
 | 
						|
                    }
 | 
						|
                    CompositeImage image = this.Icon;
 | 
						|
                    if (image != null)
 | 
						|
                        IconSize = image.Size;
 | 
						|
                    else
 | 
						|
                        IconSize = Size.Empty;
 | 
						|
                }
 | 
						|
                m_Parent.Refresh();
 | 
						|
            }
 | 
						|
            public void Dispose()
 | 
						|
            {
 | 
						|
                if (this.Item != null)
 | 
						|
                    this.Item.TextChanged -= new EventHandler(this.ItemTextChanged);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region PanelBar
 | 
						|
        private class PanelBar : IDisposable
 | 
						|
        {
 | 
						|
            public ArrayList Tabs = new ArrayList(10);
 | 
						|
            public int ActiveTab = -1;
 | 
						|
            public Bar BoundBar = null;
 | 
						|
            private AutoHidePanel m_Parent = null;
 | 
						|
            public static int TabPadding = 4;
 | 
						|
            public static int TabTextVPadding = 4;
 | 
						|
            public static int TabIconVPadding = 3;
 | 
						|
            private Size m_PanelSize = Size.Empty;
 | 
						|
            private int m_MaxTextWidth = 0;
 | 
						|
 | 
						|
            public PanelBar(AutoHidePanel parent, Bar bar)
 | 
						|
            {
 | 
						|
                m_Parent = parent;
 | 
						|
                BoundBar = bar;
 | 
						|
                ReloadDockItems();
 | 
						|
            }
 | 
						|
            public void ReloadDockItems()
 | 
						|
            {
 | 
						|
                foreach (DockItemTab tab in Tabs)
 | 
						|
                    tab.Dispose();
 | 
						|
                Tabs.Clear();
 | 
						|
 | 
						|
                Graphics g = BarFunctions.CreateGraphics(BoundBar);
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    if (BoundBar.LayoutType == eLayoutType.DockContainer)
 | 
						|
                    {
 | 
						|
                        foreach (BaseItem item in BoundBar.Items)
 | 
						|
                        {
 | 
						|
                            DockContainerItem dockItem = item as DockContainerItem;
 | 
						|
                            if (dockItem != null && dockItem.Visible)
 | 
						|
                            {
 | 
						|
                                DockItemTab tab = new DockItemTab(this, dockItem);
 | 
						|
                                this.Tabs.Add(tab);
 | 
						|
                                tab.TextSize = TextDrawing.MeasureStringLegacy(g, dockItem.Text, m_Parent.Font, Size.Empty, eTextFormat.Default);
 | 
						|
                                tab.TextSize.Width += 4;
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (this.Tabs.Count == 0)
 | 
						|
                    {
 | 
						|
                        DockItemTab tab = new DockItemTab(this, BoundBar.Text);
 | 
						|
                        this.Tabs.Add(tab);
 | 
						|
                        tab.TextSize = TextDrawing.MeasureStringLegacy(g, BoundBar.Text, m_Parent.Font, Size.Empty, eTextFormat.Default);
 | 
						|
                        tab.TextSize.Width += 4;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                finally
 | 
						|
                {
 | 
						|
                    g.Dispose();
 | 
						|
                }
 | 
						|
                m_PanelSize = CalcPanelSize();
 | 
						|
                if (BoundBar.SelectedDockTab >= 0)
 | 
						|
                    this.ActiveTab = BoundBar.SelectedDockTab;
 | 
						|
                else
 | 
						|
                    this.ActiveTab = 0;
 | 
						|
            }
 | 
						|
            public void Refresh()
 | 
						|
            {
 | 
						|
                m_PanelSize = CalcPanelSize();
 | 
						|
                m_Parent.Refresh();
 | 
						|
            }
 | 
						|
            public void Dispose()
 | 
						|
            {
 | 
						|
                foreach (DockItemTab tab in Tabs)
 | 
						|
                    tab.Dispose();
 | 
						|
                Tabs.Clear();
 | 
						|
                BoundBar = null;
 | 
						|
                m_Parent = null;
 | 
						|
            }
 | 
						|
 | 
						|
            public AutoHidePanel Parent
 | 
						|
            {
 | 
						|
                get { return m_Parent; }
 | 
						|
            }
 | 
						|
 | 
						|
            public Size PanelSize
 | 
						|
            {
 | 
						|
                get
 | 
						|
                {
 | 
						|
                    return m_PanelSize;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            public int MaxTextWidth
 | 
						|
            {
 | 
						|
                get { return m_MaxTextWidth; }
 | 
						|
            }
 | 
						|
 | 
						|
            private Size CalcPanelSize()
 | 
						|
            {
 | 
						|
                Size size = Size.Empty;
 | 
						|
                Size textSize = Size.Empty;
 | 
						|
 | 
						|
                bool bHorizontal = true;
 | 
						|
 | 
						|
                foreach (DockItemTab tab in Tabs)
 | 
						|
                {
 | 
						|
                    if (!tab.IconSize.IsEmpty)
 | 
						|
                    {
 | 
						|
                        if (bHorizontal)
 | 
						|
                        {
 | 
						|
                            size.Width += (tab.IconSize.Width + PanelBar.TabPadding * 2);
 | 
						|
                            size.Height = tab.IconSize.Height + TabIconVPadding * 2;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            size.Height += (tab.IconSize.Height + PanelBar.TabPadding * 2);
 | 
						|
                            size.Width = tab.IconSize.Width + TabIconVPadding * 2;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (bHorizontal)
 | 
						|
                    {
 | 
						|
                        if (tab.TextSize.Width > textSize.Width)
 | 
						|
                            textSize.Width = tab.TextSize.Width;
 | 
						|
                        if (tab.TextSize.Height > textSize.Height)
 | 
						|
                            textSize.Height = tab.TextSize.Height;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        if (tab.TextSize.Width > textSize.Height)
 | 
						|
                            textSize.Height = tab.TextSize.Width;
 | 
						|
                        if (tab.TextSize.Height > textSize.Width)
 | 
						|
                            textSize.Width = tab.TextSize.Height;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                if (bHorizontal)
 | 
						|
                {
 | 
						|
                    m_MaxTextWidth = textSize.Width;
 | 
						|
                    textSize.Width += PanelBar.TabPadding;
 | 
						|
                    textSize.Height += (PanelBar.TabTextVPadding * 2);
 | 
						|
                    size = new Size(size.Width + textSize.Width, (size.Height > textSize.Height ? size.Height : textSize.Height));
 | 
						|
                    if (StyleManager.IsMetro(StyleManager.Style))
 | 
						|
                        size.Height += 6;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    m_MaxTextWidth = textSize.Height;
 | 
						|
                    textSize.Height += PanelBar.TabPadding;
 | 
						|
                    textSize.Width += (PanelBar.TabTextVPadding * 2);
 | 
						|
                    size = new Size((size.Width > textSize.Height ? size.Width : textSize.Height), size.Height + textSize.Width);
 | 
						|
                    if (StyleManager.IsMetro(StyleManager.Style))
 | 
						|
                        size.Width += 6;
 | 
						|
                }
 | 
						|
 | 
						|
                if (m_Parent != null && !m_Parent.FixedSize.IsEmpty)
 | 
						|
                    return m_Parent.FixedSize;
 | 
						|
                return size;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region VS2005TabDisplay
 | 
						|
        private class VS2005TabDisplay
 | 
						|
        {
 | 
						|
            protected AutoHidePanel m_AutoHidePanel = null;
 | 
						|
            private ColorScheme m_ColorScheme = null;
 | 
						|
            private int m_xTabOffset = 1;
 | 
						|
            private bool m_DisplayTextForActiveTabOnly = false;
 | 
						|
            /// <summary>
 | 
						|
            /// Creates new instance of the class.
 | 
						|
            /// </summary>
 | 
						|
            public VS2005TabDisplay(AutoHidePanel autoHidePanel, ColorScheme colorScheme)
 | 
						|
            {
 | 
						|
                m_AutoHidePanel = autoHidePanel;
 | 
						|
                m_ColorScheme = colorScheme;
 | 
						|
            }
 | 
						|
 | 
						|
            public bool DisplayTextForActiveTabOnly
 | 
						|
            {
 | 
						|
                get { return m_DisplayTextForActiveTabOnly; }
 | 
						|
                set { m_DisplayTextForActiveTabOnly = value; }
 | 
						|
            }
 | 
						|
 | 
						|
            public void Paint(Graphics g, ArrayList m_Panels)
 | 
						|
            {
 | 
						|
                ArrayList activeTabs = new ArrayList();
 | 
						|
                Point p = new Point(0, 0);
 | 
						|
 | 
						|
                if (m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                {
 | 
						|
                    p.Y = 2;
 | 
						|
                    p.X = 1;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                    p.X = 2;
 | 
						|
 | 
						|
                foreach (PanelBar panel in m_Panels)
 | 
						|
                {
 | 
						|
                    for (int i = 0; i < panel.Tabs.Count; i++)
 | 
						|
                    {
 | 
						|
                        bool displayText = true;
 | 
						|
                        if (m_DisplayTextForActiveTabOnly && panel.ActiveTab != i && !panel.BoundBar.AutoHideTabTextAlwaysVisible)
 | 
						|
                            displayText = false;
 | 
						|
                        DockItemTab tab = panel.Tabs[i] as DockItemTab;
 | 
						|
                        if (m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                        {
 | 
						|
                            tab.DisplayRectangle = new Rectangle(p.X, p.Y, m_AutoHidePanel.Width - 2, tab.IconSize.Width + 2 +
 | 
						|
                                (displayText || tab.IconSize.Width == 0 ? tab.TextSize.Width : 4));
 | 
						|
                            p.Y += (tab.DisplayRectangle.Height + m_xTabOffset);
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            tab.DisplayRectangle = new Rectangle(p.X, p.Y, tab.IconSize.Width + 2 +
 | 
						|
                                (displayText || tab.IconSize.Width == 0 ? tab.TextSize.Width : 4), m_AutoHidePanel.Height);
 | 
						|
                            p.X += (tab.DisplayRectangle.Width + m_xTabOffset);
 | 
						|
                        }
 | 
						|
 | 
						|
                        if (panel.ActiveTab == i)
 | 
						|
                            activeTabs.Add(tab);
 | 
						|
                        else
 | 
						|
                            PaintTab(g, tab, false);
 | 
						|
                    }
 | 
						|
                    if (m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                        p.Y += 2;
 | 
						|
                    else
 | 
						|
                        p.X += 2;
 | 
						|
                }
 | 
						|
 | 
						|
                foreach (DockItemTab tab in activeTabs)
 | 
						|
                    PaintTab(g, tab, true);
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual void PaintTab(Graphics g, DockItemTab tab, bool selected)
 | 
						|
            {
 | 
						|
                GraphicsPath path = GetTabItemPath(tab);
 | 
						|
                TabColors colors = GetTabColors(tab, selected);
 | 
						|
 | 
						|
                DrawTabItemBackground(tab, path, colors, g);
 | 
						|
 | 
						|
                DrawTabText(tab, colors, g, selected);
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual TabColors GetTabColors(DockItemTab tab, bool selected)
 | 
						|
            {
 | 
						|
                TabColors c = new TabColors();
 | 
						|
                if (tab.Item != null && BarFunctions.IsOffice2007Style(tab.Item.EffectiveStyle))
 | 
						|
                {
 | 
						|
                    if (tab.Item.PredefinedTabColor == eTabItemColor.Default)
 | 
						|
                    {
 | 
						|
                        if (selected && !m_ColorScheme.AutoHideSelectedTabBackground.IsEmpty)
 | 
						|
                        {
 | 
						|
                            c.BackColor = m_ColorScheme.AutoHideSelectedTabBackground;
 | 
						|
                            c.BackColor2 = m_ColorScheme.AutoHideSelectedTabBackground2;
 | 
						|
                            c.BackColorGradientAngle = m_ColorScheme.AutoHideTabBackgroundGradientAngle;
 | 
						|
                            c.TextColor = m_ColorScheme.AutoHideSelectedTabText;
 | 
						|
                            c.BorderColor = m_ColorScheme.AutoHideSelectedTabBorder;
 | 
						|
                        }
 | 
						|
                        else if (!m_ColorScheme.AutoHideTabBackground.IsEmpty)
 | 
						|
                        {
 | 
						|
                            c.BackColor = m_ColorScheme.AutoHideTabBackground;
 | 
						|
                            c.BackColor2 = m_ColorScheme.AutoHideTabBackground2;
 | 
						|
                            c.BackColorGradientAngle = m_ColorScheme.AutoHideTabBackgroundGradientAngle;
 | 
						|
                            c.TextColor = m_ColorScheme.AutoHideTabText;
 | 
						|
                            c.BorderColor = m_ColorScheme.AutoHideTabBorder;
 | 
						|
                        }
 | 
						|
                        else
 | 
						|
                        {
 | 
						|
                            c.BackColor = m_ColorScheme.BarBackground;
 | 
						|
                            c.BackColor2 = m_ColorScheme.BarBackground2;
 | 
						|
                            c.BackColorGradientAngle = m_ColorScheme.BarBackgroundGradientAngle;
 | 
						|
                            c.TextColor = m_ColorScheme.ItemText;
 | 
						|
                            c.BorderColor = m_ColorScheme.BarDockedBorder;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        Color c1, c2;
 | 
						|
                        TabColorScheme.GetPredefinedColors(tab.Item.PredefinedTabColor, out c1, out c2);
 | 
						|
                        c.BackColor = c1;
 | 
						|
                        c.BackColor2 = c2;
 | 
						|
                        c.BackColorGradientAngle = 90;
 | 
						|
                        c.TextColor = m_ColorScheme.ItemText;
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (m_AutoHidePanel != null && (m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right))
 | 
						|
                    {
 | 
						|
                        c.BackColorGradientAngle -= 90;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    c.BackColor = m_ColorScheme.DockSiteBackColor;
 | 
						|
                    c.BackColor2 = m_ColorScheme.DockSiteBackColor;
 | 
						|
                    c.TextColor = SystemColors.ControlText;
 | 
						|
                    c.BorderColor = SystemColors.ControlDarkDark;
 | 
						|
                }
 | 
						|
 | 
						|
                return c;
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual void DrawTabItemBackground(DockItemTab tab, GraphicsPath path, TabColors colors, Graphics g)
 | 
						|
            {
 | 
						|
                RectangleF rf = path.GetBounds();
 | 
						|
                Rectangle tabRect = new Rectangle((int)rf.X, (int)rf.Y, (int)rf.Width, (int)rf.Height);
 | 
						|
 | 
						|
                if (colors.BackColor2.IsEmpty)
 | 
						|
                {
 | 
						|
                    if (!colors.BackColor.IsEmpty)
 | 
						|
                    {
 | 
						|
                        using (SolidBrush brush = new SolidBrush(colors.BackColor))
 | 
						|
                            g.FillPath(brush, path);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    using (SolidBrush brush = new SolidBrush(Color.White))
 | 
						|
                        g.FillPath(brush, path);
 | 
						|
                    using (LinearGradientBrush brush = CreateTabGradientBrush(tabRect, colors.BackColor, colors.BackColor2, colors.BackColorGradientAngle))
 | 
						|
                        g.FillPath(brush, path);
 | 
						|
                }
 | 
						|
 | 
						|
                if (!colors.BorderColor.IsEmpty)
 | 
						|
                {
 | 
						|
                    using (Pen pen = new Pen(colors.BorderColor, 1))
 | 
						|
                        g.DrawPath(pen, path);
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual void DrawTabText(DockItemTab tab, TabColors colors, Graphics g, bool selected)
 | 
						|
            {
 | 
						|
                int MIN_TEXT_WIDTH = 12;
 | 
						|
                eTextFormat strFormat = eTextFormat.Default | eTextFormat.HorizontalCenter | eTextFormat.VerticalCenter
 | 
						|
                | eTextFormat.EndEllipsis | eTextFormat.SingleLine;
 | 
						|
 | 
						|
                Rectangle rText = tab.DisplayRectangle;
 | 
						|
                // Draw image
 | 
						|
                CompositeImage image = tab.Icon;
 | 
						|
                if (image != null && image.Width + 4 <= rText.Width)
 | 
						|
                {
 | 
						|
                    if (m_AutoHidePanel.Dock == DockStyle.Top || m_AutoHidePanel.Dock == DockStyle.Bottom)
 | 
						|
                    {
 | 
						|
                        image.DrawImage(g, new Rectangle(rText.X + 3, rText.Y + (rText.Height - image.Height) / 2, image.Width, image.Height));
 | 
						|
                        int offset = image.Width + 2;
 | 
						|
                        rText.X += offset;
 | 
						|
                        rText.Width -= offset;
 | 
						|
                    }
 | 
						|
                    else
 | 
						|
                    {
 | 
						|
                        image.DrawImage(g, new Rectangle(rText.X + (rText.Width - image.Width) / 2, rText.Y + 3, image.Width, image.Height));
 | 
						|
                        int offset = image.Height + 2;
 | 
						|
                        rText.Y += offset;
 | 
						|
                        rText.Height -= offset;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
 | 
						|
                bool drawTextAlways = false;
 | 
						|
                if (tab.Item != null && tab.Item.ContainerControl is Bar)
 | 
						|
                    drawTextAlways = ((Bar)tab.Item.ContainerControl).AutoHideTabTextAlwaysVisible;
 | 
						|
                if (m_DisplayTextForActiveTabOnly && !drawTextAlways && !selected && image != null)
 | 
						|
                    return;
 | 
						|
 | 
						|
                // Draw text
 | 
						|
                //if(selected)
 | 
						|
                {
 | 
						|
                    Font font = m_AutoHidePanel.Font;
 | 
						|
                    rText.Inflate(-1, -1);
 | 
						|
 | 
						|
                    if ((m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right))
 | 
						|
                    {
 | 
						|
                        rText.Y += 2;
 | 
						|
                        g.RotateTransform(90);
 | 
						|
                        rText = new Rectangle(rText.Top, -rText.Right, rText.Height, rText.Width);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if (rText.Width > MIN_TEXT_WIDTH)
 | 
						|
                    {
 | 
						|
                        TextDrawing.DrawStringLegacy(g, tab.Text, font, colors.TextColor, rText, strFormat);
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ((m_AutoHidePanel.Dock == DockStyle.Left || m_AutoHidePanel.Dock == DockStyle.Right))
 | 
						|
                        g.ResetTransform();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual LinearGradientBrush CreateTabGradientBrush(Rectangle r, Color color1, Color color2, int gradientAngle)
 | 
						|
            {
 | 
						|
                if (r.Width <= 0)
 | 
						|
                    r.Width = 1;
 | 
						|
                if (r.Height <= 0)
 | 
						|
                    r.Height = 1;
 | 
						|
                LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(r.X, r.Y - 1, r.Width, r.Height + 1), color1, color2, gradientAngle);
 | 
						|
                return brush;
 | 
						|
            }
 | 
						|
 | 
						|
            protected virtual GraphicsPath GetTabItemPath(DockItemTab tab)
 | 
						|
            {
 | 
						|
                Rectangle r = tab.DisplayRectangle;
 | 
						|
                if (m_AutoHidePanel.Dock == DockStyle.Left)
 | 
						|
                    r = new Rectangle(r.X - (r.Height - r.Width), r.Y, r.Height, r.Width);
 | 
						|
                else if (m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                    r = new Rectangle(r.X, r.Y, r.Height, r.Width);
 | 
						|
 | 
						|
                r.Offset(0, 1);
 | 
						|
 | 
						|
                GraphicsPath path = new GraphicsPath();
 | 
						|
                int cornerSize = 2;
 | 
						|
                // Left line
 | 
						|
                //path.AddPath(GetLeftLine(r),true);
 | 
						|
                path.AddLine(r.X, r.Bottom, r.X, r.Y + cornerSize);
 | 
						|
 | 
						|
                // Top line
 | 
						|
                path.AddLine(r.X + cornerSize, r.Y, r.Right - cornerSize, r.Y);
 | 
						|
 | 
						|
                // Right line
 | 
						|
                //path.AddPath(GetRightLine(r),true);
 | 
						|
                path.AddLine(r.Right, r.Y + cornerSize, r.Right, r.Bottom);
 | 
						|
 | 
						|
                // Bottom line
 | 
						|
                //path.AddLine(r.Right+m_xTabOffset,r.Bottom,r.X-m_xTabOffset,r.Bottom);
 | 
						|
                path.AddLine(r.Right, r.Bottom, r.X, r.Bottom);
 | 
						|
 | 
						|
                path.CloseAllFigures();
 | 
						|
 | 
						|
                if (m_AutoHidePanel.Dock == DockStyle.Top)
 | 
						|
                {
 | 
						|
                    // Bottom
 | 
						|
                    Matrix m = new Matrix();
 | 
						|
                    m.RotateAt(180, new PointF(r.X + r.Width / 2, r.Y + r.Height / 2));
 | 
						|
                    path.Transform(m);
 | 
						|
                }
 | 
						|
                else if (m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                {
 | 
						|
                    // Left
 | 
						|
                    Matrix m = new Matrix();
 | 
						|
                    m.RotateAt(-90, new PointF(r.X, r.Bottom));
 | 
						|
                    m.Translate(r.Height, r.Width - r.Height, MatrixOrder.Append);
 | 
						|
                    path.Transform(m);
 | 
						|
                }
 | 
						|
                else if (m_AutoHidePanel.Dock == DockStyle.Left)
 | 
						|
                {
 | 
						|
                    // Right
 | 
						|
                    Matrix m = new Matrix();
 | 
						|
                    m.RotateAt(90, new PointF(r.Right, r.Bottom));
 | 
						|
                    m.Translate(-r.Height, r.Width - (r.Height - 1), MatrixOrder.Append);
 | 
						|
                    path.Transform(m);
 | 
						|
                }
 | 
						|
 | 
						|
                return path;
 | 
						|
            }
 | 
						|
 | 
						|
            private GraphicsPath GetLeftLine(Rectangle r)
 | 
						|
            {
 | 
						|
                GraphicsPath path = new GraphicsPath();
 | 
						|
                // Left line
 | 
						|
                path.AddLine(r.X - m_xTabOffset, r.Bottom, r.X, r.Y + 5);
 | 
						|
                Point[] pc = new Point[3];
 | 
						|
                pc[0] = new Point(r.X, r.Y + 5);
 | 
						|
                pc[1] = new Point(r.X + 2, r.Y + 2);
 | 
						|
                pc[2] = new Point(r.X + 5, r.Y);
 | 
						|
                path.AddCurve(pc, .9f);
 | 
						|
                return path;
 | 
						|
            }
 | 
						|
 | 
						|
            private GraphicsPath GetRightLine(Rectangle r)
 | 
						|
            {
 | 
						|
                GraphicsPath path = new GraphicsPath();
 | 
						|
                // Right line
 | 
						|
                Point[] pc = new Point[3];
 | 
						|
                pc[0] = new Point(r.Right - 5, r.Y);
 | 
						|
                pc[1] = new Point(r.Right - 2, r.Y + 2);
 | 
						|
                pc[2] = new Point(r.Right, r.Y + 5);
 | 
						|
                path.AddCurve(pc, .9f);
 | 
						|
                path.AddLine(r.Right, r.Y + 5, r.Right + m_xTabOffset, r.Bottom);
 | 
						|
                return path;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region VS2012 Tab Display
 | 
						|
        private class VS2012TabDisplay : VS2005TabDisplay
 | 
						|
        {
 | 
						|
            private const int BorderSize = 6;
 | 
						|
            /// <summary>
 | 
						|
            /// Creates new instance of the class.
 | 
						|
            /// </summary>
 | 
						|
            public VS2012TabDisplay(AutoHidePanel autoHidePanel, ColorScheme colorScheme)
 | 
						|
                : base(autoHidePanel, colorScheme)
 | 
						|
            {
 | 
						|
            }
 | 
						|
 | 
						|
            protected override GraphicsPath GetTabItemPath(DockItemTab tab)
 | 
						|
            {
 | 
						|
                Rectangle r = tab.DisplayRectangle;
 | 
						|
                if (m_AutoHidePanel.Dock == DockStyle.Left)
 | 
						|
                    r = new Rectangle(r.X - (r.Height - r.Width), r.Y, r.Height, r.Width);
 | 
						|
                else if (m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                    r = new Rectangle(r.X, r.Y, r.Height, r.Width);
 | 
						|
 | 
						|
                r.Offset(0, 1);
 | 
						|
 | 
						|
                GraphicsPath path = new GraphicsPath();
 | 
						|
                path.AddRectangle(r);
 | 
						|
 | 
						|
                return path;
 | 
						|
            }
 | 
						|
            protected override void DrawTabItemBackground(DockItemTab tab, GraphicsPath path, TabColors colors, Graphics g)
 | 
						|
            {
 | 
						|
                Rectangle tabRect = tab.DisplayRectangle;
 | 
						|
 | 
						|
                if (!colors.BackColor.IsEmpty)
 | 
						|
                {
 | 
						|
                    using (SolidBrush brush = new SolidBrush(colors.BackColor))
 | 
						|
                        g.FillPath(brush, path);
 | 
						|
                }
 | 
						|
                if (!colors.BorderColor.IsEmpty)
 | 
						|
                {
 | 
						|
                    Rectangle br = new Rectangle(tabRect.X, tabRect.Y, BorderSize, tabRect.Height);
 | 
						|
                    if (m_AutoHidePanel.Dock == DockStyle.Right)
 | 
						|
                        br = new Rectangle(tabRect.Right - BorderSize, tabRect.Y, BorderSize, tabRect.Height);
 | 
						|
                    else if (m_AutoHidePanel.Dock == DockStyle.Top)
 | 
						|
                        br = new Rectangle(tabRect.X, tabRect.Y, tabRect.Width, BorderSize);
 | 
						|
                    else if (m_AutoHidePanel.Dock == DockStyle.Bottom)
 | 
						|
                        br = new Rectangle(tabRect.X, tabRect.Bottom - BorderSize, tabRect.Width, BorderSize);
 | 
						|
                    using (SolidBrush brush = new SolidBrush(colors.BorderColor))
 | 
						|
                        g.FillRectangle(brush, br);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            protected override TabColors GetTabColors(DockItemTab tab, bool selected)
 | 
						|
            {
 | 
						|
                selected = tab.IsMouseOver;
 | 
						|
                return base.GetTabColors(tab, selected);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
}
 | 
						|
 |