using DevExpress.Skins; using DevExpress.Utils.Extensions; using DevExpress.XtraEditors; using DevExpress.XtraLayout; using DevExpress.XtraLayout.Utils; namespace Yw.WinFrmUI { public partial class SetHydroWorkingCtrl : DevExpress.XtraEditors.XtraUserControl { public SetHydroWorkingCtrl() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); } /// /// 查看组件事件 /// public event Action HydroViewEvent; //水力信息 private Yw.Model.HydroModelInfo _hydroInfo = null; //工况 private SetHydroWorkingViewModel _hydroWorking = null; //基础控件 private SetHydroWorkingBasicCtrl _basicCtrl = null; //可见控件列表 private List _visualCtrlList = null; /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, List allWorkingList, List allMonitorList ) { if (hydroInfo == null) { return; } _hydroInfo = hydroInfo; _hydroWorking = new SetHydroWorkingViewModel(); var workingNames = allWorkingList?.Select(x => x.Name).Distinct().ToList(); _hydroWorking.Name = Yw.Untity.UniqueHelper.CreateFromFirst("工况", workingNames); #region 工况信息 var basicGroup = this.layoutControl1.AddGroup(); basicGroup.Text = "工况信息"; basicGroup.ExpandButtonVisible = true; basicGroup.Expanded = false; basicGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; basicGroup.ExpandOnDoubleClick = true; var basicCtrl = new SetHydroWorkingBasicCtrl(); basicCtrl.SetBindingData(_hydroWorking); var basicItem = basicGroup.AddItem("工况信息", basicCtrl); basicItem.TextVisible = false; basicItem.Height = 120; basicGroup.BestFit(); basicGroup.LayoutMode = LayoutMode.Regular; basicGroup.AllowBorderColorBlending = true; basicGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); _basicCtrl = basicCtrl; #endregion _visualCtrlList = new List(); #region 水库 if (hydroInfo.Reservoirs != null && hydroInfo.Reservoirs.Count > 0) { var group = this.layoutControl1.AddGroup(); group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Reservoir); group.ExpandButtonVisible = true; group.Expanded = true; group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; group.ExpandOnDoubleClick = true; foreach (var visual in hydroInfo.Reservoirs) { var visualCtrl = new SetHydroWorkingReservoirCtrl(); visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); var workingInfo = new HydroWorkingReservoirViewModel(visual); _hydroWorking.WorkingInfo.AppendWorking(workingInfo); visualCtrl.SetBindingData(visual, workingInfo); var item = group.AddItem(visual.Name, visualCtrl); item.TextVisible = false; _visualCtrlList.Add(visualCtrl); } group.BestFit(); group.LayoutMode = LayoutMode.Flow; group.AllowBorderColorBlending = true; group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); foreach (LayoutControlItem item in group.Items) { item.Size = new Size(200, 80); } } #endregion #region 水池 if (hydroInfo.Tanks != null && hydroInfo.Tanks.Count > 0) { var group = this.layoutControl1.AddGroup(); group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank); group.ExpandButtonVisible = true; group.Expanded = true; group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; group.ExpandOnDoubleClick = true; foreach (var visual in hydroInfo.Tanks) { var visualCtrl = new SetHydroWorkingTankCtrl(); visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); var workingInfo = new HydroWorkingTankViewModel(visual); _hydroWorking.WorkingInfo.AppendWorking(workingInfo); visualCtrl.SetBindingData(visual, workingInfo); var item = group.AddItem(visual.Name, visualCtrl); item.TextVisible = false; _visualCtrlList.Add(visualCtrl); } group.BestFit(); group.LayoutMode = LayoutMode.Flow; group.AllowBorderColorBlending = true; group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); foreach (LayoutControlItem item in group.Items) { item.Size = new Size(200, 80); } } #endregion #region 水箱 if (hydroInfo.Waterboxs != null && hydroInfo.Waterboxs.Count > 0) { var group = this.layoutControl1.AddGroup(); group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Waterbox); group.ExpandButtonVisible = true; group.Expanded = true; group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; group.ExpandOnDoubleClick = true; foreach (var visual in hydroInfo.Waterboxs) { var visualCtrl = new SetHydroWorkingWaterboxCtrl(); visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); var workingInfo = new HydroWorkingWaterboxViewModel(visual); _hydroWorking.WorkingInfo.AppendWorking(workingInfo); visualCtrl.SetBindingData(visual, workingInfo); var item = group.AddItem(visual.Name, visualCtrl); item.TextVisible = false; _visualCtrlList.Add(visualCtrl); } group.BestFit(); group.LayoutMode = LayoutMode.Flow; group.AllowBorderColorBlending = true; group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); foreach (LayoutControlItem item in group.Items) { item.Size = new Size(200, 80); } } #endregion #region 水泵 if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0) { var group = this.layoutControl1.AddGroup(); group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump); group.ExpandButtonVisible = true; group.Expanded = true; group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; group.ExpandOnDoubleClick = true; foreach (var visual in hydroInfo.Pumps) { var visualCtrl = new SetHydroWorkingPumpCtrl(); visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); var workingInfo = new HydroWorkingPumpViewModel(visual); _hydroWorking.WorkingInfo.AppendWorking(workingInfo); visualCtrl.SetBindingData(visual, workingInfo); var item = group.AddItem(visual.Name, visualCtrl); item.TextVisible = false; _visualCtrlList.Add(visualCtrl); } group.BestFit(); group.LayoutMode = LayoutMode.Flow; group.AllowBorderColorBlending = true; group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); foreach (LayoutControlItem item in group.Items) { item.Size = new Size(200, 100); } } #endregion #region 阀门 if (hydroInfo.Valves != null && hydroInfo.Valves.Count > 0) { var group = this.layoutControl1.AddGroup(); group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve); group.ExpandButtonVisible = true; group.Expanded = true; group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; group.ExpandOnDoubleClick = true; foreach (var visual in hydroInfo.Valves) { var visualCtrl = new SetHydroWorkingValveCtrl(); visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); var workingInfo = new HydroWorkingValveViewModel(visual); _hydroWorking.WorkingInfo.AppendWorking(workingInfo); visualCtrl.SetBindingData(visual, workingInfo); var item = group.AddItem(visual.Name, visualCtrl); item.TextVisible = false; _visualCtrlList.Add(visualCtrl); } group.BestFit(); group.LayoutMode = LayoutMode.Flow; group.AllowBorderColorBlending = true; group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); foreach (LayoutControlItem item in group.Items) { item.Size = new Size(200, 100); } } #endregion #region 监测值 if (allMonitorList != null && allMonitorList.Count > 0) { foreach (var monitor in allMonitorList) { var vm = new HydroWorkingMonitorViewModel(monitor); _hydroWorking.MonitorInfo.Add(vm); } } #endregion } /// /// 获取工况 /// public SetHydroWorkingViewModel GetWorking() { if (_hydroInfo == null) { return default; } if (_hydroWorking == null) { return default; } if (_basicCtrl == null) { return default; } var vm = _basicCtrl.GetBindingData(); if (vm == null) { return default; } _visualCtrlList?.ForEach(x => x.GetWorking()); return _hydroWorking; } } }