| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- using Model;
- using Permission;
- using Sunny.UI;
- using System;
- using System.ComponentModel;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.Windows.Forms;
- [ToolboxItem(true)]
- [Description("提示灯控件")]
- public class MyUiLight : UIControl, IPermissionControl
- {
- private Timer timer;
- private UIShape sharpType;
- private int interval = 500;
- private UILightState state;
- private bool blinkState;
- private bool showCenterColor = true;
- private bool showLightLine;
- private Color onColor = UIColor.Green;
- private Color centerColor = UIColor.White;
- private Color offCenterColor = UIColor.White;
- private Color offColor = UIColor.Gray;
- [Category("MyControl")]
- [Description("控件要求的权限等级")]
- [Browsable(true)]
- [DefaultValue(PermissionLevel.操作工)]
- public PermissionLevel RequiredPermissionLevel { get => requiredPermissionLevel; set { requiredPermissionLevel = value; IsPermissionGot = currentPermissionLevel >= RequiredPermissionLevel; HandlePermissionChange(); } }
- private PermissionLevel requiredPermissionLevel = PermissionLevel.操作工;
- [Category("MyControl")]
- [Description("当前登录的权限")]
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public PermissionLevel CurrentPermissionLevel { get => currentPermissionLevel; set { currentPermissionLevel = value; IsPermissionGot = currentPermissionLevel >= RequiredPermissionLevel; HandlePermissionChange(); } }
- private PermissionLevel currentPermissionLevel = PermissionLevel.无权限;
- [Category("MyControl")]
- [Description("控件是否获得了权限")]
- [Browsable(false)]
- [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
- public bool IsPermissionGot { get; private set; }
- protected virtual void HandlePermissionChange()
- {
- this.Enabled = IsPermissionGot;
- }
- [DefaultValue(UIShape.Circle)]
- [Description("显示形状:圆形,正方形")]
- [Category("SunnyUI")]
- public UIShape Shape
- {
- get
- {
- return sharpType;
- }
- set
- {
- if (sharpType != value)
- {
- sharpType = value;
- Invalidate();
- }
- }
- }
- [Description("是否显示文字")]
- [Category("SunnyUI")]
- [DefaultValue(false)]
- public new bool ShowText
- {
- get
- {
- return base.ShowText;
- }
- set
- {
- base.ShowText = value;
- }
- }
- [DefaultValue(500)]
- [Description("显示间隔")]
- [Category("SunnyUI")]
- public int Interval
- {
- get
- {
- return interval;
- }
- set
- {
- interval = Math.Max(100, value);
- interval = Math.Min(interval, 10000);
- if (timer != null)
- {
- bool enabled = timer.Enabled;
- timer.Stop();
- timer.Interval = interval;
- if (enabled)
- {
- timer.Start();
- }
- }
- }
- }
- [DefaultValue(UILightState.On)]
- [Description("显示状态")]
- [Category("SunnyUI")]
- public UILightState State
- {
- get
- {
- return state;
- }
- set
- {
- state = value;
- timer?.Stop();
- if (state == UILightState.Blink)
- {
- if (timer == null)
- {
- timer = new Timer
- {
- Interval = interval
- };
- timer.Tick += Timer_Tick;
- }
- blinkState = true;
- timer.Start();
- }
- Invalidate();
- }
- }
- [DefaultValue(true)]
- [Description("是否显示中心颜色")]
- [Category("SunnyUI")]
- public bool ShowCenterColor
- {
- get
- {
- return showCenterColor;
- }
- set
- {
- showCenterColor = value;
- Invalidate();
- }
- }
- [DefaultValue(false)]
- [Description("显示灯光亮线")]
- [Category("SunnyUI")]
- public bool ShowLightLine
- {
- get
- {
- return showLightLine;
- }
- set
- {
- showLightLine = value;
- Invalidate();
- }
- }
- [DefaultValue(typeof(Color), "110, 190, 40")]
- [Description("打开状态颜色")]
- [Category("SunnyUI")]
- public Color OnColor
- {
- get
- {
- return onColor;
- }
- set
- {
- onColor = value;
- Invalidate();
- }
- }
- [DefaultValue(typeof(Color), "White")]
- [Description("中心颜色")]
- [Category("SunnyUI")]
- [Browsable(false)]
- public Color CenterColor
- {
- get
- {
- return centerColor;
- }
- set
- {
- centerColor = value;
- Invalidate();
- }
- }
- [DefaultValue(typeof(Color), "White")]
- [Description("中心颜色")]
- [Category("SunnyUI")]
- public Color OnCenterColor
- {
- get
- {
- return CenterColor;
- }
- set
- {
- CenterColor = value;
- }
- }
- [DefaultValue(typeof(Color), "White")]
- [Description("中心颜色")]
- [Category("SunnyUI")]
- public Color OffCenterColor
- {
- get
- {
- return offCenterColor;
- }
- set
- {
- offCenterColor = value;
- Invalidate();
- }
- }
- [DefaultValue(typeof(Color), "140, 140, 140")]
- [Description("关闭状态颜色")]
- [Category("SunnyUI")]
- public Color OffColor
- {
- get
- {
- return offColor;
- }
- set
- {
- offColor = value;
- Invalidate();
- }
- }
- [DefaultValue(false)]
- [Description("Text属性是否从图案左侧开始输出")]
- [Category("SunnyUI")]
- public bool TextCoverSymbol
- {
- get
- {
- return textCoverSymbol;
- }
- set
- {
- textCoverSymbol = value;
- Invalidate();
- }
- }
- [Description("文字对齐方向")]
- [Category("SunnyUI")]
- public ContentAlignment MyTextAlign
- {
- get
- {
- return base.TextAlign;
- }
- set
- {
- //if (textAlign != value)
- //{
- // textAlign = value;
- // Invalidate();
- //}
- base.TextAlign = value;
- }
- }
- //private ContentAlignment textAlign;
- private bool textCoverSymbol;
- public MyUiLight()
- {
- SetStyleFlags(supportTransparent: true, selectable: false);
- base.ShowRect = false;
- base.ShowText = false;
- base.Radius = (base.Width = (base.Height = 35));
- }
- protected override void OnPaintFore(Graphics g, GraphicsPath path)
- {
- if(!textCoverSymbol)
- g.DrawString(Text, Font, ForeColor, base.ClientRectangle, base.TextAlign,offsetX:base.Height);
- else
- g.DrawString(Text, Font, ForeColor, base.ClientRectangle, base.TextAlign);
- }
- private void Timer_Tick(object sender, EventArgs e)
- {
- blinkState = !blinkState;
- Invalidate();
- }
- protected override void OnPaintFill(Graphics g, GraphicsPath path)
- {
- int num = Math.Min(base.Width, base.Height);
- Color color = ((State == UILightState.On) ? OnColor : ((State != UILightState.Off) ? (blinkState ? onColor : offColor) : OffColor));
- Color color2 = ((State == UILightState.On) ? OnCenterColor : ((State != UILightState.Off) ? (blinkState ? OnCenterColor : offCenterColor) : offCenterColor));
- if (Shape == UIShape.Circle)
- {
- if (base.Radius != num)
- {
- base.Radius = num;
- }
- using (GraphicsPath graphicsPath = new GraphicsPath())
- {
- graphicsPath.AddEllipse(2, 2, num - 4, num - 4);
- g.Smooth();
- if (ShowCenterColor)
- {
- Color[] surroundColors = new Color[1] { color };
- using (GraphicsPath path2 = base.ClientRectangle.CreateTrueRoundedRectanglePath(base.Height))
- {
- using (PathGradientBrush pathGradientBrush = new PathGradientBrush(path2))
- {
- pathGradientBrush.CenterPoint = new PointF((float)num / 2f, (float)num / 2f);
- pathGradientBrush.CenterColor = color2;
- pathGradientBrush.SurroundColors = surroundColors;
- g.FillPath(pathGradientBrush, graphicsPath);
- }
- }
- }
- else
- {
- g.FillPath(color, graphicsPath);
- }
- }
- if (ShowLightLine)
- {
- int num2 = (num - 4) / 5;
- g.DrawArc(color2, num2, num2, num - num2 * 2, num - num2 * 2, 45, -155);
- }
- }
- if (Shape != UIShape.Square)
- {
- return;
- }
- if (base.Radius != 0)
- {
- base.Radius = 0;
- }
- g.FillRoundRectangle(color, 2, 2, num - 4, num - 4, 5);
- if (!ShowCenterColor)
- {
- return;
- }
- using (GraphicsPath graphicsPath2 = new GraphicsPath())
- {
- Point[] points = new Point[4]
- {
- new Point(3, 3),
- new Point(num - 3, 3),
- new Point(num - 3, num - 3),
- new Point(3, num - 3)
- };
- graphicsPath2.AddLines(points);
- g.Smooth();
- Color[] surroundColors2 = new Color[1] { color };
- using (PathGradientBrush pathGradientBrush2 = new PathGradientBrush(path))
- {
- pathGradientBrush2.CenterPoint = new PointF((float)num / 2f, (float)num / 2f);
- pathGradientBrush2.CenterColor = color2;
- pathGradientBrush2.SurroundColors = surroundColors2;
- g.FillPath(pathGradientBrush2, graphicsPath2);
- }
- }
- }
- }
|