duheng
2024-12-04 3886a51f03ec14650e5b7127539104ad40e496da
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-property/HydroVisualPropertyCtrl.cs
@@ -4,6 +4,7 @@
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraLayout.Utils;
using DevExpress.XtraVerticalGrid.Events;
using Yw.Model;
namespace Yw.WinFrmUI
{
@@ -14,6 +15,7 @@
        {
            InitializeComponent();
            this.layoutControl1.SetupLayoutControl();
            SetDescriptionVisible(false);
        }
        /// <summary>
@@ -28,7 +30,7 @@
        /// 第二个参数为曲线类型
        /// 第三个参数为是否设置成功
        /// </summary>
        public event Func<HydroVisualViewModel, string, bool> SetCurveEvent;
        public event Func<HydroVisualViewModel, string, string, bool> SetCurveEvent;
        /// <summary>
        /// 设置模式事件
        /// 第一个参数为设置模式事的ViewModel
@@ -82,7 +84,19 @@
            set
            {
                this.barBtnChangeLink.Visibility = value is HydroLinkViewModel ? BarItemVisibility.Always : BarItemVisibility.Never;
                this.barBtnDb.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always;
                this.barBtnView.Visibility = value == null ? BarItemVisibility.Never : BarItemVisibility.Always;
                if (value != null)
                {
                    if (value is HydroReservoirViewModel)
                    {
                        this.barBtnDb.Visibility = BarItemVisibility.Never;
                    }
                    else if (value is HydroJunctionViewModel)
                    {
                        this.barBtnDb.Visibility = BarItemVisibility.Never;
                    }
                }
                this.propertyGridControl1.SelectedObject = value;
            }
        }
@@ -147,7 +161,6 @@
            {
                return;
            }
            //属性描述器
            var descriptor = this.propertyGridControl1.GetPropertyDescriptor(e.Row);
            if (descriptor != null)
@@ -157,6 +170,12 @@
                if (displayNameAttri != null && !string.IsNullOrEmpty(displayNameAttri.DisplayName))
                {
                    e.Caption = displayNameAttri.DisplayName;
                }
                //图标
                var calcuProAttri = (HydroCalcuProAttribute)descriptor.Attributes[typeof(HydroCalcuProAttribute)];
                if (calcuProAttri != null)
                {
                }
            }
