175 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
 |