#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
namespace DevComponents.DotNetBar.Validator
{
    public class CustomValidator : ValidatorBase
    {
        #region Events
        public event ValidateValueEventHandler ValidateValue;
        #endregion
        #region Constructors
        /// 
        /// Initializes a new instance of the CustomValidator class.
        /// 
        public CustomValidator()
        {
        }
        #endregion
        #region Implementation
        public override bool Validate(System.Windows.Forms.Control input)
        {
            ValidateValueEventArgs e = new ValidateValueEventArgs(input);
            OnValidateValue(e);
            if (this.SuperValidator != null)
                this.SuperValidator.InvokeCustomValidatorValidateValue(this, e);
            this.LastValidationResult = e.IsValid;
            return LastValidationResult;
        }
        protected virtual void OnValidateValue(ValidateValueEventArgs e)
        {
            ValidateValueEventHandler h = ValidateValue;
            if (h != null) h(this, e);
        }
        private object _Tag;
        /// 
        /// Gets or sets custom data associated with the validator
        /// 
        [DefaultValue((string)null), Localizable(false), TypeConverter(typeof(StringConverter)), Category("Data"), Description("Custom data associated with the validator")]
        public object Tag
        {
            get { return _Tag; }
            set { _Tag = value; }
        }
        #endregion
    }
    /// 
    /// Defines delegate for CustomValidator ValidateValue event.
    /// 
    /// Sender
    /// Event arguments
    public delegate void ValidateValueEventHandler(object sender, ValidateValueEventArgs e);
    public class ValidateValueEventArgs : EventArgs
    {
        /// 
        /// Gets the reference to the control to validate.
        /// 
        public readonly Control ControlToValidate;
        /// 
        /// Gets or sets whether control's value is valid.
        /// 
        public bool IsValid = false;
        /// 
        /// Initializes a new instance of the ValidateValueEventArgs class.
        /// 
        /// Control to validate.
        public ValidateValueEventArgs(Control controlToValidate)
        {
            ControlToValidate = controlToValidate;
        }
    }
}
#endif