1116 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			1116 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
#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
 | 
						|
{
 | 
						|
    /// <summary>
 | 
						|
    /// Represents the PageNavigate item
 | 
						|
    /// </summary>
 | 
						|
    [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when NavigateNextPage button is clicked
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when NavigateNextPage button is clicked.")]
 | 
						|
        public event EventHandler NavigateNextPage;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when NavigateToday button is clicked
 | 
						|
        /// </summary>
 | 
						|
        [Description("Occurs when NavigateToday button is clicked.")]
 | 
						|
        public event EventHandler NavigateToday;
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Occurs when NavigatePreviousPage button is clicked
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of PageNavigateItem
 | 
						|
        /// </summary>
 | 
						|
        public PageNavigatorItem() : this("") { }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates new instance of PageNavigateItem and assigns the name to it
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="itemName">Item name</param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the MouseOverPart
 | 
						|
        /// </summary>
 | 
						|
        internal ePageNavigatorPart MouseOverPart
 | 
						|
        {
 | 
						|
            get { return _MouseOverPart; }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_MouseOverPart != value)
 | 
						|
                {
 | 
						|
                    _MouseOverPart = value;
 | 
						|
 | 
						|
                    UpdateTooltip();
 | 
						|
 | 
						|
                    this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region MouseDownPart
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the MouseDownPart
 | 
						|
        /// </summary>
 | 
						|
        internal ePageNavigatorPart MouseDownPart
 | 
						|
        {
 | 
						|
            get { return _MouseDownPart; }
 | 
						|
 | 
						|
            set
 | 
						|
            {
 | 
						|
                if (_MouseDownPart != value)
 | 
						|
                {
 | 
						|
                    _MouseDownPart = value;
 | 
						|
 | 
						|
                    this.Refresh();
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Public properties
 | 
						|
 | 
						|
        #region Orientation
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the control orientation. Default value is Horizontal
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets whether Click event will be auto repeated
 | 
						|
        /// when mouse button is kept pressed over the item
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the auto-repeat interval for the click event
 | 
						|
        /// when mouse button is kept pressed over the item
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the tooltip for the PreviousPage button of the control
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the tooltip for the Today button
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets or sets the tooltip for the NextPage button
 | 
						|
        /// </summary>
 | 
						|
        [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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Handles size recalc
 | 
						|
        /// </summary>
 | 
						|
        public override void RecalcSize()
 | 
						|
        {
 | 
						|
            // Update our layout
 | 
						|
 | 
						|
            UpdateLayout();
 | 
						|
 | 
						|
            base.RecalcSize();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnExternalSizeChange
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Handles external size changes
 | 
						|
        /// </summary>
 | 
						|
        protected override void OnExternalSizeChange()
 | 
						|
        {
 | 
						|
            UpdateLayout();
 | 
						|
 | 
						|
            base.OnExternalSizeChange();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region UpdateLayout
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Lays out our control based upon its
 | 
						|
        /// vertical / horizontal orientation
 | 
						|
        /// </summary>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Handles control rendering
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="e"></param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the PreviousPage button
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g">Graphics</param>
 | 
						|
        /// <param name="ct">Office2007ScrollBarColorTable</param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the PreviousPage bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        private Bitmap GetPreviousPageBitmap(
 | 
						|
            Graphics g, Office2007ScrollBarStateColorTable cst)
 | 
						|
        {
 | 
						|
            if (_PreviousPageBitmap == null)
 | 
						|
                _PreviousPageBitmap = CreatePreviousPageBitmap(g, cst);
 | 
						|
 | 
						|
            return (_PreviousPageBitmap);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates the PreviousPage bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the Today button
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g">Graphics</param>
 | 
						|
        /// <param name="ct">Office2007ScrollBarColorTable</param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the Today Bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        private Bitmap GetTodayBitmap(
 | 
						|
            Graphics g, Office2007ScrollBarStateColorTable cst)
 | 
						|
        {
 | 
						|
            if (_TodayBitmap == null)
 | 
						|
                _TodayBitmap = CreateTodayBitmap(g, cst);
 | 
						|
 | 
						|
            return (_TodayBitmap);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates the Today Bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Draws the NextPage button
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="ct"></param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Gets the NextPage Bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        private Bitmap GetNextPageBitmap(Graphics g, Office2007ScrollBarStateColorTable cst)
 | 
						|
        {
 | 
						|
            if (_NextPageBitmap == null)
 | 
						|
                _NextPageBitmap = CreateNextPageBitmap(g, cst);
 | 
						|
 | 
						|
            return (_NextPageBitmap);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Creates the NextPage Bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="g"></param>
 | 
						|
        /// <param name="cst"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Centers the given rect
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="r"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Processes InternalMouseMove events
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="objArg"></param>
 | 
						|
        public override void InternalMouseMove(MouseEventArgs objArg)
 | 
						|
        {
 | 
						|
            if (GetEnabled() == true && DesignMode == false)
 | 
						|
            {
 | 
						|
                if (MouseDownPart == ePageNavigatorPart.None)
 | 
						|
                    MouseOverPart = HitTest(objArg.Location);
 | 
						|
            }
 | 
						|
 | 
						|
            base.InternalMouseMove(objArg);
 | 
						|
        }
 | 
						|
 | 
						|
        #region HitTest
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns the HitText area for the given point
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="pt"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Processes Mouse Leave events
 | 
						|
        /// </summary>
 | 
						|
        public override void InternalMouseLeave()
 | 
						|
        {
 | 
						|
            DisposeClickTimer();
 | 
						|
 | 
						|
            MouseOverPart = ePageNavigatorPart.None;
 | 
						|
            MouseDownPart = ePageNavigatorPart.None;
 | 
						|
 | 
						|
            base.InternalMouseLeave();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region InternalMouseDown
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Processes Mouse Down events
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="objArg"></param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Processes Mouse Up events
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="objArg"></param>
 | 
						|
        public override void InternalMouseUp(MouseEventArgs objArg)
 | 
						|
        {
 | 
						|
            DisposeClickTimer();
 | 
						|
 | 
						|
            MouseDownPart = ePageNavigatorPart.None;
 | 
						|
 | 
						|
            base.InternalMouseUp(objArg);
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnNavigate
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the NavigatePreviousPage event
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void OnNavigatePreviousPage()
 | 
						|
        {
 | 
						|
            if (NavigatePreviousPage != null)
 | 
						|
                NavigatePreviousPage(this, EventArgs.Empty);
 | 
						|
 | 
						|
            EnableClickTimer();
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the NavigateToday event
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void OnNavigateToday()
 | 
						|
        {
 | 
						|
            if (NavigateToday != null)
 | 
						|
                NavigateToday(this, EventArgs.Empty);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Raises the NavigateNextPage event
 | 
						|
        /// </summary>
 | 
						|
        protected virtual void OnNavigateNextPage()
 | 
						|
        {
 | 
						|
            if (NavigateNextPage != null)
 | 
						|
                NavigateNextPage(this, EventArgs.Empty);
 | 
						|
 | 
						|
            EnableClickTimer();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region Timer support
 | 
						|
 | 
						|
        #region ClickTimerTick
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Handles timer click events
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="sender"></param>
 | 
						|
        /// <param name="e"></param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Enables our click timer
 | 
						|
        /// </summary>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Disposes of the click timer
 | 
						|
        /// </summary>
 | 
						|
        private void DisposeClickTimer()
 | 
						|
        {
 | 
						|
            if (_ClickTimer != null)
 | 
						|
            {
 | 
						|
                _ClickTimer.Tick -= ClickTimerTick;
 | 
						|
 | 
						|
                _ClickTimer.Stop();
 | 
						|
                _ClickTimer.Dispose();
 | 
						|
 | 
						|
                _ClickTimer = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region OnTooltipChanged
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// OnTooltipChanged
 | 
						|
        /// </summary>
 | 
						|
        protected override void OnTooltipChanged()
 | 
						|
        {
 | 
						|
            UpdateTooltip();
 | 
						|
 | 
						|
            base.OnTooltipChanged();
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
 | 
						|
        #region UpdateTooltip
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Updates the control tooltip
 | 
						|
        /// </summary>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Returns copy of the item
 | 
						|
        /// </summary>
 | 
						|
        public override BaseItem Copy()
 | 
						|
        {
 | 
						|
            PageNavigatorItem objCopy = new PageNavigatorItem(Name);
 | 
						|
 | 
						|
            this.CopyToItem(objCopy);
 | 
						|
 | 
						|
            return (objCopy);
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// Copies the PageNavigatorItem specific properties to
 | 
						|
        /// new instance of the item
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="copy">New PageNavigatorItem instance</param>
 | 
						|
        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
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Dispose
 | 
						|
        /// </summary>
 | 
						|
        protected override void Dispose(bool disposing)
 | 
						|
        {
 | 
						|
            DisposeClickTimer();
 | 
						|
 | 
						|
            ReleaseBitmap(ref _PreviousPageBitmap);
 | 
						|
            ReleaseBitmap(ref _TodayBitmap);
 | 
						|
            ReleaseBitmap(ref _NextPageBitmap);
 | 
						|
 | 
						|
            base.Dispose(disposing);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Releases the given bitmap
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="bmp">Bitmap to release</param>
 | 
						|
        private void ReleaseBitmap(ref Bitmap bmp)
 | 
						|
        {
 | 
						|
            if (bmp != null)
 | 
						|
            {
 | 
						|
                bmp.Dispose();
 | 
						|
                bmp = null;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion
 | 
						|
    }
 | 
						|
 | 
						|
    #region Enums
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Defines the PageNavigator item parts
 | 
						|
    /// </summary>
 | 
						|
    public enum ePageNavigatorPart
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates no part
 | 
						|
        /// </summary>
 | 
						|
        None,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the PreviousPage button of the control
 | 
						|
        /// </summary>
 | 
						|
        PreviousPage,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the TodayPage button of the control
 | 
						|
        /// </summary>
 | 
						|
        Today,
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// Indicates the NextPage button of the control
 | 
						|
        /// </summary>
 | 
						|
        NextPage,
 | 
						|
    }
 | 
						|
 | 
						|
    #endregion
 | 
						|
 | 
						|
}
 | 
						|
#endif |