You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lj_plc/Controls/Mesnac.Controls.ChemicalWei.../HslSwitch.cs

394 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 = "关;开";
}
}