using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Mesnac.Controls.Base;
using System.Drawing;

namespace Mesnac.Controls.Default
{
    [ToolboxBitmap(typeof(DateTimePicker))]
    public partial class MCDateTimePicker : DateTimePicker, IBaseControl
    {
        #region 字段定义

        private bool _mcVisible = true; //保存可见性
        private bool _mcEnabled = true; //保存可用性
        private bool _isValid = true; //允许
        private bool _isEventValid = true;  //保存事件有效性
        private List<DesignAction> _valueChangedList = new List<DesignAction>();

        #endregion

        #region 构造方法

        public MCDateTimePicker()
        {
            InitializeComponent();
        }

        public MCDateTimePicker(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        #endregion

        #region 事件定义
        
        public List<DesignAction> ValueChangedList
        {
            get { return _valueChangedList; }
            set { _valueChangedList = value; }
        }
        #endregion

        #region 接口成员实现

        public string MCKey
        {
            get;
            set;
        }

        public object MCValue
        {
            get
            {
                if (String.IsNullOrEmpty(this.CustomFormat))
                {
                    return this.Value;
                }
                else
                {
                    DateTime dt = DateTime.Now;
                    if (DateTime.TryParse(this.Value.ToString(), out dt))
                    {
                        try
                        {
                            string value = String.Format("{0:" + this.CustomFormat + "}", dt);
                            return value;
                        }
                        catch
                        {
                            return this.Value;
                        }
                    }
                    else
                    {
                        return this.Value;
                    }
                }
            }
            set
            {
                this.Value = value == null ? DateTime.Now : Convert.ToDateTime(value);
            }
        }

        public IBaseControl MCRoot
        {
            get;
            set;
        }
        [TypeConverter(typeof(DataSourceConverter))]

        [Description("数据连接"), Category("数据")]
        public string MCDataSourceID
        {
            get;
            set;
        }

        public MCDataSource MCDataSource
        {
            get;
            set;
        }
        [Description("是否为数据库控件"), Category("数据")]
        public bool IsDbControl
        {
            get;
            set;
        }
        [Description("初始化SQL"), Category("数据")]
        public string InitDataSource
        {
            get;
            set;
        }
        [Description("执行SQL"), Category("数据")]
        public string ActionDataSource
        {
            get;
            set;
        }
        [Description("绑定数据源"), Category("数据")]
        public object BindDataSource
        {
            get;
            set;
        }
        [Description("操作类型"), Category("数据")]
        public DbOptionTypes DbOptionType
        {
            get;
            set;
        }
        [Description("是否可见"), Category("行为")]
        public bool MCVisible
        {
            get
            {
                return this._mcVisible;
            }
            set
            {
                this._mcVisible = value == null ? true : value;
                if (this.Site.DesignMode)
                {
                    this.Visible = true;
                }
                else
                {
                    this.Visible = this._mcVisible;
                }
            }
        }
        [Description("是否可用"), Category("行为")]
        public bool MCEnabled
        {
            get
            {
                return this._mcEnabled;
            }
            set
            {
                this._mcEnabled = value == null ? true : value;
                if (this.Site.DesignMode)
                {
                    this.Enabled = true;
                }
                else
                {
                    this.Enabled = this._mcEnabled;
                }
            }
        }

        public bool IsValid
        {
            get { return _isValid; }
            set { _isValid = value; }
        }

        public bool IsEventValid
        {
            get { return this._isEventValid; }
            set { this._isEventValid = value; }
        }

        #endregion
    }
}