175 lines
4.4 KiB
C#

#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
namespace DevComponents.Editors.DateTimeAdv
{
public class NumericHourInput : VisualIntegerInput, IDateTimePartInput
{
#region Private Variables
#endregion
#region Events
#endregion
#region Constructor
/// <summary>
/// Initializes a new instance of the NumericHourInput class.
/// </summary>
public NumericHourInput()
{
UpdateRange();
}
#endregion
#region Internal Implementation
private bool _Is24HourFormat = true;
public bool Is24HourFormat
{
get { return _Is24HourFormat; }
set
{
if (_Is24HourFormat != value)
{
_Is24HourFormat = value;
OnIs24HourFormatChanged();
}
}
}
private void OnIs24HourFormatChanged()
{
if (!_Is24HourFormat && this.Value > 12)
{
this.Value = Value;
}
UpdateRange();
}
private void UpdateRange()
{
if (_Is24HourFormat)
{
this.MinValue = 0;
this.MaxValue = 23;
}
else
{
if (_Period == eHourPeriod.AM)
{
this.MinValue = 1;
this.MaxValue = 12;
}
else
{
this.MinValue = 1;
this.MaxValue = 12;
}
//if (this.Value > this.MaxValue) this.Value = this.MaxValue;
//if (this.Value < this.MinValue) this.Value = this.MinValue;
}
}
protected override void OnValueChanged()
{
if (_Is24HourFormat)
{
if (Value >= 0 && Value <= 12)
this.Period = eHourPeriod.AM;
else
this.Period = eHourPeriod.PM;
}
base.OnValueChanged();
}
private eHourPeriod _Period;
public eHourPeriod Period
{
get { return _Period; }
set
{
if (_Period != value)
{
_Period = value;
if (!_Is24HourFormat)
{
UpdateRange();
this.Value = this.Value;
}
}
}
}
public override int Value
{
get { return base.Value; }
set
{
if (!_Is24HourFormat)
{
if (value == 0)
{
value = 12;
_Period = eHourPeriod.AM;
}
else if (value > 12)
{
_Period = eHourPeriod.PM;
value = value - 12;
}
//else
// _Period = eHourPeriod.AM;
UpdateRange();
}
base.Value = value;
}
}
protected override bool ValidateNewInputStack(string s)
{
if (!_Is24HourFormat && s.Length > 0)
{
int value = 0;
if (int.TryParse(s, out value))
{
if (value > 12 && value < 24 /*|| value == 12 && _Period == eHourPeriod.AM*/)
{
SetInputStack("");
SetInputPosition(0);
this.Value = value;
return false;
}
}
}
return base.ValidateNewInputStack(s);
}
protected override void OnIsEmptyChanged()
{
if (this.IsEmpty)
{
_Period = eHourPeriod.AM;
UpdateRange();
}
base.OnIsEmptyChanged();
}
#endregion
#region IDateTimePartInput Members
#region IDateTimePartInput Members
eDateTimePart IDateTimePartInput.Part
{
get { return eDateTimePart.Hour; }
}
#endregion
#endregion
}
}
#endif