From 0b38918fc4c1021d63689108fbcddc87593aae36 Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期四, 02 七月 2020 18:11:46 +0800
Subject: [PATCH] 板卡操作配置可获取板卡初始配置中的IO定义

---
 src/Bro.Common.Device/DeviceBase/MotionCardBase.cs |  113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 111 insertions(+), 2 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index 4425373..44eee94 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -1,14 +1,17 @@
-锘縰sing Bro.Common.Helper;
+锘縰sing Autofac;
+using Bro.Common.Helper;
 using Bro.Common.Interface;
 using Bro.Common.Model;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
+using System.ComponentModel.Design;
 using System.Drawing.Design;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows.Forms;
 
 namespace Bro.Common.Base
 {
@@ -136,5 +139,111 @@
         }
     }
 
-    
+    public class IORefrenceItemCollectionEditor : CollectionEditor
+    {
+        protected override CollectionForm CreateCollectionForm()
+        {
+            var form = base.CreateCollectionForm();
+
+            var prop = form.GetType().GetField("propertyBrowser", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+
+            if (prop != null)
+            {
+                if (prop.GetValue(form) is PropertyGrid grid)
+                {
+                    grid.HelpVisible = true;
+                    grid.ToolbarVisible = false;
+                }
+            }
+
+            return form;
+        }
+
+        //protected override object CreateInstance(Type itemType)
+        //{
+        //    return base.CreateInstance(itemType);
+        //}
+
+        //protected override object[] GetItems(object editValue)
+        //{
+        //    return base.GetItems(editValue);
+        //}
+
+        //protected override object SetItems(object editValue, object[] value)
+        //{
+        //    return base.SetItems(editValue, value);
+        //}
+
+        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
+        {
+            if (context.Instance is IOperationConfig opConfig)
+            {
+                if (string.IsNullOrWhiteSpace(opConfig.DeviceId))
+                {
+                    return base.EditValue(context, provider, value);
+                }
+
+                using (var scope = GlobalVar.Container.BeginLifetimeScope())
+                {
+                    List<IDevice> deviceList = scope.Resolve<List<IDevice>>();
+
+                    var device = deviceList.FirstOrDefault(u => u.Id == opConfig.DeviceId);
+
+                    if (device == null)
+                    {
+                        return base.EditValue(context, provider, value);
+                    }
+
+                    if (device is MotionCardBase motionCard)
+                    {
+                        if (value is IORefrenceItem item)
+                        {
+                            item.IOItemSource = (motionCard.InitialConfig as MotionCardInitialConfigBase).IODefinitionCollection;
+                        }
+                    }
+                }
+            }
+
+            return base.EditValue(context, provider, value);
+        }
+
+        public IORefrenceItemCollectionEditor(Type type) : base(type)
+        {
+        }
+
+        /// <summary> 
+        /// 闄愬埗涓�娆¢�変竴涓疄渚� 
+        /// </summary> 
+        /// <returns></returns> 
+        protected override bool CanSelectMultipleInstances()
+        {
+            return false;
+        }
+
+        /// <summary> 
+        /// 鎸囧畾鍒涘缓鐨勫璞$被鍨� 
+        /// </summary> 
+        /// <returns></returns> 
+        protected override Type CreateCollectionItemType()
+        {
+            return typeof(IORefrenceItem);
+        }
+
+        protected override string GetDisplayText(object value)
+        {
+            if (value is IComplexDisplay)
+            {
+                return (value as IComplexDisplay).GetDisplayText();
+            }
+
+            return base.GetDisplayText(value);
+        }
+
+        //protected override void DestroyInstance(object instance)
+        //{
+        //    base.DestroyInstance(instance);//閲嶈锛佽嚜鍔ㄥ垹闄ょ粍浠剁殑璁捐鏃朵唬鐮侊紒 
+        //}
+    }
+
+
 }

--
Gitblit v1.8.0