From 12200ec69e33881649974f31f270750ba6b15e1d Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期二, 14 七月 2020 18:27:31 +0800
Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071

---
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs |   76 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 76 insertions(+), 0 deletions(-)

diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
index b136bdc..e47edce 100644
--- a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
@@ -7,14 +7,90 @@
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Bro.Common.Model;
+using Bro.UI.Model.Winform;
+using static Bro.Common.Helper.EnumHelper;
+using Bro.Common.Interface;
+using Bro.Common.Base;
 
 namespace Bro.UI.Device.Winform
 {
     public partial class CtrlMotionCardIOStatus : UserControl
     {
+        public List<IOItem> _monitorValues { get; set; }
+
         public CtrlMotionCardIOStatus()
         {
             InitializeComponent();
+            InitIOEvent();
+        }
+        private IDevice Device { get; set; }
+
+        protected MotionCardBase MotionCard
+        {
+            get => Device as MotionCardBase;
+        }
+
+        public CtrlMotionCardIOStatus(IDevice device)
+        {
+            InitializeComponent();
+            Device = device;
+            InitIOEvent();
+        }
+
+        private void InitIOEvent()
+        {
+            foreach (var ctr in groupBoxIOOut.Controls)
+            {
+                if (ctr is IOIndicatorCtrl ioOut)
+                {
+                    ioOut.Cursor = Cursors.Hand;
+                    ioOut.OnIODoubleClick += IoOut_DoubleClick;
+                }
+            }
+        }
+
+        private void IoOut_DoubleClick(string name, bool isOn)
+        {
+            var index = Convert.ToInt16(name.Substring(5));
+            MotionCard.WriteOutput(index, isOn ? IOValue.FALSE : IOValue.TRUE);
+        }
+
+        private void RefreshIOStatus(object sender, EventArgs e)
+        {
+            _monitorValues = MotionCard.MonitorValues;
+            foreach (var ioItem in _monitorValues)
+            {
+                if (ioItem.IOType == Common.Helper.EnumHelper.IOType.INPUT)
+                {
+                    var ioInArray = groupBoxIOIn.Controls.Find("ioIn" + ioItem.IONum, false);
+                    if (ioInArray != null && ioInArray.Length == 1)
+                    {
+                        var ioIn = ioInArray[0] as IOIndicatorCtrl;
+
+                        ioIn.IsOn = ioItem.Value == IOValue.TRUE;
+                    }
+                }
+                else
+                {
+                    var ioOutArray = groupBoxIOOut.Controls.Find("ioOut" + ioItem.IONum, false);
+                    if (ioOutArray != null && ioOutArray.Length == 1)
+                    {
+                        var ioOut = ioOutArray[0] as IOIndicatorCtrl;
+
+                        if (MotionCard.IConfig.IsOutputReversed)
+                        {
+                            ioOut.IsOn = ioItem.Value == IOValue.TRUE;
+                        }
+                        else
+                        {
+                            ioOut.IsOn = ioItem.Value == IOValue.FALSE;
+                        }
+                    }
+                }
+            }
+
+            this.Invalidate();
         }
     }
 }

--
Gitblit v1.8.0