using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Mesnac.Controls.ChemicalWeighing
{
    [DefaultEvent("OnSwitchChanged")]
    [Description("一个开关控件,可以在开关两种状态之间进行选择")]
    public partial class HslSwitch : UserControl
    {
        public HslSwitch()
        {
            InitializeComponent();

            this.sf = new StringFormat();
            this.sf.Alignment = StringAlignment.Center;
            this.sf.LineAlignment = StringAlignment.Center;
            base.SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);
            base.SetStyle(ControlStyles.ResizeRedraw, true);
            base.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

            base.AutoScaleMode = AutoScaleMode.None;
            this.BackColor = Color.Transparent;
            this.Cursor = Cursors.Hand;
            base.Name = "HslSwitch";
            base.ResumeLayout(false);
        }


        /// <summary>
        /// 开关按钮发生变化的事件
        /// </summary>
        // Token: 0x14000009 RID: 9
        // (add) Token: 0x06000775 RID: 1909 RVA: 0x00042DC0 File Offset: 0x00040FC0
        // (remove) Token: 0x06000776 RID: 1910 RVA: 0x00042DF8 File Offset: 0x00040FF8
        [Category("Action")]
        [Description("点击了按钮开发后触发")]
        
        public event Action<object, bool> OnSwitchChanged;

        // Token: 0x06000777 RID: 1911 RVA: 0x00042E30 File Offset: 0x00041030
        private Point GetCenterPoint(int width, int height)
        {
            bool flag = height > width;
            Point result;
            if (flag)
            {
                result = new Point(width / 2, width / 2);
            }
            else
            {
                result = new Point(height / 2, height / 2);
            }
            return result;
        }

        /// <summary>
        /// 获取或设置控件的背景色
        /// </summary>
        // Token: 0x17000254 RID: 596
        // (get) Token: 0x06000778 RID: 1912 RVA: 0x00042E65 File Offset: 0x00041065
        // (set) Token: 0x06000779 RID: 1913 RVA: 0x00042E6D File Offset: 0x0004106D
        [Browsable(true)]
        [Description("获取或设置控件的背景色")]
        [Category("HslControls")]
        [DefaultValue(typeof(Color), "Transparent")]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public override Color BackColor
        {
            get
            {
                return base.BackColor;
            }
            set
            {
                base.BackColor = value;
            }
        }

        /// <summary>
        /// 获取或设置开关按钮的背景色
        /// </summary>
        // Token: 0x17000255 RID: 597
        // (get) Token: 0x0600077A RID: 1914 RVA: 0x00042E78 File Offset: 0x00041078
        // (set) Token: 0x0600077B RID: 1915 RVA: 0x00042E90 File Offset: 0x00041090
        [Browsable(true)]
        [Description("获取或设置开关按钮的背景色")]
        [Category("HslControls")]
        [DefaultValue(typeof(Color), "DimGray")]
        public Color SwitchBackground
        {
            get
            {
                return this.color_switch_background;
            }
            set
            {
                this.color_switch_background = value;
                Brush brush = this.brush_switch_background;
                if (brush != null)
                {
                    brush.Dispose();
                }
                Pen pen = this.pen_switch_background;
                if (pen != null)
                {
                    pen.Dispose();
                }
                this.brush_switch_background = new SolidBrush(this.color_switch_background);
                this.pen_switch_background = new Pen(this.color_switch_background, 2f);
                base.Invalidate();
            }
        }

        /// <summary>
        /// 获取或设置开关按钮的前景色
        /// </summary>
        // Token: 0x17000256 RID: 598
        // (get) Token: 0x0600077C RID: 1916 RVA: 0x00042EF8 File Offset: 0x000410F8
        // (set) Token: 0x0600077D RID: 1917 RVA: 0x00042F10 File Offset: 0x00041110
        [Browsable(true)]
        [Description("获取或设置开关按钮的前景色")]
        [Category("HslControls")]
        [DefaultValue(typeof(Color), "[36, 36, 36]")]
        public Color SwitchForeground
        {
            get
            {
                return this.color_switch_foreground;
            }
            set
            {
                this.color_switch_foreground = value;
                this.brush_switch_foreground = new SolidBrush(this.color_switch_foreground);
                base.Invalidate();
            }
        }

        /// <summary>
        /// 获取或设置开关按钮的开合状态
        /// </summary>
        // Token: 0x17000257 RID: 599
        // (get) Token: 0x0600077E RID: 1918 RVA: 0x00042F34 File Offset: 0x00041134
        // (set) Token: 0x0600077F RID: 1919 RVA: 0x00042F4C File Offset: 0x0004114C
        [Browsable(true)]
        [Description("获取或设置开关按钮的开合状态")]
        [Category("HslControls")]
        [DefaultValue(false)]
        public bool SwitchStatus
        {
            get
            {
                return this.switch_status;
            }
            set
            {
                bool flag = value != this.switch_status;
                if (flag)
                {
                    this.switch_status = value;
                    base.Invalidate();
                    Action<object, bool> onSwitchChanged = this.OnSwitchChanged;
                    if (onSwitchChanged != null)
                    {
                        onSwitchChanged(this, this.switch_status);
                    }
                }
            }
        }

        /// <summary>
        /// 获取或设置两种开关状态的文本描述,例如:"Off;On"
        /// </summary>
        // Token: 0x17000258 RID: 600
        // (get) Token: 0x06000780 RID: 1920 RVA: 0x00042F94 File Offset: 0x00041194
        // (set) Token: 0x06000781 RID: 1921 RVA: 0x00042FAC File Offset: 0x000411AC
        [Browsable(true)]
        [Description("获取或设置两种开关状态的文本描述,例如:Off;On")]
        [Category("HslControls")]
        [DefaultValue("关;开")]
        public string SwitchStatusDescription
        {
            get
            {
                return this.description;
            }
            set
            {
                this.description = value;
                base.Invalidate();
            }
        }



        /// <summary>
        /// 获取或设置当前控件的文本
        /// </summary>
        // Token: 0x17000259 RID: 601
        // (get) Token: 0x06000782 RID: 1922 RVA: 0x00042FC0 File Offset: 0x000411C0
        // (set) Token: 0x06000783 RID: 1923 RVA: 0x00042FD8 File Offset: 0x000411D8
        [Browsable(true)]
        [Description("获取或设置当前控件的文本")]
        [Category("HslControls")]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [Bindable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                base.Text = value;
                base.Invalidate();
            }
        }

        /// <summary>
        /// 获取或设置当前控件的文本的颜色
        /// </summary>
        // Token: 0x1700025A RID: 602
        // (get) Token: 0x06000784 RID: 1924 RVA: 0x00042FEC File Offset: 0x000411EC
        // (set) Token: 0x06000785 RID: 1925 RVA: 0x00043004 File Offset: 0x00041204
        [Browsable(true)]
        [Description("获取或设置当前控件的文本的颜色")]
        [Category("HslControls")]
        [DefaultValue(typeof(Color), "Black")]
        [EditorBrowsable(EditorBrowsableState.Always)]
        public override Color ForeColor
        {
            get
            {
                return this.textForeColor;
            }
            set
            {
                this.textForeColor = value;
                this.textForeBrush.Dispose();
                this.textForeBrush = new SolidBrush(value);
                base.Invalidate();
            }
        }

        /// <inheritdoc />
        // Token: 0x06000786 RID: 1926 RVA: 0x00043030 File Offset: 0x00041230
        protected override void OnPaint(PaintEventArgs e)
        {
            bool flag = false;
            if (!flag)
            {
                e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
                e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                this.PaintHslControls(e.Graphics, base.Width, base.Height);
                base.OnPaint(e);
            }
        }

        /// <inheritdoc cref="M:HslControls.HslArrow.PaintHslControls(System.Drawing.Graphics,System.Single,System.Single)" />
        // Token: 0x06000787 RID: 1927 RVA: 0x00043088 File Offset: 0x00041288
        public void PaintHslControls(Graphics g, int width, int height)
        {
            bool flag = false;
            if (!flag)
            {
                string[] array = this.description.Split(new char[]
                {
                    ';'
                }, StringSplitOptions.RemoveEmptyEntries);
                string text = string.Empty;
                string text2 = string.Empty;
                bool flag2 = array.Length != 0;
                if (flag2)
                {
                    text = array[0];
                }
                bool flag3 = array.Length > 1;
                if (flag3)
                {
                    text2 = array[1];
                }
                Point centerPoint = this.GetCenterPoint(width, height);
                g.TranslateTransform((float)centerPoint.X, (float)centerPoint.Y);
                int num = 45 * (centerPoint.X * 2 - 30) / 130;
                bool flag4 = num < 5;
                if (!flag4)
                {
                    Rectangle rect = new Rectangle(-num - 4, -num - 4, 2 * num + 8, 2 * num + 8);
                    Rectangle rect2 = new Rectangle(-num, -num, 2 * num, 2 * num);
                    g.DrawEllipse(this.pen_switch_background, rect);
                    g.FillEllipse(this.brush_switch_background, rect2);
                    float angle = -36f;
                    bool flag5 = this.switch_status;
                    if (flag5)
                    {
                        angle = 36f;
                    }
                    g.RotateTransform(angle);
                    int num2 = 20 * (centerPoint.X * 2 - 30) / 130;
                    Rectangle rect3 = new Rectangle(-centerPoint.X / 8, -num - num2, centerPoint.X / 4, num * 2 + num2 * 2);
                    g.FillRectangle(this.brush_switch_foreground, rect3);
                    Rectangle rect4 = new Rectangle(-centerPoint.X / 16, -num - 10, centerPoint.X / 8, centerPoint.X * 3 / 8);
                    g.FillEllipse(this.switch_status ? Brushes.LimeGreen : Brushes.Tomato, rect4);
                    Rectangle r = new Rectangle(-50, -num - num2 - 15, 100, 15);
                    g.DrawString(this.switch_status ? text2 : text, this.Font, this.switch_status ? Brushes.LimeGreen : Brushes.Tomato, r, this.sf);
                    g.ResetTransform();
                    bool flag6 = height - Math.Min(width, height) > 0;
                    if (flag6)
                    {
                        bool flag7 = !string.IsNullOrEmpty(this.Text);
                        if (flag7)
                        {
                            g.DrawString(this.Text, this.Font, this.textForeBrush, new Rectangle(0, Math.Min(width, height) - 15, Math.Min(width, height), height - Math.Min(width, height) + 15), this.sf);
                        }
                    }
                }
            }
        }

        /// <summary>
        /// 鼠标的点击事件
        /// </summary>
        /// <param name="e">鼠标的点击事件</param>
        // Token: 0x06000788 RID: 1928 RVA: 0x00043308 File Offset: 0x00041508
        protected override void OnMouseClick(MouseEventArgs e)
        {
            bool flag = e.Button == MouseButtons.Left;
            if (flag)
            {
                this.SwitchStatus = !this.SwitchStatus;
            }
            base.OnClick(e);
        }

        /// <summary>
        /// 通过当前方法来修改控件的状态,而不触发状态改变的事件
        /// </summary>
        /// <param name="status">新增状态值</param>
        // Token: 0x06000789 RID: 1929 RVA: 0x00043341 File Offset: 0x00041541
        public void ChangeSwitchStatus(bool status)
        {
            this.switch_status = status;
            base.Invalidate();
        }

       

        // Token: 0x040003B0 RID: 944
        private Color textForeColor = Color.Black;

        // Token: 0x040003B1 RID: 945
        private Brush textForeBrush = new SolidBrush(Color.Black);

        // Token: 0x040003B2 RID: 946
        private Color color_switch_background = Color.DimGray;

        // Token: 0x040003B3 RID: 947
        private Brush brush_switch_background = new SolidBrush(Color.DimGray);

        // Token: 0x040003B4 RID: 948
        private Pen pen_switch_background = new Pen(Color.DimGray, 2f);

        // Token: 0x040003B5 RID: 949
        private bool switch_status = false;

        // Token: 0x040003B6 RID: 950
        private Color color_switch_foreground = Color.FromArgb(36, 36, 36);

        // Token: 0x040003B7 RID: 951
        private Brush brush_switch_foreground = new SolidBrush(Color.FromArgb(36, 36, 36));

        // Token: 0x040003B8 RID: 952
        private StringFormat sf = null;

        // Token: 0x040003B9 RID: 953
        private string description = "关;开";

        
    }
}