using System;
using System.Text;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace DevComponents.DotNetBar
{
    /// 
    /// Panel control with title bar that can be expanded or collapsed.
    /// 
    [ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.ExpandablePanelDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf"), ToolboxBitmap(typeof(ExpandablePanel), "ExpandablePanel.ico")]
    public class ExpandablePanel : PanelEx
    {
        #region Private Variables, Events & Constructor
        /// 
        /// Occurs before Expanded property is changed. You can cancel change of this property by setting Cancel=true on the event arguments.
        /// 
        public event ExpandChangeEventHandler ExpandedChanging;
        /// 
        /// Occurs after Expanded property has changed. You can handle ExpandedChanging event and have opportunity to cancel the change.
        /// 
        public event ExpandChangeEventHandler ExpandedChanged;
        private PanelExTitle m_TitleBar = new PanelExTitle();
        private bool m_Expanded = true;
        private int m_AnimationTime = 100;
        private Rectangle m_ExpandedBounds = Rectangle.Empty;
        private Image m_ButtonImageExpand = null;
        private Image m_ButtonImageCollapse = null;
        private eCollapseDirection m_CollapseDirection = eCollapseDirection.BottomToTop;
        private Image m_Office2007ButtonImageExpand = null;
        private Image m_Office2007ButtonImageCollapse = null;
        private Image m_Office2007ButtonImageExpandMouseOver = null;
        private Image m_Office2007ButtonImageCollapseMouseOver = null;
        private PanelEx m_VerticalExpandPane = null;
        private bool m_ExpandOnTitleClick = false;
        public ExpandablePanel()
        {
            m_TitleBar.Text = "Title Bar";
            m_TitleBar.Location = new Point(0, 0);
            m_TitleBar.Size = new Size(24, 26);
            m_TitleBar.Dock = DockStyle.Top;
            this.Controls.Add(m_TitleBar);
            //m_TitleBar.ApplyPanelStyle();
            m_TitleBar.ColorScheme = this.ColorScheme;
            m_TitleBar.ExpandedClick += new EventHandler(m_TitleBar_ExpandedClick);
            m_TitleBar.Click += new EventHandler(TitleBarClick);
            this.BackColor = SystemColors.Control;
            UpdateExpandButtonImage();
        }
        #endregion
        #region Internal Implementation
        private void TitleBarClick(object sender, EventArgs e)
        {
            Point p = m_TitleBar.PointToClient(Control.MousePosition);
            if (m_ExpandOnTitleClick && (!m_TitleBar.ExpandChangeButton.DisplayRectangle.Contains(p) ))
            {
                SetExpanded(!this.Expanded, eEventSource.Mouse);
            }
        }
        protected override void OnControlAdded(ControlEventArgs e)
        {
            base.OnControlAdded(e);
            m_TitleBar.SendToBack();
        }
        void m_TitleBar_ExpandedClick(object sender, EventArgs e)
        {
            SetExpanded(!this.Expanded, eEventSource.Mouse);
        }
        private void SetExpanded(bool expanded, eEventSource action)
        {
            ExpandedChangeEventArgs e = new ExpandedChangeEventArgs(action, expanded);
            InvokeExpandedChanging(e);
            if (e.Cancel)
                return;
            m_Expanded = expanded;
            OnExpandedChanged();
            InvokeExpandedChanged(e);
        }
        private DockStyle GetControlDock(Control c)
        {
            if (c.Dock == DockStyle.None || c.Dock == DockStyle.Fill)
            {
                return DockStyle.Top;
            }
            return c.Dock;
        }
        private Rectangle GetExpandedBounds()
        {
            Rectangle r = m_ExpandedBounds;
            DockStyle dock = GetControlDock(m_TitleBar);
            if (dock == DockStyle.Left)
            {
                r = new Rectangle(this.Bounds.Location, m_ExpandedBounds.Size);
            }
            else if (dock == DockStyle.Right)
            {
                r = new Rectangle(this.Bounds.X - (m_ExpandedBounds.Width - this.Width), this.Bounds.Y, m_ExpandedBounds.Width, m_ExpandedBounds.Height);
            }
            else if (dock == DockStyle.Top)
            {
                if (m_CollapseDirection == eCollapseDirection.LeftToRight)
                    r = new Rectangle(this.Bounds.X - (m_ExpandedBounds.Width - this.Bounds.Width), this.Bounds.Y, m_ExpandedBounds.Width, m_ExpandedBounds.Height);
                else if (m_CollapseDirection == eCollapseDirection.TopToBottom)
                    r = new Rectangle(this.Bounds.X, m_ExpandedBounds.Y, m_ExpandedBounds.Width, m_ExpandedBounds.Height);
                else
                    r = new Rectangle(this.Bounds.Location, m_ExpandedBounds.Size);
            }
            else if (dock == DockStyle.Bottom)
            {
                r = new Rectangle(this.Bounds.X, this.Bounds.Y - (m_ExpandedBounds.Height - this.Height), m_ExpandedBounds.Width, m_ExpandedBounds.Height);
            }
            return r;
        }
        private void OnExpandedChanged()
        {
            if (this.Expanded)
            {
                m_TitleBar.RenderText = true;
                this.RenderText = true;
                if (!m_ExpandedBounds.IsEmpty)
                {
                    if (m_VerticalExpandPane != null)
                        DisposeVerticalExpandPane();
                    if (_HideControlsWhenCollapsed)
                    {
                        // Show internal controls
                        this.SuspendLayout();
                        foreach (Control c in this.Controls)
                        {
                            if (c is ContextMenuBar) continue;
                            if (c != this.TitlePanel)
                                c.Visible = true;
                        }
                        this.ResumeLayout();
                    }
                    Rectangle targetRect = GetExpandedBounds();
                    if (this.AnimationTime == 0 || this.DesignMode)
                    {
                        TypeDescriptor.GetProperties(this)["Bounds"].SetValue(this, targetRect);
                    }
                    else
                    {
                        Rectangle controlRect = this.Bounds;
                        BarFunctions.AnimateControl(this, true, m_AnimationTime, controlRect, targetRect);
                    }
                    TypeDescriptor.GetProperties(this)["ExpandedBounds"].SetValue(this, Rectangle.Empty);
                }
            }
            else
            {
                TypeDescriptor.GetProperties(this)["ExpandedBounds"].SetValue(this, this.Bounds);
                Point p = this.PointToScreen(Point.Empty);
                if (this.Parent != null)
                    p = this.Parent.PointToClient(p);
                else
                    p = Point.Empty;
                Rectangle targetRect = new Rectangle(p, new Size(m_TitleBar.Width + this.DockPadding.Left + this.DockPadding.Right,
                    Math.Max(m_TitleBar.Height + this.DockPadding.Top + this.DockPadding.Bottom, m_TitleBar.ExpandChangeButton.HeightInternal)));
                if (m_CollapseDirection == eCollapseDirection.RightToLeft)
                {
                    targetRect = new Rectangle(p, new Size(Math.Max(m_TitleBar.Height + this.DockPadding.Top + this.DockPadding.Bottom, m_TitleBar.ExpandChangeButton.WidthInternal + 6), this.Height));
                }
                else if (m_CollapseDirection == eCollapseDirection.LeftToRight)
                {
                    Size s = new Size(Math.Max(m_TitleBar.Height + this.DockPadding.Top + this.DockPadding.Bottom, m_TitleBar.ExpandChangeButton.WidthInternal + 6), this.Height);
                    if (!p.IsEmpty) p.X += this.Width - s.Width;
                    targetRect = new Rectangle(p, s);
                }
                else if (m_CollapseDirection == eCollapseDirection.TopToBottom)
                {
                    Size s = new Size(m_TitleBar.Width + this.DockPadding.Left + this.DockPadding.Right,
                        Math.Max(m_TitleBar.Height + this.DockPadding.Top + this.DockPadding.Bottom, m_TitleBar.ExpandChangeButton.HeightInternal));
                    if (!p.IsEmpty) p.Y += this.Height - s.Height;
                    targetRect = new Rectangle(p, s);
                }
                if (this.AnimationTime == 0 || this.DesignMode)
                {
                    TypeDescriptor.GetProperties(this)["Bounds"].SetValue(this, targetRect);
                }
                else
                {
                    Rectangle controlRect = this.Bounds;
                    BarFunctions.AnimateControl(this, true, m_AnimationTime, controlRect, targetRect);
                }
                if (m_CollapseDirection == eCollapseDirection.LeftToRight || m_CollapseDirection == eCollapseDirection.RightToLeft)
                {
                    m_TitleBar.RenderText = false;
                    this.RenderText = false;
                }
                if (_HideControlsWhenCollapsed)
                {
                    // Hide internal controls
                    this.SuspendLayout();
                    foreach (Control c in this.Controls)
                    {
                        if (c is ContextMenuBar) continue;
                        if (c != this.TitlePanel)
                            c.Visible = false;
                    }
                    this.ResumeLayout();
                }
                m_TitleBar.SendToBack();
                if (m_CollapseDirection == eCollapseDirection.LeftToRight || m_CollapseDirection == eCollapseDirection.RightToLeft)
                    SetupExpandVerticalPane();
            }
            UpdateExpandButtonImage();
            this.Refresh();
        }
        private void DisposeVerticalExpandPane()
        {
            if (m_VerticalExpandPane != null)
            {
                this.Controls.Remove(m_VerticalExpandPane);
                m_VerticalExpandPane.Dispose();
                m_VerticalExpandPane = null;
            }
        }
        private bool _HideControlsWhenCollapsed = false;
        /// 
        /// Indicates whether panel will hide the controls it contains when its collapsed and show them when its expanded. Default value is false.
        /// 
        [DefaultValue(false), Category("Behavior"), Description("Indicates whether panel will hide the controls it contains when its collapsed and show them when its expanded")]
        public bool HideControlsWhenCollapsed
        {
            get { return _HideControlsWhenCollapsed; }
            set
            {
                _HideControlsWhenCollapsed = value;
            }
        }
        private void UpdateExpandButtonImage()
        {
            Image img = null;
            Image imgMouseOver = null;
            if (this.Expanded)
            {
                if (m_ButtonImageCollapse != null)
                    img = m_ButtonImageCollapse;
                else
                {
                    if (BarFunctions.IsOffice2007Style(this.ColorSchemeStyle))
                    {
                        if (m_CollapseDirection == eCollapseDirection.BottomToTop ||
                            m_CollapseDirection == eCollapseDirection.RightToLeft)
                        {
                            img = m_Office2007ButtonImageCollapse;
                            imgMouseOver = m_Office2007ButtonImageCollapseMouseOver;
                        }
                        else
                        {
                            img = m_Office2007ButtonImageExpand;
                            imgMouseOver = m_Office2007ButtonImageExpandMouseOver;
                        }
                    }
                    else
                    {
                        if (m_CollapseDirection == eCollapseDirection.BottomToTop)
                            img = BarFunctions.LoadBitmap("SystemImages.ExpandTitle.png");
                        else if (m_CollapseDirection == eCollapseDirection.TopToBottom)
                            img = BarFunctions.LoadBitmap("SystemImages.CollapseTitle.png");
                        else if (m_CollapseDirection == eCollapseDirection.LeftToRight)
                        {
                            Bitmap b = BarFunctions.LoadBitmap("SystemImages.ExpandTitle.png");
                            b.RotateFlip(RotateFlipType.Rotate270FlipNone);
                            img = b;
                        }
                        else if (m_CollapseDirection == eCollapseDirection.RightToLeft)
                        {
                            Bitmap b = BarFunctions.LoadBitmap("SystemImages.ExpandTitle.png");
                            b.RotateFlip(RotateFlipType.Rotate90FlipNone);
                            img = b;
                        }
                    }
                }
            }
            else
            {
                if (m_ButtonImageExpand != null)
                    img = m_ButtonImageExpand;
                else
                {
                    if (BarFunctions.IsOffice2007Style(this.ColorSchemeStyle))
                    {
                        if (m_CollapseDirection == eCollapseDirection.BottomToTop ||
                            m_CollapseDirection == eCollapseDirection.RightToLeft)
                        {
                            img = m_Office2007ButtonImageExpand;
                            imgMouseOver = m_Office2007ButtonImageExpandMouseOver;
                        }
                        else
                        {
                            img = m_Office2007ButtonImageCollapse;
                            imgMouseOver = m_Office2007ButtonImageCollapseMouseOver;
                        }
                    }
                    else
                    {
                        if (m_CollapseDirection == eCollapseDirection.BottomToTop)
                            img = BarFunctions.LoadBitmap("SystemImages.CollapseTitle.png");
                        else if (m_CollapseDirection == eCollapseDirection.TopToBottom)
                            img = BarFunctions.LoadBitmap("SystemImages.ExpandTitle.png");
                        else if (m_CollapseDirection == eCollapseDirection.LeftToRight)
                        {
                            Bitmap b = BarFunctions.LoadBitmap("SystemImages.CollapseTitle.png");
                            b.RotateFlip(RotateFlipType.Rotate270FlipNone);
                            img = b;
                        }
                        else if (m_CollapseDirection == eCollapseDirection.RightToLeft)
                        {
                            Bitmap b = BarFunctions.LoadBitmap("SystemImages.CollapseTitle.png");
                            b.RotateFlip(RotateFlipType.Rotate90FlipNone);
                            img = b;
                        }
                    }
                }
            }
            m_TitleBar.ExpandChangeButton.Image = img;
            m_TitleBar.ExpandChangeButton.HoverImage = imgMouseOver;
            if (BarFunctions.IsHandleValid(this))
            {
                m_TitleBar.UpdateButtonPosition();
                m_TitleBar.Invalidate();
            }
        }
        private void UpdateOffice2007Images()
        {
            if (m_Office2007ButtonImageCollapse != null)
                m_Office2007ButtonImageCollapse.Dispose();
            if (m_Office2007ButtonImageExpand != null)
                m_Office2007ButtonImageExpand.Dispose();
            if (m_Office2007ButtonImageCollapseMouseOver != null)
                m_Office2007ButtonImageCollapseMouseOver.Dispose();
            if (m_Office2007ButtonImageExpandMouseOver != null)
                m_Office2007ButtonImageExpandMouseOver.Dispose();
            bool vertImage = (m_CollapseDirection == eCollapseDirection.TopToBottom) || (m_CollapseDirection == eCollapseDirection.BottomToTop);
            m_Office2007ButtonImageCollapse = UIGraphics.CreateExpandButtonImage(true, this.ColorScheme.PanelText, vertImage);
            m_Office2007ButtonImageCollapseMouseOver = UIGraphics.CreateExpandButtonImage(true, this.ColorScheme.ItemHotText, vertImage);
            m_Office2007ButtonImageExpand = UIGraphics.CreateExpandButtonImage(false, this.ColorScheme.PanelText, vertImage);
            m_Office2007ButtonImageExpandMouseOver = UIGraphics.CreateExpandButtonImage(false, this.ColorScheme.ItemHotText, vertImage);
        }
        private void InvokeExpandedChanging(ExpandedChangeEventArgs e)
        {
            if (ExpandedChanging != null)
                ExpandedChanging(this, e);
        }
        private void InvokeExpandedChanged(ExpandedChangeEventArgs e)
        {
            if (ExpandedChanged != null)
                ExpandedChanged(this, e);
        }
        /// 
        /// Called after either ColorScheme or ColorSchemeStyle has changed. If you override make sure that you call base implementation so default
        /// processing can occur.
        /// 
        protected override void OnColorSchemeChanged()
        {
            base.OnColorSchemeChanged();
            m_TitleBar.ColorScheme = GetColorScheme();
            UpdateAutoGeneratedImages();
        }
        private void UpdateAutoGeneratedImages()
        {
            DisposeAutoGeneratedImages();
            if (BarFunctions.IsOffice2007Style(this.ColorSchemeStyle))
                UpdateOffice2007Images();
            UpdateExpandButtonImage();
        }
        private void DisposeAutoGeneratedImages()
        {
            if (m_Office2007ButtonImageCollapse != null)
            {
                m_Office2007ButtonImageCollapse.Dispose();
                m_Office2007ButtonImageCollapse = null;
            }
            if (m_Office2007ButtonImageCollapseMouseOver != null)
            {
                m_Office2007ButtonImageCollapseMouseOver.Dispose();
                m_Office2007ButtonImageCollapseMouseOver = null;
            }
            if (m_Office2007ButtonImageExpand != null)
            {
                m_Office2007ButtonImageExpand.Dispose();
                m_Office2007ButtonImageExpand = null;
            }
            if (m_Office2007ButtonImageExpandMouseOver != null)
            {
                m_Office2007ButtonImageExpandMouseOver.Dispose();
                m_Office2007ButtonImageExpandMouseOver = null;
            }
        }
        private int GetTitleHeight()
        {
            if (m_TitleBar.Dock == DockStyle.Left || m_TitleBar.Dock == DockStyle.Right)
                return m_TitleBar.Width;
            else
                return m_TitleBar.Height;
        }
        private void SetTitleHeight(int value)
        {
            //if(m_CollapseDirection == eCollapseDirection.LeftToRight || m_CollapseDirection == eCollapseDirection.RightToLeft)
            if (m_TitleBar.Dock == DockStyle.Left || m_TitleBar.Dock == DockStyle.Right)
            {
                m_TitleBar.Width = value;
                //if (!this.Expanded)
                //    TypeDescriptor.GetProperties(this)["Width"].SetValue(this, value);
            }
            else
            {
                m_TitleBar.Height = value;
                //if (!this.Expanded)
                //    TypeDescriptor.GetProperties(this)["Height"].SetValue(this, value);
            }
        }
        private void OnCollapseDirectionChanged()
        {
            UpdateAutoGeneratedImages();
        }
        protected override void Dispose(bool disposing)
        {
            DisposeAutoGeneratedImages();
            if (BarUtilities.DisposeItemImages && !this.DesignMode)
            {
                BarUtilities.DisposeImage(ref m_ButtonImageCollapse);
                BarUtilities.DisposeImage(ref m_ButtonImageExpand);
            }
            base.Dispose(disposing);
        }
        private void SetupExpandVerticalPane()
        {
            m_VerticalExpandPane = new PanelEx();
            m_VerticalExpandPane.ColorSchemeStyle = this.ColorSchemeStyle;
            m_VerticalExpandPane.ColorScheme = this.ColorScheme;
            m_VerticalExpandPane.ApplyButtonStyle();
            m_VerticalExpandPane.Style.VerticalText = true;
            m_VerticalExpandPane.Style.ForeColor.ColorSchemePart = eColorSchemePart.PanelText;
            m_VerticalExpandPane.Style.BackColor1.ColorSchemePart = eColorSchemePart.PanelBackground;
            m_VerticalExpandPane.Style.ResetBackColor2();
            m_VerticalExpandPane.StyleMouseOver.VerticalText = true;
            m_VerticalExpandPane.StyleMouseDown.VerticalText = true;
            m_VerticalExpandPane.Dock = DockStyle.Fill;
            m_VerticalExpandPane.Text = TitlePanel.Text;
            this.Controls.Add(m_VerticalExpandPane);
            if (this.TitleStyle.Font != null)
                m_VerticalExpandPane.Font = this.TitleStyle.Font;
            else if (TitlePanel.Font != null)
                m_VerticalExpandPane.Font = TitlePanel.Font;
            m_VerticalExpandPane.Click += new EventHandler(VerticalExpandPaneClick);
            m_VerticalExpandPane.BringToFront();
        }
        private void VerticalExpandPaneClick(object sender, EventArgs e)
        {
            this.Expanded = !this.Expanded;
        }
        #endregion
        #region Properties
        /// 
        /// Gets or sets whether the panel is collapsed/expanded when title bar is clicked. Default value is false.
        /// 
        [DefaultValue(false), Browsable(true), Category("Expand"), Description("Indicates whether panel is collapsed/expanded when title bar is clicked.")]
        public bool ExpandOnTitleClick
        {
            get { return m_ExpandOnTitleClick; }
            set { m_ExpandOnTitleClick = value; }
        }
        /// 
        /// Gets or sets the collapse/expand direction for the control. Default value causes the control to collapse from bottom to top.
        /// 
        [Browsable(true), DefaultValue(eCollapseDirection.BottomToTop), Category("Expand"), Description("Indicates collapse/expand direction for the control.")]
        public eCollapseDirection CollapseDirection
        {
            get { return m_CollapseDirection; }
            set
            {
                m_CollapseDirection = value;
                OnCollapseDirectionChanged();
            }
        }
        /// 
        /// Gets or sets whether panel is expanded or not. Default value is true.
        /// 
        [Browsable(true), Category("Expand"), DefaultValue(true), Description("Indicates whether panel is expaned or not. Default value is true.")]
        public bool Expanded
        {
            get { return m_Expanded; }
            set
            {
                if (m_Expanded != value)
                    SetExpanded(value, eEventSource.Code);
            }
        }
        /// 
        /// Gets or sets animation time in milliseconds. Default value is 100 miliseconds. You can set this to 0 (zero) to disable animation.
        /// 
        [Browsable(true), DefaultValue(100), Category("Expand"), Description("Indicates animation time in milliseconds, set to 0 to disable animation.")]
        public int AnimationTime
        {
            get { return m_AnimationTime; }
            set
            {
                if (m_AnimationTime >= 0)
                    m_AnimationTime = value;
            }
        }
        /// 
        /// Gets or sets the bounds of panel when expanded. This value is managed automatically by control based on the starting designer size and value
        /// of Expanded property.
        /// 
        [Browsable(false)]
        public Rectangle ExpandedBounds
        {
            get { return m_ExpandedBounds; }
            set { m_ExpandedBounds = value; }
        }
        /// 
        /// Used for design time support.
        /// 
        /// true if property should be serialized.
        [EditorBrowsable(EditorBrowsableState.Never)]
        public bool ShouldSerializeExpandedBounds()
        {
            return !m_ExpandedBounds.IsEmpty;
        }
        /// 
        /// Gets or sets whether expand button is visible or not. Default value is true.
        /// 
        [Browsable(true), DefaultValue(true), Category("Expand Button"), Description("Indicates whether expand button is visible or not.")]
        public bool ExpandButtonVisible
        {
            get { return m_TitleBar.ExpandButtonVisible; }
            set
            {
                m_TitleBar.ExpandButtonVisible = value;
            }
        }
        /// 
        /// Returns bounds of expand button. Bounds are relative to the TitlePanel coordinates.
        /// 
        [Browsable(false)]
        public Rectangle ExpandButtonBounds
        {
            get
            {
                return m_TitleBar.ExpandChangeButton.DisplayRectangle;
            }
        }
        /// 
        /// Gets or sets image that is used on title bar button to collapse panel. Default value is null which indicates
        /// that system default image is used.
        /// 
        [Browsable(true), DefaultValue(null), Category("Title"), Description("Indicates image used on title bar to collapse panel.")]
        public Image ButtonImageCollapse
        {
            get { return m_ButtonImageCollapse; }
            set
            {
                m_ButtonImageCollapse = value;
                this.UpdateExpandButtonImage();
            }
        }
        /// 
        /// Gets or sets image that is used on title bar button to expand panel. Default value is null which indicates
        /// that system default image is used.
        /// 
        [Browsable(true), DefaultValue(null), Category("Title"), Description("Indicates image used on title bar to expand panel.")]
        public Image ButtonImageExpand
        {
            get { return m_ButtonImageExpand; }
            set
            {
                m_ButtonImageExpand = value;
                this.UpdateExpandButtonImage();
            }
        }
        /// 
        /// Gets or sets the text for the title of the panel.
        /// 
        [Browsable(true), DefaultValue(""), Category("Title"), Description("Indicates text for the title of the panel."), Localizable(true), Editor("DevComponents.DotNetBar.Design.TextMarkupUIEditor, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf", typeof(System.Drawing.Design.UITypeEditor))]
        public string TitleText
        {
            get { return m_TitleBar.Text; }
            set
            {
                m_TitleBar.Text = value;
                if (m_VerticalExpandPane != null)
                    m_VerticalExpandPane.Text = value;
            }
        }
        /// 
        /// Gets or sets the title style.
        /// 
        [Browsable(true), DevCoBrowsable(true), NotifyParentPropertyAttribute(true), Category("Title"), Description("Gets or sets title style."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ItemStyle TitleStyle
        {
            get
            {
                return m_TitleBar.Style;
            }
        }
        /// 
        ///     Resets the style to it's default value.
        /// 
        public void ResetTitleStyle()
        {
            m_TitleBar.ResetStyle();
        }
        /// 
        /// Gets or sets the title style when mouse hovers over the title.
        /// 
        [Browsable(true), DevCoBrowsable(true), NotifyParentPropertyAttribute(true), Category("Title"), Description("Gets or sets the title style when mouse hovers over the title."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ItemStyle TitleStyleMouseOver
        {
            get
            {
                return m_TitleBar.StyleMouseOver;
            }
        }
        /// 
        ///     Resets the style to it's default value.
        /// 
        public void ResetTitleStyleMouseOver()
        {
            m_TitleBar.ResetStyleMouseOver();
        }
        /// 
        /// Gets or sets the title style when mouse button is pressed on the title.
        /// 
        [Browsable(true), DevCoBrowsable(true), NotifyParentPropertyAttribute(true), Category("Title"), Description("Gets or sets the Title style when mouse button is pressed on the title."), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public ItemStyle TitleStyleMouseDown
        {
            get
            {
                return m_TitleBar.StyleMouseDown;
            }
        }
        /// 
        ///     Resets the style to it's default value.
        /// 
        public void ResetTitleStyleMouseDown()
        {
            m_TitleBar.ResetStyleMouseDown();
        }
        /// 
        /// Gets or sets the height of the title portion of the panel. Height must be greater than 0. Default is 26.
        /// 
        [Browsable(true), DefaultValue(26), Category("Title"), Description("Indicates height of the title portion of the panel.")]
        public int TitleHeight
        {
            get { return GetTitleHeight(); }
            set { SetTitleHeight(value); }
        }
        /// 
        /// Gets reference to Panel control used as title bar.
        /// 
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public PanelEx TitlePanel
        {
            get { return m_TitleBar; }
        }
        /// 
        /// Gets reference to the title bar expand button.
        /// 
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public ButtonItem ExpandButton
        {
            get { return m_TitleBar.ExpandChangeButton; }
        }
        /// 
        /// Gets or sets alignment of the expand button.
        /// 
        [DefaultValue(eTitleButtonAlignment.Right), Category("Expand Button"), Description("Indicates the alignment of expand button.")]
        public eTitleButtonAlignment ExpandButtonAlignment
        {
            get { return m_TitleBar.ButtonAlignment; }
            set
            {
                m_TitleBar.ButtonAlignment = value;
            }
        }
        /// 
        /// Gets the reference to the panel used as button when control is collapsed to the left or right.
        /// 
        [Browsable(false)]
        public PanelEx VerticalExpandPanel
        {
            get { return m_VerticalExpandPane; }
        }
        /// 
        /// Called when AntiAlias property has changed.
        /// 
        protected override void OnAntiAliasChanged()
        {
            m_TitleBar.AntiAlias = this.AntiAlias;
        }
        #endregion
    }
}