#if FRAMEWORK20
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Design;
using System.ComponentModel;
using System.Windows.Forms.Design;
using System.Windows.Forms;
using DevComponents.DotNetBar.Validator;
namespace DevComponents.DotNetBar.Design
{
    public class ValidationExpressionEditor : UITypeEditor
    {
        #region Implementation
        private IWindowsFormsEditorService _EditorService = null;
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            if (context != null
                && context.Instance != null
                && provider != null)
            {
                ValidatorBase es = value as ValidatorBase;
                _EditorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService;
                if (_EditorService != null)
                {
                    ListBox list = new ListBox();
                    list.Items.Add("At least 5 characters");
                    list.Items.Add("Phone Number");
                    list.Items.Add("E-mail Address");
                    list.Items.Add("ZIP Code");
                    list.Items.Add("Social Security Number");
                    list.Items.Add("URL");
                    list.Items.Add("First, Last Name");
                    list.SelectedIndexChanged += new EventHandler(ValidatorListSelectedIndexChanged);
                    _EditorService.DropDownControl(list);
                    if (list.SelectedIndex < 0) return es;
                    string regExp = "";
                    if (list.SelectedIndex == 1) // Phone Number
                        regExp = @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$";
                    else if (list.SelectedIndex == 2) // Email Address
                        regExp = @"^([0-9a-zA-Z]([-\.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$";
                    else if (list.SelectedIndex == 3) // ZIP Code
                        regExp = @"^(\d{5}-\d{4}|\d{5}|\d{9})$|^([a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d)$";
                    else if (list.SelectedIndex == 4) // SSN
                        regExp = @"^\d{3}-\d{2}-\d{4}$";
                    else if (list.SelectedIndex == 5) // URL
                        regExp = @"^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$";
                    else if (list.SelectedIndex == 6) // First Name, Last Name
                        regExp = @"^[a-zA-Z''-'\s]{1,40}$";
                    else // At least 5 characters
                        regExp = @"\S{5,5}";
                    return regExp;
                    
                }
                return "";
            }
            return "";
        }
        private void ValidatorListSelectedIndexChanged(object sender, EventArgs e)
        {
            if (_EditorService != null)
                _EditorService.CloseDropDown();
        }
        /// 
        /// Gets the editor style used by the EditValue method.
        /// 
        /// An ITypeDescriptorContext that can be used to gain additional context information.
        /// A UITypeEditorEditStyle value that indicates the style of editor used by EditValue. If the UITypeEditor does not support this method, then GetEditStyle will return None.
        /// 
        public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
        {
            if (context != null && context.Instance != null)
            {
                return UITypeEditorEditStyle.DropDown;
            }
            return base.GetEditStyle(context);
        }
        #endregion
    }
}
#endif