@@ -363,124 +382,28 @@
                    {
                        return;
                    }
                    switch (curvePropAttri.CurveType)
                    if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, curvePropAttri.Curve, curvePropAttri.CurveType))
                    {
                        case HydroCurve.Tank:
                        var curveCode = e.Row.Properties.Value?.ToString();
                        var curveInfo = vm.HydroInfo.Curves?.Find(x => x.Code == curveCode);
                        var dlg = new SetHydroCurveDlg();
                        dlg.SetBindingData(vm.HydroInfo, curveInfo, curvePropAttri.Curve, curvePropAttri.CurveType);
                        dlg.ReloadDataEvent += (curveInfoRhs) =>
                        {
                            if (vm.HydroInfo.Curves == null)
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, HydroCurve.Pump))
                                {
                                    XtraMessageBox.Show("正在开发中...");
                                }
                                vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
                            }
                            break;
                        case HydroCurve.TankVol:
                            if (curveInfo != null)
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, HydroCurve.TankVol))
                                {
                                    XtraMessageBox.Show("正在开发中...");
                                }
                                vm.HydroInfo.Curves.Remove(curveInfo);
                            }
                            break;
                        case HydroCurve.Pump:
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, HydroCurve.Pump))
                                {
                                    //缺省的设置方法
                                }
                            }
                            break;
                        case HydroCurve.PumpQH:
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, HydroCurve.PumpQH))
                                {
                                    var pumpViewModel = vm as HydroPumpViewModel;
                                    var curveQh = vm.HydroInfo.Curves?.Find(x => x.Code == pumpViewModel.CurveQH);
                                    var dlg = new SetHydroCurveDlg();
                                    dlg.ReloadDataEvent += (curveInfo) =>
                                    {
                                        if (vm.HydroInfo.Curves == null)
                                        {
                                            vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
                                        }
                                        if (curveQh != null)
                                        {
                                            vm.HydroInfo.Curves.Remove(curveQh);
                                        }
                                        vm.HydroInfo.Curves.Add(curveInfo);
                                        pumpViewModel.CurveQH = curveInfo.Code;
                                        UpdateRows();
                                    };
                                    dlg.SetBindingData(vm.HydroInfo, curveQh, curvePropAttri.CurveType);
                                    dlg.ShowDialog();
                                }
                            }
                            break;
                        case HydroCurve.PumpQP:
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, curvePropAttri.CurveType))
                                {
                                    var pumpViewModel = vm as HydroPumpViewModel;
                                    var curveQp = vm.HydroInfo.Curves?.Find(x => x.Code == pumpViewModel.CurveQP);
                                    var dlg = new SetHydroCurveDlg();
                                    dlg.ReloadDataEvent += (curveInfo) =>
                                    {
                                        if (vm.HydroInfo.Curves == null)
                                        {
                                            vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
                                        }
                                        if (curveQp != null)
                                        {
                                            vm.HydroInfo.Curves.Remove(curveQp);
                                        }
                                        vm.HydroInfo.Curves.Add(curveInfo);
                                        pumpViewModel.CurveQP = curveInfo.Code;
                                        UpdateRows();
                                    };
                                    dlg.SetBindingData(vm.HydroInfo, curveQp, curvePropAttri.CurveType);
                                    dlg.ShowDialog();
                                }
                            }
                            break;
                        case HydroCurve.PumpQE:
                            {
                                var pumpViewModel = vm as HydroPumpViewModel;
                                var curveQe = vm.HydroInfo.Curves?.Find(x => x.Code == pumpViewModel.CurveQE);
                                var dlg = new SetHydroCurveDlg();
                                dlg.ReloadDataEvent += (curveInfo) =>
                                {
                                    if (vm.HydroInfo.Curves == null)
                                    {
                                        vm.HydroInfo.Curves = new List<Model.HydroCurveInfo>();
                                    }
                                    if (curveQe != null)
                                    {
                                        vm.HydroInfo.Curves.Remove(curveQe);
                                    }
                                    vm.HydroInfo.Curves.Add(curveInfo);
                                    pumpViewModel.CurveQE = curveInfo.Code;
                                    UpdateRows();
                                };
                                dlg.SetBindingData(vm.HydroInfo, curveQe, curvePropAttri.CurveType);
                                dlg.ShowDialog();
                            }
                            break;
                        case HydroCurve.Valve:
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, HydroCurve.Valve))
                                {
                                    //缺省的设置方法
                                }
                            }
                            break;
                        case HydroCurve.ValveQL:
                            {
                                if (this.SetCurveEvent == null || !this.SetCurveEvent.Invoke(vm, curvePropAttri.CurveType))
                                {
                                    //缺省的设置方法
                                }
                            }
                            break;
                        default: break;
                            vm.HydroInfo.Curves.Add(curveInfo);
                            e.Row.Properties.Value = curveInfo.Code;
                            vm.UpdateVmoProperty();
                            UpdateRows();
                        };
                        dlg.ShowDialog();
                    }
                };
                e.RepositoryItem = buttonEdit;
@@ -570,8 +493,165 @@
                }
            }
            #endregion
            #region 阀门
            if (vm is HydroValveViewModel valve)
            {
                if (fieldName == nameof(HydroValveViewModel.ValveSetting))
                {
                    e.Row.Visible = false;
                }
                switch (valve.Vmo.ValveType)
                {
                    case Yw.Hydro.ValveType.PSV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = true;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.PRV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = true;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.PBV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = true;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.FCV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = true;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.TCV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = true;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.GPV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = true;
                            }
                        }
                        break;
                    case Yw.Hydro.ValveType.CV:
                        {
                            if (fieldName == nameof(HydroValveViewModel.ValvePress))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveFlow))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveOL))
                            {
                                e.Row.Visible = false;
                            }
                            if (fieldName == nameof(HydroValveViewModel.ValveQL))
                            {
                                e.Row.Visible = false;
                            }
                        }
                        break;
                    default: break;
                }
            }
            #endregion
        }
@@ -610,6 +690,21 @@
                {
                    this.FlowEffectPropertyValueChangedEvent?.Invoke(vm);
                }
                this.propertyGridControl1.UpdateRows();
            }
        }
        //选择
        private void barBtnDb_ItemClick(object sender, ItemClickEventArgs e)
        {
            var vm = this.SelectedObject;
            if (vm == null)
            {
                return;
            }
            if (this.MatchingDbEvent != null)
            {
            }
        }