#if FRAMEWORK20
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using DevComponents.DotNetBar.Rendering;
using System.Drawing.Drawing2D;
namespace DevComponents.DotNetBar.Controls
{
    /// 
    /// Represents the PageNavigate item
    /// 
    [Browsable(false), Designer("DevComponents.DotNetBar.Design.SimpleItemDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral,  PublicKeyToken=90f470f34c89ccaf")]
    public class PageNavigatorItem : BaseItem
    {
        #region Events
        /// 
        /// Occurs when NavigateNextPage button is clicked
        /// 
        [Description("Occurs when NavigateNextPage button is clicked.")]
        public event EventHandler NavigateNextPage;
        /// 
        /// Occurs when NavigateToday button is clicked
        /// 
        [Description("Occurs when NavigateToday button is clicked.")]
        public event EventHandler NavigateToday;
        /// 
        /// Occurs when NavigatePreviousPage button is clicked
        /// 
        [Description("Occurs when NavigatePreviousPage button is clicked.")]
        public event EventHandler NavigatePreviousPage;
        #endregion
        #region Private Variables
        private ePageNavigatorPart _MouseOverPart = ePageNavigatorPart.None;
        private ePageNavigatorPart _MouseDownPart = ePageNavigatorPart.None;
        private Rectangle _PreviousPageBounds;
        private Rectangle _TodayBounds;
        private Rectangle _NextPageBounds;
        private string _PreviousPageTooltip = "";
        private string _TodayTooltip = "";
        private string _NextPageTooltip = "";
        private Bitmap _PreviousPageBitmap;
        private Bitmap _TodayBitmap;
        private Bitmap _NextPageBitmap;
        private Timer _ClickTimer;
        private int _AutoClickCount;
        private int _ButtonSize = SystemInformation.VerticalScrollBarWidth;
        private int _MinWidth = SystemInformation.VerticalScrollBarWidth * 3;
        #endregion
        /// 
        /// Creates new instance of PageNavigateItem
        /// 
        public PageNavigatorItem() : this("") { }
        /// 
        /// Creates new instance of PageNavigateItem and assigns the name to it
        /// 
        /// Item name
        public PageNavigatorItem(string itemName)
        {
            this.Name = itemName;
            this.ClickRepeatInterval = 200;
            this.MouseUpNotification = true;
            this.MouseDownCapture = true;
            this.Size = new Size(Dpi.Width(_MinWidth), Dpi.Height(_ButtonSize));
        }
        #region Internal properties
        #region MouseOverPart
        /// 
        /// Gets or sets the MouseOverPart
        /// 
        internal ePageNavigatorPart MouseOverPart
        {
            get { return _MouseOverPart; }
            set
            {
                if (_MouseOverPart != value)
                {
                    _MouseOverPart = value;
                    UpdateTooltip();
                    this.Refresh();
                }
            }
        }
        #endregion
        #region MouseDownPart
        /// 
        /// Gets or sets the MouseDownPart
        /// 
        internal ePageNavigatorPart MouseDownPart
        {
            get { return _MouseDownPart; }
            set
            {
                if (_MouseDownPart != value)
                {
                    _MouseDownPart = value;
                    this.Refresh();
                }
            }
        }
        #endregion
        #endregion
        #region Public properties
        #region Orientation
        /// 
        /// Gets or sets the control orientation. Default value is Horizontal
        /// 
        [DefaultValue(eOrientation.Horizontal), Category("Appearance")]
        [Description("Indicates PageNavigator orientation.")]
        public override eOrientation Orientation
        {
            get { return (base.Orientation); }
            set
            {
                if (base.Orientation != value)
                {
                    base.Orientation = value;
                    // Release our current cached bitmaps
                    ReleaseBitmap(ref _NextPageBitmap);
                    ReleaseBitmap(ref _PreviousPageBitmap);
                    // Reset our size back to the
                    // default for the new orientation
                    this.Size = (value == eOrientation.Horizontal) ? 
                        new Size(Dpi.Width(_MinWidth), Dpi.Height(_ButtonSize)) : new Size(Dpi.Width(_ButtonSize), Dpi.Height(_MinWidth));
                    NeedRecalcSize = true;
                    this.Refresh();
                }
            }
        }
        protected override void ScaleItem(SizeF factor)
        {
            ReleaseBitmap(ref _PreviousPageBitmap);
            ReleaseBitmap(ref _TodayBitmap);
            ReleaseBitmap(ref _NextPageBitmap);
            this.Size = (Orientation == eOrientation.Horizontal) ?
                        new Size(Dpi.Width(_MinWidth), Dpi.Height(_ButtonSize)) : new Size(Dpi.Width(_ButtonSize), Dpi.Height(_MinWidth));
            base.ScaleItem(factor);
        }
        #endregion
        #region ClickAutoRepeat
        /// 
        /// Gets or sets whether Click event will be auto repeated
        /// when mouse button is kept pressed over the item
        /// 
        [Browsable(false), DevCoBrowsable(false), DefaultValue(false), Category("Behavior")]
        [Description("Gets or sets whether Click event will be auto repeated when the mouse button is kept pressed over the item.")]
        public override bool ClickAutoRepeat
        {
            get { return (base.ClickAutoRepeat); }
            set { base.ClickAutoRepeat = value; }
        }
        #endregion
        #region ClickRepeatInterval
        /// 
        /// Gets or sets the auto-repeat interval for the click event
        /// when mouse button is kept pressed over the item
        /// 
        [Browsable(true), DevCoBrowsable(true), DefaultValue(200), Category("Behavior")]
        [Description("Gets or sets the auto-repeat interval for the click event when the mouse button is kept pressed over the item.")]
        public override int ClickRepeatInterval
        {
            get { return (base.ClickRepeatInterval); }
            set { base.ClickRepeatInterval = value; }
        }
        #endregion
        #region PreviousPageTooltip
        /// 
        /// Gets or sets the tooltip for the PreviousPage button of the control
        /// 
        [Browsable(true), DefaultValue(""), Localizable(true), Category("Appearance")]
        [Description("Indicates tooltip for the PreviousPage button of the control.")]
        public string PreviousPageTooltip
        {
            get { return _PreviousPageTooltip; }
            set
            {
                _PreviousPageTooltip = value;
                UpdateTooltip();
            }
        }
        #endregion
        #region TodayTooltip
        /// 
        /// Gets or sets the tooltip for the Today button
        /// 
        [Browsable(true), DefaultValue(""), Localizable(true), Category("Appearance")]
        [Description("Indicates tooltip for the TodayPage button of the control.")]
        public string TodayTooltip
        {
            get { return (_TodayTooltip); }
            set
            {
                _TodayTooltip = value;
                UpdateTooltip();
            }
        }
        #endregion
        #region NextPageTooltip
        /// 
        /// Gets or sets the tooltip for the NextPage button
        /// 
        [Browsable(true), DefaultValue(""), Localizable(true), Category("Appearance")]
        [Description("Indicates tooltip for the NextPage button of the control.")]
        public string NextPageTooltip
        {
            get { return (_NextPageTooltip); }
            set
            {
                _NextPageTooltip = value;
                UpdateTooltip();
            }
        }
        #endregion
        #endregion
        #region RecalcSize
        /// 
        /// Handles size recalc
        /// 
        public override void RecalcSize()
        {
            // Update our layout
            UpdateLayout();
            base.RecalcSize();
        }
        #endregion
        #region OnExternalSizeChange
        /// 
        /// Handles external size changes
        /// 
        protected override void OnExternalSizeChange()
        {
            UpdateLayout();
            base.OnExternalSizeChange();
        }
        #endregion
        #region UpdateLayout
        /// 
        /// Lays out our control based upon its
        /// vertical / horizontal orientation
        /// 
        private void UpdateLayout()
        {
            Rectangle r = Bounds;
            if (Orientation == eOrientation.Horizontal)
            {
                int dx = r.Width / 3;
                _PreviousPageBounds = new Rectangle(r.Left, r.Top, dx, r.Height);
                _NextPageBounds = new Rectangle(r.Right - dx, r.Top, dx, r.Height);
                _TodayBounds = new Rectangle(r.Left + dx, r.Top, r.Width - dx * 2, r.Height);
            }
            else
            {
                int dy = r.Height / 3;
                _PreviousPageBounds = new Rectangle(r.Left, r.Top, r.Width, dy);
                _NextPageBounds = new Rectangle(r.Left, r.Bottom - dy, r.Width, dy);
                _TodayBounds = new Rectangle(r.Left, r.Y + dy, r.Width, r.Height - dy * 2);
            }
        }
        #endregion
        #region Paint
        /// 
        /// Handles control rendering
        /// 
        /// 
        public override void Paint(ItemPaintArgs e)
        {
            Graphics g = e.Graphics;
            Office2007ScrollBarColorTable colorTable =
                ((Office2007Renderer)GlobalManager.Renderer).ColorTable.ScrollBar;
            DrawPreviousPage(g, colorTable);
            DrawToday(g, colorTable);
            DrawNextPage(g, colorTable);
        }
        #region DrawPreviousPage
        /// 
        /// Draws the PreviousPage button
        /// 
        /// Graphics
        /// Office2007ScrollBarColorTable
        private void DrawPreviousPage(Graphics g, Office2007ScrollBarColorTable ct)
        {
            Office2007ScrollBarStateColorTable cst =
                GetPageColorTable(ct, ePageNavigatorPart.PreviousPage);
            float angle = (Orientation == eOrientation.Horizontal) ? 90f : 0f;
            
            using (LinearGradientBrush lbr = new LinearGradientBrush(
                _PreviousPageBounds, cst.Background.Start, cst.Background.End, angle))
            {
                if (cst.TrackBackground.Count > 0)
                    lbr.InterpolationColors =
                        cst.TrackBackground.GetColorBlend();
                g.FillRectangle(lbr, _PreviousPageBounds);
            }
            g.DrawImageUnscaled(
                GetPreviousPageBitmap(g, cst),
                CenterRect(_PreviousPageBounds));
        }
        #region GetPreviousPageBitmap
        /// 
        /// Gets the PreviousPage bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap GetPreviousPageBitmap(
            Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            if (_PreviousPageBitmap == null)
                _PreviousPageBitmap = CreatePreviousPageBitmap(g, cst);
            return (_PreviousPageBitmap);
        }
        /// 
        /// Creates the PreviousPage bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap CreatePreviousPageBitmap(
            Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            Bitmap bmp = new Bitmap(Dpi.Width10, Dpi.Height10, g);
            using (Graphics gBmp = Graphics.FromImage(bmp))
            {
                using (GraphicsPath path = new GraphicsPath())
                {
                    float angle;
                    if (Orientation == eOrientation.Horizontal)
                    {
                        angle = 90;
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width8,0),
                            new Point(Dpi.Width4,Dpi.Height4),
                            new Point(Dpi.Width8,Dpi.Height8)
                            });
                        path.CloseFigure();
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width4,0),
                            new Point(0,Dpi.Height4),
                            new Point(Dpi.Width4,Dpi.Height8)
                            });
                        path.CloseFigure();
                    }
                    else
                    {
                        angle = 0;
                        path.AddLines(new Point[] {
                            new Point(0,Dpi.Height5),
                            new Point(Dpi.Width4,0),
                            new Point(Dpi.Width8,Dpi.Height5)
                            });
                        path.CloseFigure();
                        path.AddLines(new Point[] {
                            new Point(0,Dpi.Height9),
                            new Point(Dpi.Width4,Dpi.Height4),
                            new Point(Dpi.Width8,Dpi.Height9)
                            });
                        path.CloseFigure();
                    }
                    Rectangle r = new Rectangle(0, 0, Dpi.Width10, Dpi.Height10);
                    using (LinearGradientBrush lbr = new
                        LinearGradientBrush(r, cst.ThumbSignBackground.Start, cst.ThumbSignBackground.End, angle))
                    {
                        gBmp.FillPath(lbr, path);
                    }
                }
            }
            return (bmp);
        }
        #endregion
        #endregion
        #region DrawToday
        /// 
        /// Draws the Today button
        /// 
        /// Graphics
        /// Office2007ScrollBarColorTable
        private void DrawToday(Graphics g, Office2007ScrollBarColorTable ct)
        {
            Office2007ScrollBarStateColorTable cst =
                GetPageColorTable(ct, ePageNavigatorPart.Today);
            float angle = (Orientation == eOrientation.Horizontal) ? 90f : 0f;
            using (LinearGradientBrush lbr = new LinearGradientBrush(
                _TodayBounds, cst.Background.Start, cst.Background.End, angle))
            {
                if (cst.TrackBackground.Count > 0)
                    lbr.InterpolationColors = cst.TrackBackground.GetColorBlend();
                g.FillRectangle(lbr, _TodayBounds);
            }
            g.DrawImageUnscaled(
                GetTodayBitmap(g, cst),
                CenterRect(_TodayBounds));
        }
        #region GetTodayBitmap
        /// 
        /// Gets the Today Bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap GetTodayBitmap(
            Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            if (_TodayBitmap == null)
                _TodayBitmap = CreateTodayBitmap(g, cst);
            return (_TodayBitmap);
        }
        /// 
        /// Creates the Today Bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap CreateTodayBitmap(
            Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            Bitmap bmp = new Bitmap(Dpi.Width10, Dpi.Height10, g);
            using (Graphics gBmp = Graphics.FromImage(bmp))
            {
                Rectangle r = new Rectangle(Dpi.Width1, Dpi.Height1, Dpi.Width6, Dpi.Height6);
                gBmp.SmoothingMode = SmoothingMode.HighQuality;
                Color color = ControlPaint.LightLight(cst.ThumbSignBackground.Start);
                using (SolidBrush br = new SolidBrush(color))
                {
                    gBmp.FillEllipse(br, r);
                }
                using (Pen pen = new Pen(cst.ThumbSignBackground.End, Dpi.Width1))
                {
                    gBmp.DrawEllipse(pen, r);
                }
            }
            return (bmp);
        }
        #endregion
        #endregion
        #region DrawNextPage
        /// 
        /// Draws the NextPage button
        /// 
        /// 
        /// 
        private void DrawNextPage(Graphics g, Office2007ScrollBarColorTable ct)
        {
            Office2007ScrollBarStateColorTable cst =
                GetPageColorTable(ct, ePageNavigatorPart.NextPage);
            float angle = (Orientation == eOrientation.Horizontal) ? 90f : 0f;
            using (LinearGradientBrush lbr = new LinearGradientBrush(
                _NextPageBounds, cst.Background.Start, cst.Background.End, angle))
            {
                if (cst.TrackBackground.Count > 0)
                    lbr.InterpolationColors = cst.TrackBackground.GetColorBlend();
                g.FillRectangle(lbr, _NextPageBounds);
            }
            g.DrawImageUnscaled(
                GetNextPageBitmap(g, cst),
                CenterRect(_NextPageBounds));
        }
        #region GetNextPageBitmap
        /// 
        /// Gets the NextPage Bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap GetNextPageBitmap(Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            if (_NextPageBitmap == null)
                _NextPageBitmap = CreateNextPageBitmap(g, cst);
            return (_NextPageBitmap);
        }
        /// 
        /// Creates the NextPage Bitmap
        /// 
        /// 
        /// 
        /// 
        private Bitmap CreateNextPageBitmap(Graphics g, Office2007ScrollBarStateColorTable cst)
        {
            Bitmap bmp = new Bitmap(Dpi.Width10, Dpi.Height10, g);
            using (Graphics gBmp = Graphics.FromImage(bmp))
            {
                using (GraphicsPath path = new GraphicsPath())
                {
                    float angle;
                    if (Orientation == eOrientation.Horizontal)
                    {
                        angle = 90;
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width1,0),
                            new Point(Dpi.Width5,Dpi.Height4), 
                            new Point(Dpi.Width1,Dpi.Height8)
                            });
                        path.CloseFigure();
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width5,0),
                            new Point(Dpi.Width9,Dpi.Height4),
                            new Point(Dpi.Width5,Dpi.Height8)
                            });
                        path.CloseFigure();
                    }
                    else
                    {
                        angle = 0;
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width1,0),
                            new Point(Dpi.Width8,0),
                            new Point(Dpi.Width4,Dpi.Height4)
                            });
                        path.CloseFigure();
                        path.AddLines(new Point[] {
                            new Point(Dpi.Width1,Dpi.Height4),
                            new Point(Dpi.Width8,Dpi.Height4),
                            new Point(Dpi.Width4,Dpi.Height8)
                            });
                        path.CloseFigure();
                    }
                    Rectangle r = new Rectangle(0, 0, Dpi.Width10, Dpi.Height10);
                    DisplayHelp.FillPath(gBmp, path, cst.ThumbSignBackground);
                    //using (LinearGradientBrush lbr = new
                    //    LinearGradientBrush(r, cst.ThumbSignBackground.Start, cst.ThumbSignBackground.End, angle))
                    //{
                    //    gBmp.FillPath(lbr, path);
                    //}
                }
            }
            return (bmp);
        }
        #endregion
        #endregion
        #region GetPageColorTable
        private Office2007ScrollBarStateColorTable
            GetPageColorTable(Office2007ScrollBarColorTable ct, ePageNavigatorPart part)
        {
            if (GetEnabled() == false)
                return (ct.Disabled);
            if (MouseDownPart == part)
                return (ct.Pressed);
            if (MouseOverPart == part)
                return (ct.MouseOver);
            return (ct.Default);
        }
        #endregion
        #region CenterRect
        /// 
        /// Centers the given rect
        /// 
        /// 
        /// 
        private Rectangle CenterRect(Rectangle r)
        {
            r.X += (r.Width - 10) / 2 + 1;
            r.Y += (r.Height - 10) / 2 + 1;
            if (r.X < 0)
                r.X = 0;
            if (r.Y < 0)
                r.Y = 0;
            return (r);
        }
        #endregion
        #endregion
        #region Mouse support
        #region InternalMouseMove
        /// 
        /// Processes InternalMouseMove events
        /// 
        /// 
        public override void InternalMouseMove(MouseEventArgs objArg)
        {
            if (GetEnabled() == true && DesignMode == false)
            {
                if (MouseDownPart == ePageNavigatorPart.None)
                    MouseOverPart = HitTest(objArg.Location);
            }
            base.InternalMouseMove(objArg);
        }
        #region HitTest
        /// 
        /// Returns the HitText area for the given point
        /// 
        /// 
        /// 
        public ePageNavigatorPart HitTest(Point pt)
        {
            if (_PreviousPageBounds.Contains(pt))
                return (ePageNavigatorPart.PreviousPage);
            if (_NextPageBounds.Contains(pt))
                return (ePageNavigatorPart.NextPage);
            if (_TodayBounds.Contains(pt))
                return (ePageNavigatorPart.Today);
            return (ePageNavigatorPart.None);
        }
        #endregion
        #endregion
        #region InternalMouseLeave
        /// 
        /// Processes Mouse Leave events
        /// 
        public override void InternalMouseLeave()
        {
            DisposeClickTimer();
            MouseOverPart = ePageNavigatorPart.None;
            MouseDownPart = ePageNavigatorPart.None;
            base.InternalMouseLeave();
        }
        #endregion
        #region InternalMouseDown
        /// 
        /// Processes Mouse Down events
        /// 
        /// 
        public override void InternalMouseDown(MouseEventArgs objArg)
        {
            if (objArg.Button == MouseButtons.Left)
            {
                if (GetEnabled() && DesignMode == false)
                {
                    MouseDownPart = HitTest(objArg.Location);
                    if (MouseDownPart != ePageNavigatorPart.None)
                    {
                        switch (MouseDownPart)
                        {
                            case ePageNavigatorPart.PreviousPage:
                                OnNavigatePreviousPage();
                                break;
                            case ePageNavigatorPart.NextPage:
                                OnNavigateNextPage();
                                break;
                            default:
                                OnNavigateToday();
                                break;
                        }
                    }
                }
            }
            base.InternalMouseDown(objArg);
        }
        #endregion
        #region InternalMouseUp
        /// 
        /// Processes Mouse Up events
        /// 
        /// 
        public override void InternalMouseUp(MouseEventArgs objArg)
        {
            DisposeClickTimer();
            MouseDownPart = ePageNavigatorPart.None;
            base.InternalMouseUp(objArg);
        }
        #endregion
        #endregion
        #region OnNavigate
        /// 
        /// Raises the NavigatePreviousPage event
        /// 
        protected virtual void OnNavigatePreviousPage()
        {
            if (NavigatePreviousPage != null)
                NavigatePreviousPage(this, EventArgs.Empty);
            EnableClickTimer();
        }
        /// 
        /// Raises the NavigateToday event
        /// 
        protected virtual void OnNavigateToday()
        {
            if (NavigateToday != null)
                NavigateToday(this, EventArgs.Empty);
        }
        /// 
        /// Raises the NavigateNextPage event
        /// 
        protected virtual void OnNavigateNextPage()
        {
            if (NavigateNextPage != null)
                NavigateNextPage(this, EventArgs.Empty);
            EnableClickTimer();
        }
        #endregion
        #region Timer support
        #region ClickTimerTick
        /// 
        /// Handles timer click events
        /// 
        /// 
        /// 
        private void ClickTimerTick(object sender, EventArgs e)
        {
            switch (MouseDownPart)
            {
                case ePageNavigatorPart.PreviousPage:
                    OnNavigatePreviousPage();
                    break;
                case ePageNavigatorPart.NextPage:
                    OnNavigateNextPage();
                    break;
            }
            // Auto ramp-up
            if (_ClickTimer != null)
            {
                _AutoClickCount++;
                if (_AutoClickCount > 4 && _ClickTimer.Interval > 20)
                    _ClickTimer.Interval -= 10;
            }
        }
        #endregion
        #region UpdateClickTimer
        /// 
        /// Enables our click timer
        /// 
        private void EnableClickTimer()
        {
            if (ClickRepeatInterval > 0)
            {
                if (_ClickTimer == null)
                {
                    _ClickTimer = new Timer();
                    _ClickTimer.Interval = ClickRepeatInterval;
                    _ClickTimer.Tick += ClickTimerTick;
                    _ClickTimer.Start();
                    _AutoClickCount = 0;
                }
            }
        }
        #endregion
        #region DisposeClickTimer
        /// 
        /// Disposes of the click timer
        /// 
        private void DisposeClickTimer()
        {
            if (_ClickTimer != null)
            {
                _ClickTimer.Tick -= ClickTimerTick;
                _ClickTimer.Stop();
                _ClickTimer.Dispose();
                _ClickTimer = null;
            }
        }
        #endregion
        #endregion
        #region OnTooltipChanged
        /// 
        /// OnTooltipChanged
        /// 
        protected override void OnTooltipChanged()
        {
            UpdateTooltip();
            base.OnTooltipChanged();
        }
        #endregion
        #region UpdateTooltip
        /// 
        /// Updates the control tooltip
        /// 
        private void UpdateTooltip()
        {
            if (this.DesignMode == false)
            {
                string tip = "";
                switch (MouseOverPart)
                {
                    case ePageNavigatorPart.PreviousPage:
                        tip = _PreviousPageTooltip;
                        break;
                    case ePageNavigatorPart.Today:
                        tip = _TodayTooltip;
                        break;
                    case ePageNavigatorPart.NextPage:
                        tip = _NextPageTooltip;
                        break;
                }
                if (tip.Equals("") == false)
                {
                    if (m_Tooltip != tip)
                    {
                        m_Tooltip = tip;
                        if (this.ToolTipVisible)
                            this.ShowToolTip();
                    }
                }
            }
        }
        #endregion
        #region Copy
        /// 
        /// Returns copy of the item
        /// 
        public override BaseItem Copy()
        {
            PageNavigatorItem objCopy = new PageNavigatorItem(Name);
            this.CopyToItem(objCopy);
            return (objCopy);
        }
        /// 
        /// Copies the PageNavigatorItem specific properties to
        /// new instance of the item
        /// 
        /// New PageNavigatorItem instance
        protected override void CopyToItem(BaseItem copy)
        {
            PageNavigatorItem c = copy as PageNavigatorItem;
            if (c != null)
            {
                base.CopyToItem(c);
                c.PreviousPageTooltip = _PreviousPageTooltip;
                c.TodayTooltip = _TodayTooltip;
                c.NextPageTooltip = _NextPageTooltip;
            }
        }
        #endregion
        #region Dispose
        /// 
        /// Dispose
        /// 
        protected override void Dispose(bool disposing)
        {
            DisposeClickTimer();
            ReleaseBitmap(ref _PreviousPageBitmap);
            ReleaseBitmap(ref _TodayBitmap);
            ReleaseBitmap(ref _NextPageBitmap);
            base.Dispose(disposing);
        }
        /// 
        /// Releases the given bitmap
        /// 
        /// Bitmap to release
        private void ReleaseBitmap(ref Bitmap bmp)
        {
            if (bmp != null)
            {
                bmp.Dispose();
                bmp = null;
            }
        }
        #endregion
    }
    #region Enums
    /// 
    /// Defines the PageNavigator item parts
    /// 
    public enum ePageNavigatorPart
    {
        /// 
        /// Indicates no part
        /// 
        None,
        /// 
        /// Indicates the PreviousPage button of the control
        /// 
        PreviousPage,
        /// 
        /// Indicates the TodayPage button of the control
        /// 
        Today,
        /// 
        /// Indicates the NextPage button of the control
        /// 
        NextPage,
    }
    #endregion
}
#endif