using System; using System.Collections.Generic; using System.Text; using DevComponents.Editors; using DevComponents.Editors.DateTimeAdv; using System.Drawing; namespace DevComponents.DotNetBar { /// /// Defines a attribute which applies an date-time editor to a property when used with AdvPropertyGrid control. Applies to DateTime property types only. /// public class PropertyDateTimeEditor : PropertyValueEditor { #region Implementation /// /// Gets or sets pre-defined format for date-time input. /// public eDateTimePickerFormat Format = eDateTimePickerFormat.Short; /// /// Gets or sets custom format for date-time input. /// public string CustomFormat = ""; /// /// Gets or sets whether empty null/nothing state of the control is allowed. Default value is false. /// public bool AllowEmptyState = false; /// /// Gets or sets whether drop-down button that shows calendar is visible. Default value is true. /// public bool ShowDropDownButton = true; /// /// Gets or sets the minimum date that control accepts. /// public DateTime MinDate = DateTimeGroup.MinDateTime; /// /// Gets or sets the maximum date that control accepts. /// public DateTime MaxDate = DateTimeGroup.MaxDateTime; /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// public PropertyDateTimeEditor(eDateTimePickerFormat format) { Format = format; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// /// public PropertyDateTimeEditor(DateTime minDate, DateTime maxDate) { MinDate = minDate; MaxDate = maxDate; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// /// /// public PropertyDateTimeEditor(eDateTimePickerFormat format, DateTime minDate, DateTime maxDate) { Format = format; MinDate = minDate; MaxDate = maxDate; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// /// /// /// /// /// public PropertyDateTimeEditor(eDateTimePickerFormat format, string customFormat, bool allowEmptyState, bool showDropDownButton, DateTime minDate, DateTime maxDate) { Format = format; CustomFormat = customFormat; AllowEmptyState = allowEmptyState; ShowDropDownButton = showDropDownButton; MinDate = minDate; MaxDate = maxDate; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// /// public PropertyDateTimeEditor(eDateTimePickerFormat format, bool allowEmptyState) { Format = format; AllowEmptyState = allowEmptyState; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// public PropertyDateTimeEditor(string customFormat) { CustomFormat = customFormat; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// /// /// public PropertyDateTimeEditor(string customFormat, bool allowEmptyState) { CustomFormat = customFormat; AllowEmptyState = allowEmptyState; } /// /// Initializes a new instance of the PropertyDateTimeEditor class. /// public PropertyDateTimeEditor() { } public override IPropertyValueEditor CreateEditor(System.ComponentModel.PropertyDescriptor propertyDescriptor, object targetObject) { if (propertyDescriptor.PropertyType != typeof(DateTime) && propertyDescriptor.PropertyType != typeof(DateTime?)) throw new InvalidOperationException("PropertyDateTimeEditor works only with DateTime type properties"); DateTimeValueEditor editor = new DateTimeValueEditor(); editor.AutoBorderSize = 1; if (!string.IsNullOrEmpty(CustomFormat)) { editor.Format = eDateTimePickerFormat.Custom; editor.CustomFormat = CustomFormat; } else editor.Format = Format; editor.AllowEmptyState = AllowEmptyState; editor.BackgroundStyle.Class = ""; editor.BackgroundStyle.BackColor = Color.White; editor.MinDate = this.MinDate; editor.MaxDate = this.MaxDate; if (AllowEmptyState) { editor.ButtonClear.Visible = true; editor.ButtonDropDown.DisplayPosition = 1; } editor.Height = Dpi.Height14; editor.ButtonDropDown.Visible = ShowDropDownButton; return editor; } #endregion #region DateTimeValueEditor private class DateTimeValueEditor : DateTimeInput, IPropertyValueEditor { #region IPropertyValueEditor Members public System.Drawing.Font EditorFont { get { return this.Font; } set { this.Font = value; } } public bool IsEditorFocused { get { return this.Focused; } } public void FocusEditor() { this.Focus(); } public object EditValue { get { return this.ValueObject; } set { if (value == null) this.ValueObject = null; else if (this.Value != (DateTime)value) this.Value = (DateTime)value; } } protected override void OnValueChanged(EventArgs e) { OnEditValueChanged(e); base.OnValueChanged(e); } private void OnEditValueChanged(EventArgs e) { EventHandler ev = EditValueChanged; if (ev != null) ev(this, e); } public event EventHandler EditValueChanged; #endregion } #endregion } }