326 lines
8.6 KiB
C#

#if FRAMEWORK20
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
namespace DevComponents.DotNetBar.Controls
{
/// <summary>
/// Represents the PageNavigator control
/// </summary>
[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
/// <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
/// <summary>
/// Constructor
/// </summary>
public PageNavigator()
{
_PageNavItem = new PageNavigatorItem();
_PageNavItem.Style = eDotNetBarStyle.StyleManagerControlled;
this.Size = _PageNavItem.Size;
this.HostItem = _PageNavItem;
HookEvents(true);
}
#region DefaultSize
/// <summary>
/// DefaultSize
/// </summary>
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
/// <summary>
/// Gets or sets the layout orientation. Default value is horizontal.
/// </summary>
[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
/// <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 (_PageNavItem.PreviousPageTooltip); }
set { _PageNavItem.PreviousPageTooltip = value; }
}
#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 (_PageNavItem.TodayTooltip); }
set { _PageNavItem.TodayTooltip = value; }
}
#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 (_PageNavItem.NextPageTooltip); }
set { _PageNavItem.NextPageTooltip = value; }
}
#endregion
#region Style
/// <summary>
/// Gets/Sets the visual style for the control.
/// </summary>
[Browsable(false), DefaultValue(eDotNetBarStyle.StyleManagerControlled)]
public override eDotNetBarStyle Style
{
get
{
return base.Style;
}
set
{
base.Style = value;
}
}
#endregion
#endregion
#region HookEvents
/// <summary>
/// Hooks or unhooks our control events
/// </summary>
/// <param name="hook">true to hook, false to unhook</param>
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
/// <summary>
/// Handles NavigatePreviousPage events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageNavNavigatePreviousPage(object sender, EventArgs e)
{
OnNavigatePreviousPage();
}
/// <summary>
/// Raises the NavigatePreviousPage event
/// </summary>
private void OnNavigatePreviousPage()
{
if (NavigatePreviousPage != null)
NavigatePreviousPage(this, EventArgs.Empty);
}
#endregion
#region PageNav_NavigateToday
/// <summary>
/// Handles NavigateToday events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageNavNavigateToday(object sender, EventArgs e)
{
OnNavigateToday();
}
/// <summary>
/// Raises the NavigateToday event
/// </summary>
private void OnNavigateToday()
{
if (NavigateToday != null)
NavigateToday(this, EventArgs.Empty);
}
#endregion
#region PageNav_NavigateNextPage
/// <summary>
/// Handles NavigateNextPage events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageNavNavigateNextPage(object sender, EventArgs e)
{
OnNavigateNextPage();
}
/// <summary>
/// Raises the NavigateNextPage event
/// </summary>
private void OnNavigateNextPage()
{
if (NavigateNextPage != null)
NavigateNextPage(this, EventArgs.Empty);
}
#endregion
#endregion
#region RecalcLayout
/// <summary>
/// Forces the button to perform internal layout.
/// </summary>
public override void RecalcLayout()
{
base.RecalcLayout();
}
#endregion
#region Dispose
/// <summary>
/// Dispose
/// </summary>
/// <param name="disposing"></param>
protected override void Dispose(bool disposing)
{
if (disposing == true)
HookEvents(false);
base.Dispose(disposing);
}
#endregion
}
#region enums
/// <summary>
/// PageNavigator buttons
/// </summary>
public enum PageNavigatorButton
{
/// <summary>
/// Previous page
/// </summary>
PreviousPage,
/// <summary>
/// Today
/// </summary>
Today,
/// <summary>
/// Next page
/// </summary>
NextPage
}
#endregion
}
#endif