151 lines
4.1 KiB
C#
151 lines
4.1 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Globalization;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.Editors.DateTimeAdv
|
|
{
|
|
public class MonthNameInput : VisualStringListInput, IDateTimePartInput
|
|
{
|
|
#region Private Variables
|
|
private List<string> _Months = null;
|
|
private int _MinValue = 1;
|
|
private int _MaxValue = 12;
|
|
#endregion
|
|
|
|
#region Events
|
|
#endregion
|
|
|
|
#region Constructor
|
|
#endregion
|
|
|
|
#region Internal Implementation
|
|
protected override List<string> GetItems()
|
|
{
|
|
if (this.Items.Count != 12)
|
|
{
|
|
if (_Months == null)
|
|
{
|
|
_Months = new List<string>(12);
|
|
if (_UseAbbreviatedNames)
|
|
_Months.AddRange(DateTimeInput.GetActiveCulture().DateTimeFormat.AbbreviatedMonthNames);
|
|
else
|
|
_Months.AddRange(DateTimeInput.GetActiveCulture().DateTimeFormat.MonthNames);
|
|
if (_Months.Count == 13 && _Months[12] == "") _Months.RemoveAt(12);
|
|
}
|
|
return _Months;
|
|
}
|
|
return base.GetItems();
|
|
}
|
|
|
|
protected override bool ValidateNewInputStack(string s)
|
|
{
|
|
if (s.Length > 0)
|
|
{
|
|
// Parse also numeric input and map it to the month name
|
|
int month = 0;
|
|
int.TryParse(s, out month);
|
|
if (month > 0 && month >= _MinValue && month <= _MaxValue)
|
|
{
|
|
List<string> items = GetItems();
|
|
this.LastMatch = items[month - 1];
|
|
this.LastValidatedInputStack = s;
|
|
if (month > 1)
|
|
this.LastMatchComplete = true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
bool b = base.ValidateNewInputStack(s);
|
|
if (b && LastValidatedInputStack.Length > 0)
|
|
{
|
|
List<string> items = GetItems();
|
|
int index = items.IndexOf(LastMatch) + 1;
|
|
if (index < _MinValue || index > _MaxValue)
|
|
return false;
|
|
}
|
|
|
|
return b;
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region IDateTimePartInput Members
|
|
|
|
int IDateTimePartInput.Value
|
|
{
|
|
get
|
|
{
|
|
return this.SelectedIndex + 1;
|
|
}
|
|
set
|
|
{
|
|
this.SelectedIndex = value - 1;
|
|
}
|
|
}
|
|
|
|
int IDateTimePartInput.MinValue
|
|
{
|
|
get
|
|
{
|
|
return _MinValue;
|
|
}
|
|
set
|
|
{
|
|
if (_MinValue != value)
|
|
{
|
|
_MinValue = value;
|
|
if (!this.IsEmpty && SelectedIndex < _MinValue)
|
|
this.SelectedIndex = _MinValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
int IDateTimePartInput.MaxValue
|
|
{
|
|
get
|
|
{
|
|
return _MaxValue;
|
|
}
|
|
set
|
|
{
|
|
if (_MaxValue != value)
|
|
{
|
|
_MaxValue = value;
|
|
if (!this.IsEmpty && SelectedIndex > _MaxValue)
|
|
this.SelectedIndex = _MaxValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
eDateTimePart IDateTimePartInput.Part
|
|
{
|
|
get { return eDateTimePart.Month; }
|
|
}
|
|
|
|
private bool _UseAbbreviatedNames = false;
|
|
/// <summary>
|
|
/// Gets or sets whether abbreviated month names are used for display instead of full month names. Default value is false.
|
|
/// </summary>
|
|
[DefaultValue(false)]
|
|
public bool UseAbbreviatedNames
|
|
{
|
|
get { return _UseAbbreviatedNames; }
|
|
set
|
|
{
|
|
if (_UseAbbreviatedNames != value)
|
|
{
|
|
_UseAbbreviatedNames = value;
|
|
_Months = null;
|
|
InvalidateArrange();
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
#endif
|
|
|