From 1e12238d9d6ea02f89aa7150f8507c9d8368a429 Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期四, 09 七月 2020 14:29:15 +0800
Subject: [PATCH] 板卡操作配置编辑时传递轴号和轴名称

---
 src/Bro.Common.Device/DeviceBase/MotionCardBase.cs |  137 +++++++++++++++++++++++++++++++++++++++------
 1 files changed, 119 insertions(+), 18 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index a6d2849..1ff6cd5 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -190,13 +190,48 @@
         [Category("鏉垮崱鎿嶄綔")]
         [Description("鏉垮崱鎿嶄綔閰嶇疆鍩虹被闆嗗悎锛屼緷娆℃墽琛�")]
         [TypeConverter(typeof(CollectionCountConvert))]
-        [Editor(typeof(ComplexCollectionEditor<MotionCardOperationSet>), typeof(UITypeEditor))]
+        [Editor(typeof(MotionCardOperationSetEditor), typeof(UITypeEditor))]
         public List<MotionCardOperationSet> OperationCollection { get; set; } = new List<MotionCardOperationSet>();
 
         public string GetDisplayText()
         {
+            //OperationCollection.ForEach(o =>
+            //{
+            //    o.MotionCardId = DeviceId;
+            //});
+
             return string.Join(" ", OperationCollection.Select(u => u.GetDisplayText()));
         }
+    }
+
+    public class MotionCardOperationSetEditor : ComplexCollectionEditor<MotionCardOperationSet>
+    {
+        public MotionCardOperationSetEditor(Type type) : base(type) { }
+
+        IOperationConfig opConfig = null;
+        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
+        {
+            if (context.Instance is IOperationConfig config && value is List<MotionCardOperationSet> setList)
+            {
+                opConfig = config;
+                setList.ForEach(set => set.MotionCardId = opConfig.DeviceId);
+            }
+
+            return base.EditValue(context, provider, value);
+        }
+
+        protected override object CreateInstance(Type itemType)
+        {
+            object obj = base.CreateInstance(itemType);
+
+            if (obj is MotionCardOperationSet set)
+            {
+                set.MotionCardId = opConfig?.DeviceId;
+            }
+
+            return obj;
+        }
+
     }
 
     [Device("MotionOperationSet", "杩愬姩鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)]
@@ -230,18 +265,21 @@
         [DisplayName("IO纭瓒呮椂")]
         public int IOConfirmTimeout { get; set; } = 0;
 
-        //[Category("鏉垮崱杩愬姩閰嶇疆")]
-        //[DisplayName("杩愬姩閰嶇疆闆嗗悎")]
-        //[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
-        //[TypeConverter(typeof(CollectionCountConvert))]
-        //[Editor(typeof(ComplexCollectionEditor<MovingOption>), typeof(UITypeEditor))]
-        //public List<MovingOption> MovingOps { get; set; } = new List<MovingOption>();
         [Category("鏉垮崱杩愬姩閰嶇疆")]
         [DisplayName("杩愬姩閰嶇疆闆嗗悎")]
         [Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
-        [TypeConverter(typeof(ComplexObjectConvert))]
-        [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
-        public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection();
+        [TypeConverter(typeof(CollectionCountConvert))]
+        [Editor(typeof(MovingOpsCollectionEditor), typeof(UITypeEditor))]
+        public List<MovingOption> MovingOps { get; set; } = new List<MovingOption>();
+
+        public string MotionCardId = "";
+
+        //[Category("鏉垮崱杩愬姩閰嶇疆")]
+        //[DisplayName("杩愬姩閰嶇疆闆嗗悎")]
+        //[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
+        //[TypeConverter(typeof(ComplexObjectConvert))]
+        //[Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
+        //public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection();
 
 
         public string GetDisplayText()
@@ -276,14 +314,15 @@
             }
 
             string moving = "";
-            //MovingOps.ForEach(i =>
-            //{
-            //    moving += i.GetDisplayText() + " ";
-            //});
-            //if (moving != "")
-            //{
-            //    moving = " 杩愬姩锛�" + moving;
-            //}
+            MovingOps.ForEach(i =>
+            {
+                moving += i.GetDisplayText() + " ";
+            });
+
+            if (moving != "")
+            {
+                moving = " 杩愬姩锛�" + moving;
+            }
 
             return (preCheck + output + confirm + moving).Trim();
         }
@@ -444,4 +483,66 @@
         //}
     }
 
+    public class MovingOpsCollectionEditor : ComplexCollectionEditor<MovingOption>
+    {
+        public MovingOpsCollectionEditor(Type type) : base(type)
+        {
+        }
+
+        MotionCardBase motionCard = null;
+        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
+        {
+            if (context.Instance is MotionCardOperationSet set)
+            {
+                if (!string.IsNullOrWhiteSpace(set.MotionCardId))
+                {
+                    using (var scope = GlobalVar.Container.BeginLifetimeScope())
+                    {
+                        var deviceList = scope.Resolve<List<IDevice>>();
+                        if (deviceList != null)
+                        {
+                            motionCard = deviceList.FirstOrDefault(u => u.Id == set.MotionCardId) as MotionCardBase;
+                        }
+                    }
+                }
+
+                if (motionCard != null && value is List<MovingOption> ops)
+                {
+                    ops.ForEach(o => o.SetAxisSetting(motionCard.IConfig.AxisSettings));
+                }
+            }
+
+            return base.EditValue(context, provider, value);
+        }
+
+        protected override object SetItems(object editValue, object[] value)
+        {
+            Array.ForEach(value, v =>
+             {
+                 if (v is MovingOption op && motionCard != null)
+                 {
+                     op.SetAxisSetting(motionCard.IConfig.AxisSettings);
+                 }
+             });
+
+            return base.SetItems(editValue, value);
+        }
+        ///// <summary> 
+        ///// 闄愬埗涓�娆¢�変竴涓疄渚� 
+        ///// </summary> 
+        ///// <returns></returns> 
+        //protected override bool CanSelectMultipleInstances()
+        //{
+        //    return false;
+        //}
+        ///// <summary> 
+        ///// 鎸囧畾鍒涘缓鐨勫璞$被鍨� 
+        ///// </summary> 
+        ///// <returns></returns> 
+        //protected override Type CreateCollectionItemType()
+        //{
+        //    return typeof(MovingOption);
+        //}
+    }
+
 }

--
Gitblit v1.8.0