#if FRAMEWORK20
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
namespace DevComponents.DotNetBar.Controls
{
    /// 
    /// Represents the PageNavigator control
    /// 
    [ToolboxBitmap(typeof(PageNavigator), "PageNavigator.PageNavigator.ico"), ToolboxItem(true)]
    [DefaultEvent("ValueChanged"), ComVisible(false)] //, Designer(typeof(Design.PageNavigatorDesigner))]
    public class PageNavigator : BaseItemControl
    {
        #region Private Variables
        private PageNavigatorItem _PageNavItem;     // Navigation item
        #endregion
        #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
        /// 
        /// Constructor
        /// 
        public PageNavigator()
        {
            _PageNavItem = new PageNavigatorItem();
            _PageNavItem.Style = eDotNetBarStyle.StyleManagerControlled;
            this.Size = _PageNavItem.Size;
            this.HostItem = _PageNavItem;
            HookEvents(true);
        }
        #region DefaultSize
        /// 
        /// DefaultSize
        /// 
        protected override Size DefaultSize
        {
            get
            {
                // Set a default size based upon
                // the current object layout orientation
                int m = SystemInformation.VerticalScrollBarWidth;
                int n = m * 3;
                if (_PageNavItem != null &&
                    _PageNavItem.Orientation == eOrientation.Horizontal)
                {
                    return (new Size(n, m));
                }
                return (new Size(m, n));
            }
        }
        #endregion
        #region Public properties
        #region Orientation
        /// 
        /// Gets or sets the layout orientation. Default value is horizontal.
        /// 
        [DefaultValue(eOrientation.Horizontal), Category("Appearance")]
        [Description("Indicates control layout orientation.")]
        public eOrientation Orientation
        {
            get { return (_PageNavItem.Orientation); }
            set
            {
                if (_PageNavItem.Orientation != value)
                {
                    _PageNavItem.Orientation = value;
                    this.RecalcLayout();
                }
            }
        }
        #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 (_PageNavItem.PreviousPageTooltip); }
            set { _PageNavItem.PreviousPageTooltip = value; }
        }
        #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 (_PageNavItem.TodayTooltip); }
            set { _PageNavItem.TodayTooltip = value; }
        }
        #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 (_PageNavItem.NextPageTooltip); }
            set { _PageNavItem.NextPageTooltip = value; }
        }
        #endregion
        #region Style
        /// 
        /// Gets/Sets the visual style for the control.
        /// 
        [Browsable(false), DefaultValue(eDotNetBarStyle.StyleManagerControlled)]
        public override eDotNetBarStyle Style
        {
            get
            {
                return base.Style;
            }
            set
            {
                base.Style = value;
            }
        }
        #endregion
        #endregion
        #region HookEvents
        /// 
        /// Hooks or unhooks our control events
        /// 
        /// true to hook, false to unhook
        private void HookEvents(bool hook)
        {
            if (hook == true)
            {
                _PageNavItem.NavigatePreviousPage += PageNavNavigatePreviousPage;
                _PageNavItem.NavigateNextPage += PageNavNavigateNextPage;
                _PageNavItem.NavigateToday += PageNavNavigateToday;
            }
            else
            {
                _PageNavItem.NavigatePreviousPage -= PageNavNavigatePreviousPage;
                _PageNavItem.NavigateNextPage -= PageNavNavigateNextPage;
                _PageNavItem.NavigateToday -= PageNavNavigateToday;
            }
        }
        #endregion
        #region Event handling
        #region PageNav_NavigatePreviousPage
        /// 
        /// Handles NavigatePreviousPage events
        /// 
        /// 
        /// 
        void PageNavNavigatePreviousPage(object sender, EventArgs e)
        {
            OnNavigatePreviousPage();
        }
        /// 
        /// Raises the NavigatePreviousPage event
        /// 
        private void OnNavigatePreviousPage()
        {
            if (NavigatePreviousPage != null)
                NavigatePreviousPage(this, EventArgs.Empty);
        }
        #endregion
        #region PageNav_NavigateToday
        /// 
        /// Handles NavigateToday events
        /// 
        /// 
        /// 
        void PageNavNavigateToday(object sender, EventArgs e)
        {
            OnNavigateToday();
        }
        /// 
        /// Raises the NavigateToday event
        /// 
        private void OnNavigateToday()
        {
            if (NavigateToday != null)
                NavigateToday(this, EventArgs.Empty);
        }
        #endregion
        #region PageNav_NavigateNextPage
        /// 
        /// Handles NavigateNextPage events
        /// 
        /// 
        /// 
        void PageNavNavigateNextPage(object sender, EventArgs e)
        {
            OnNavigateNextPage();
        }
        /// 
        /// Raises the NavigateNextPage event
        /// 
        private void OnNavigateNextPage()
        {
            if (NavigateNextPage != null)
                NavigateNextPage(this, EventArgs.Empty);
        }
        #endregion
        #endregion
        #region RecalcLayout
        /// 
        /// Forces the button to perform internal layout.
        /// 
        public override void RecalcLayout()
        {
            base.RecalcLayout();
        }
        #endregion
        #region Dispose
        /// 
        /// Dispose
        /// 
        /// 
        protected override void Dispose(bool disposing)
        {
            if (disposing == true)
                HookEvents(false);
            base.Dispose(disposing);
        }
        #endregion
    }
    #region enums
    /// 
    /// PageNavigator buttons
    /// 
    public enum PageNavigatorButton
    {
        /// 
        /// Previous page
        /// 
        PreviousPage,
        /// 
        /// Today
        /// 
        Today,
        /// 
        /// Next page
        /// 
        NextPage
    }
    #endregion
}
#endif