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.UI.Device.Winform/MotionCard/CtrlMotionCardOperationBase.cs | 1 src/Bro.Common.Model/Helper/PropertyConvertHelper.cs | 83 -------------------- src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 113 +++++++++++++++++++++++++++ src/Bro.Common.Model/Model/IOItem.cs | 20 +++++ src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs | 7 + src/Bro.UI.Config/MenuForms/FrmOperation.resx | 4 src/Bro.Process/ProcessControl.cs | 4 7 files changed, 145 insertions(+), 87 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);//閲嶈锛佽嚜鍔ㄥ垹闄ょ粍浠剁殑璁捐鏃朵唬鐮侊紒 + //} + } + + } diff --git a/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs b/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs index 10d6598..26b8303 100644 --- a/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs +++ b/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs @@ -70,9 +70,12 @@ } } + bind.OpConfig.DeviceId = bind.Device; + backOpConfig.DataFrom(bind.OpConfig); propGrid.SelectedObject = bind.OpConfig; + } private void CboDevice_SelectedIndexChanged(object sender, EventArgs e) @@ -88,7 +91,9 @@ var attr = device.GetType().GetCustomAttribute<DeviceAttribute>(); if (attr != null) { - propGrid.SelectedObject = ConfigFactory.GetOperationConfig(attr.TypeCode); + var opConfig= ConfigFactory.GetOperationConfig(attr.TypeCode); + opConfig.DeviceId = device.Id; + propGrid.SelectedObject = opConfig; } } } diff --git a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs index 6dc252c..dd48235 100644 --- a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs +++ b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs @@ -1,4 +1,5 @@ -锘縰sing Bro.Common.Factory; +锘縰sing Autofac; +using Bro.Common.Factory; using Bro.Common.Interface; using Bro.Common.Model; using Newtonsoft.Json; @@ -915,85 +916,7 @@ return base.EditValue(context, provider, value); } - } - - 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) - { - 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);//閲嶈锛佽嚜鍔ㄥ垹闄ょ粍浠剁殑璁捐鏃朵唬鐮侊紒 - //} - } + } #endregion } diff --git a/src/Bro.Common.Model/Model/IOItem.cs b/src/Bro.Common.Model/Model/IOItem.cs index 11283eb..486d0ff 100644 --- a/src/Bro.Common.Model/Model/IOItem.cs +++ b/src/Bro.Common.Model/Model/IOItem.cs @@ -1,6 +1,7 @@ 锘縰sing Bro.Common.Helper; using Newtonsoft.Json; using System; +using System.Collections; using System.Collections.Generic; using System.ComponentModel; using static Bro.Common.Helper.EnumHelper; @@ -60,6 +61,7 @@ { [Category("IO鎿嶄綔閰嶇疆")] [Description("闇�瑕佹搷浣滅殑IO")] + [TypeConverter(typeof(IORefrenceItemSourceConverter))] public IOItem IOItem { get; set; } = new IOItem(); [Category("IO鎿嶄綔閰嶇疆")] @@ -70,4 +72,22 @@ [JsonIgnore] public List<IODefinition> IOItemSource { get; set; } = new List<IODefinition>(); } + + public class IORefrenceItemSourceConverter : ComboBoxItemTypeConvert + { + public override Hashtable GetConvertHash(ITypeDescriptorContext context) + { + Hashtable table = new Hashtable(); + + if (context.Instance is IORefrenceItem item) + { + item.IOItemSource.ForEach(i => + { + table[i.IODesc + i.IOType.GetEnumDescription() + i.IONum] = i as IOItem; + }); + } + + return table; + } + } } diff --git a/src/Bro.Process/ProcessControl.cs b/src/Bro.Process/ProcessControl.cs index ece460d..29d3170 100644 --- a/src/Bro.Process/ProcessControl.cs +++ b/src/Bro.Process/ProcessControl.cs @@ -32,8 +32,8 @@ #region AutoFac娉ㄥ唽 GlobalVar.Builder.RegisterInstance(this).As<IProcess>().ExternallyOwned(); GlobalVar.Builder.RegisterInstance(IConfig).As<IProcessConfig>().ExternallyOwned(); - GlobalVar.Builder.RegisterInstance(DeviceCollection); - GlobalVar.Builder.RegisterInstance(ProcessMethodCollection); + GlobalVar.Builder.RegisterInstance(DeviceCollection).ExternallyOwned(); + GlobalVar.Builder.RegisterInstance(ProcessMethodCollection).ExternallyOwned(); //if (isBuild) //{ diff --git a/src/Bro.UI.Config/MenuForms/FrmOperation.resx b/src/Bro.UI.Config/MenuForms/FrmOperation.resx index b1a77b1..28530b7 100644 --- a/src/Bro.UI.Config/MenuForms/FrmOperation.resx +++ b/src/Bro.UI.Config/MenuForms/FrmOperation.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm - CgAAAk1TRnQBSQFMAgEBAgEAAdABAAHQAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CgAAAk1TRnQBSQFMAgEBAgEAAdgBAAHYAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -182,7 +182,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4 - CAAAAk1TRnQBSQFMAwEBAAHQAQAB0AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + CAAAAk1TRnQBSQFMAwEBAAHYAQAB2AEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA AWADAAEYAwABAQEAAQgGAAEJGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperationBase.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperationBase.cs index 2d90199..d3daefe 100644 --- a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperationBase.cs +++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardOperationBase.cs @@ -1,5 +1,6 @@ 锘縰sing Bro.Common.Helper; using Bro.Common.Interface; +using Bro.Common.Model; using Bro.Device.GTSCard; using System; using System.Collections.Generic; -- Gitblit v1.8.0