354 lines
12 KiB
C#
354 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using DevComponents.DotNetBar;
|
|
using System.Windows.Forms;
|
|
using System.Drawing;
|
|
using System.Globalization;
|
|
|
|
namespace DevComponents.Editors.DateTimeAdv
|
|
{
|
|
/// <summary>
|
|
/// Represents a control that enables the user to select time using visual time display.
|
|
/// </summary>
|
|
[ToolboxBitmap(typeof(DotNetBarManager), "TimeSelector.ico"), ToolboxItem(true), Designer("DevComponents.DotNetBar.Design.TimeSelectorDesigner, DevComponents.DotNetBar.Design, Version=14.1.0.37, Culture=neutral, PublicKeyToken=90f470f34c89ccaf")]
|
|
[DefaultEvent("SelectedTimeChanged"), DefaultProperty("SelectedTime")]
|
|
public class TimeSelector : ItemControl
|
|
{
|
|
#region Private Variables
|
|
private TimeSelectorItem _TimeSelector = null;
|
|
#endregion
|
|
|
|
#region Events
|
|
/// <summary>
|
|
/// Occurs after SelectedTime changes.
|
|
/// </summary>
|
|
[Description("Occurs after SelectedTime changes.")]
|
|
public event EventHandler SelectedTimeChanged;
|
|
/// <summary>
|
|
/// Raises SelectedTimeChanged event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnSelectedTimeChanged(EventArgs e)
|
|
{
|
|
EventHandler handler = SelectedTimeChanged;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
/// <summary>
|
|
/// Occurs when OK button is clicked.
|
|
/// </summary>
|
|
[Description("Occurs when OK button is clicked.")]
|
|
public event EventHandler OkClick;
|
|
/// <summary>
|
|
/// Raises OkClick event.
|
|
/// </summary>
|
|
/// <param name="e">Provides event arguments.</param>
|
|
protected virtual void OnOkClick(EventArgs e)
|
|
{
|
|
EventHandler handler = OkClick;
|
|
if (handler != null)
|
|
handler(this, e);
|
|
}
|
|
#endregion
|
|
|
|
#region Constructor
|
|
/// <summary>
|
|
/// Initializes a new instance of the MonthCalendarAdv class.
|
|
/// </summary>
|
|
public TimeSelector()
|
|
{
|
|
this.SetStyle(ControlStyles.Selectable, false);
|
|
|
|
_TimeSelector = new TimeSelectorItem();
|
|
_TimeSelector.GlobalItem = false;
|
|
_TimeSelector.ContainerControl = this;
|
|
_TimeSelector.Stretch = false;
|
|
_TimeSelector.Displayed = true;
|
|
_TimeSelector.Style = eDotNetBarStyle.StyleManagerControlled;
|
|
this.ColorScheme.Style = eDotNetBarStyle.StyleManagerControlled;
|
|
_TimeSelector.SetOwner(this);
|
|
|
|
_TimeSelector.SelectedTimeChanged += new EventHandler(TimeSelector_SelectedTimeChanged);
|
|
_TimeSelector.OkClick += new EventHandler(TimeSelector_OkClick);
|
|
this.SetBaseItemContainer(_TimeSelector);
|
|
}
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
void TimeSelector_OkClick(object sender, EventArgs e)
|
|
{
|
|
OnOkClick(e);
|
|
}
|
|
|
|
void TimeSelector_SelectedTimeChanged(object sender, EventArgs e)
|
|
{
|
|
OnSelectedTimeChanged(e);
|
|
}
|
|
|
|
internal bool GetDesignModeInternal()
|
|
{
|
|
return DesignMode;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on OK button.
|
|
/// </summary>
|
|
[DefaultValue("OK"), Category("Appearance"), Description("Indicates text displayed on OK button."), Localizable(true)]
|
|
public string OkText
|
|
{
|
|
get { return _TimeSelector.OkText; }
|
|
set { _TimeSelector.OkText = value; }
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets whether Ok button is visible.
|
|
/// </summary>
|
|
[DefaultValue(true), Category("Appearance"), Description("Indicates whether Ok button is visible.")]
|
|
public bool OkButtonVisible
|
|
{
|
|
get { return _TimeSelector.OkButtonVisible; }
|
|
set
|
|
{
|
|
_TimeSelector.OkButtonVisible = value;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the selected date time.
|
|
/// </summary>
|
|
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
|
|
public DateTime SelectedDateTime
|
|
{
|
|
get
|
|
{
|
|
return _TimeSelector.SelectedDateTime;
|
|
}
|
|
set
|
|
{
|
|
_TimeSelector.SelectedDateTime = value;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets selected time. Returns TimeSpan.Zero if there is no time selected.
|
|
/// </summary>
|
|
[Category("Data"), Description("Indicates selected time.")]
|
|
public TimeSpan SelectedTime
|
|
{
|
|
get { return _TimeSelector.SelectedTime; }
|
|
set
|
|
{
|
|
_TimeSelector.SelectedTime = value;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Returns whether property should be serialized.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public bool ShouldSerializeSelectedTime()
|
|
{
|
|
return _TimeSelector.ShouldSerializeSelectedTime();
|
|
}
|
|
/// <summary>
|
|
/// Resets property to default value.
|
|
/// </summary>
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public void ResetSelectedTime()
|
|
{
|
|
_TimeSelector.ResetSelectedTime();
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the time format used to present time by the selector.
|
|
/// </summary>
|
|
[DefaultValue(eTimeSelectorFormat.System), Category("Appearance"), Description("Indicates time format used to present time by the selector."), Localizable(true)]
|
|
public eTimeSelectorFormat TimeFormat
|
|
{
|
|
get { return _TimeSelector.TimeFormat; }
|
|
set
|
|
{
|
|
_TimeSelector.TimeFormat = value;
|
|
_PreferredSize = Size.Empty;
|
|
AdjustSize();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the format for the 12 Hour Time Display.
|
|
/// </summary>
|
|
[DefaultValue(TimeSelectorItem.DefaultTimeFormat12H), Category("Data"), Description("Indicates format for the 12 Hour Time Display."), Localizable(true)]
|
|
public string TimeFormat12H
|
|
{
|
|
get { return _TimeSelector.TimeFormat12H; }
|
|
set
|
|
{
|
|
_TimeSelector.TimeFormat12H = value;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the format for the 24 Hour Time Display.
|
|
/// </summary>
|
|
[DefaultValue(TimeSelectorItem.DefaultTimeFormat24H), Category("Data"), Description("Indicates format for the 24 Hour Time Display."), Localizable(true)]
|
|
public string TimeFormat24H
|
|
{
|
|
get { return _TimeSelector.TimeFormat24H; }
|
|
set
|
|
{
|
|
_TimeSelector.TimeFormat24H = value;
|
|
}
|
|
}
|
|
|
|
private Size _PreferredSize = Size.Empty;
|
|
/// <summary>
|
|
/// Invalidates control auto-size and resizes the control if AutoSize is set to true.
|
|
/// </summary>
|
|
public void InvalidateAutoSize()
|
|
{
|
|
_PreferredSize = Size.Empty;
|
|
AdjustSize();
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override string Text
|
|
{
|
|
get
|
|
{
|
|
return base.Text;
|
|
}
|
|
set
|
|
{
|
|
base.Text = value;
|
|
}
|
|
}
|
|
#if FRAMEWORK20
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control.
|
|
/// </summary>
|
|
[Browsable(true), DefaultValue(false), EditorBrowsable(EditorBrowsableState.Always), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
|
|
public override bool AutoSize
|
|
{
|
|
get
|
|
{
|
|
return base.AutoSize;
|
|
}
|
|
set
|
|
{
|
|
if (this.AutoSize != value)
|
|
{
|
|
base.AutoSize = value;
|
|
AdjustSize();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void AdjustSize()
|
|
{
|
|
if (this.AutoSize)
|
|
{
|
|
this.Size = base.PreferredSize;
|
|
}
|
|
}
|
|
|
|
protected override void OnFontChanged(EventArgs e)
|
|
{
|
|
InvalidateAutoSize();
|
|
base.OnFontChanged(e);
|
|
}
|
|
|
|
public override Size GetPreferredSize(Size proposedSize)
|
|
{
|
|
if (!_PreferredSize.IsEmpty) return _PreferredSize;
|
|
|
|
if (!BarFunctions.IsHandleValid(this))
|
|
return base.GetPreferredSize(proposedSize);
|
|
|
|
ElementStyle style = this.GetBackgroundStyle();
|
|
|
|
_TimeSelector.RecalcSize();
|
|
_PreferredSize = _TimeSelector.Size;
|
|
if (style != null)
|
|
{
|
|
_PreferredSize.Width += ElementStyleLayout.HorizontalStyleWhiteSpace(style);
|
|
_PreferredSize.Height += ElementStyleLayout.VerticalStyleWhiteSpace(style);
|
|
}
|
|
|
|
return _PreferredSize;
|
|
}
|
|
|
|
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
|
|
{
|
|
if (this.AutoSize)
|
|
{
|
|
Size preferredSize = base.PreferredSize;
|
|
width = preferredSize.Width;
|
|
height = preferredSize.Height;
|
|
}
|
|
base.SetBoundsCore(x, y, width, height, specified);
|
|
}
|
|
|
|
protected override void OnHandleCreated(EventArgs e)
|
|
{
|
|
if (this.AutoSize)
|
|
this.AdjustSize();
|
|
base.OnHandleCreated(e);
|
|
}
|
|
|
|
[Browsable(false)]
|
|
public override bool ThemeAware
|
|
{
|
|
get
|
|
{
|
|
return base.ThemeAware;
|
|
}
|
|
set
|
|
{
|
|
base.ThemeAware = value;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Indicates the type of the selector used to select time.
|
|
/// </summary>
|
|
[DefaultValue(eTimeSelectorType.TouchStyle), Category("Appearance"), Description("Indicates the type of the selector used to select time.")]
|
|
public eTimeSelectorType SelectorType
|
|
{
|
|
get { return _TimeSelector.SelectorType; }
|
|
set
|
|
{
|
|
_TimeSelector.SelectorType = value;
|
|
_PreferredSize = Size.Empty;
|
|
AdjustSize();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on Clear button only when MonthCalendarStyle is used.
|
|
/// </summary>
|
|
[DefaultValue("Clear"), Category("Appearance"), Description("Indicates text displayed on Clear button only when MonthCalendarStyle is used."), Localizable(true)]
|
|
public string ClearText
|
|
{
|
|
get { return _TimeSelector.ClearText; }
|
|
set { _TimeSelector.ClearText = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on Hour label.
|
|
/// </summary>
|
|
[DefaultValue("Hour"), Category("Appearance"), Description("Indicates text displayed on Hour label."), Localizable(true)]
|
|
public string HourText
|
|
{
|
|
get { return _TimeSelector.HourText; }
|
|
set { _TimeSelector.HourText = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets the text displayed on Minute label.
|
|
/// </summary>
|
|
[DefaultValue("Minute"), Category("Appearance"), Description("Indicates text displayed on Minute label."), Localizable(true)]
|
|
public string MinuteText
|
|
{
|
|
get { return _TimeSelector.MinuteText; }
|
|
set { _TimeSelector.MinuteText = value; }
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|