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;
}
}
}