using DevExpress.Drawing;
using DevExpress.Utils.Svg;
using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using Yw.Vmo;
using Yw.WinFrmUI.Page;
namespace HStation.WinFrmUI
{
public partial class XhsProjectSimulationMgrPage : Yw.WinFrmUI.DocumentPage
{
public XhsProjectSimulationMgrPage()
{
InitializeComponent();
this.PageTitle.Caption = "水力模拟";
this.PageTitle.HeaderSvgImage = this.svgImg32[0];
this.PageTitle.SvgImageSize = new Size(24, 24);
this.simulationFunctionMgrCtrl1.ShowProjectSiteInfoEvent += SimulationFunctionMgrCtrl1_ShowProjectSiteInfoEvent;
this.simulationFunctionMgrCtrl1.ShowProjectSiteSimulationEvent += SimulationFunctionMgrCtrl1_ShowProjectSiteSimulationEvent;
this.simulationFunctionMgrCtrl1.ShowProjectSiteWorkingEvent += SimulationFunctionMgrCtrl1_ShowProjectSiteWorkingEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteWorkingAppendEvent += SimulationFunctionMgrCtrl1_ProjectSiteWorkingAppendEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteWorkingUpdateEvent += SimulationFunctionMgrCtrl1_ProjectSiteWorkingUpdateEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteWorkingRemoveEvent += SimulationFunctionMgrCtrl1_ProjectSiteWorkingRemoveEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteWorkingCheckedEvent += SimulationFunctionMgrCtrl1_ProjectSiteWorkingCheckedEvent;
this.simulationFunctionMgrCtrl1.CreateProjectSiteSchemeEvent += SimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteSchemeAppendEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeAppendEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteSchemeUpdateEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeUpdateEvent;
this.simulationFunctionMgrCtrl1.ProjectSiteSchemeRemoveEvent += SimulationFunctionMgrCtrl1_ProjectSiteSchemeRemoveEvent;
}
private XhsProjectVmo _project = null;//项目
private object _locker = new();//锁定对象
///
/// 初始化数据源
///
public override async void InitialDataSource()
{
base.InitialDataSource();
if (_project == null)
{
return;
}
await this.simulationFunctionMgrCtrl1.SetBindingData(_project);
}
///
/// 绑定数据
///
public async Task SetBindingData(long projectId)
{
_project = await BLLFactory.Instance.GetByID(projectId);
SetBindingData(_project);
}
///
/// 设置数据
///
public void SetBindingData(XhsProjectVmo project)
{
if (project == null)
{
return;
}
_project = project;
this.PageTitle.Caption = $"{_project.Name}\r\n项目模拟";
}
#region 功能面板
//显示项目站概况事件
private void SimulationFunctionMgrCtrl1_ShowProjectSiteInfoEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
Yw.Model.HydroModelInfo hydroInfo,
SvgImage svgImage
)
{
lock (_locker)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Info,
TagName = $"{project.ID}-{projectSite.ID}"
};
if (!IsExistPage(guid, true))
{
var page = new XhsProjectSimulationInfoPage();
page.PageTitle.HeaderSvgImage = svgImage;
page.SetBindingData(project, projectSite, hydroInfo);
CreatePage(page, guid);
}
}
}
//显示项目站水力模拟事件
private void SimulationFunctionMgrCtrl1_ShowProjectSiteSimulationEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
Yw.Model.HydroModelInfo hydroInfo,
Dictionary allWorkingCheckedListDict,
SvgImage svgImage
)
{
lock (_locker)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Simulation,
TagName = $"{project.ID}-{projectSite.ID}-{scheme?.ID}"
};
if (!IsExistPage(guid, true))
{
var page = new XhsProjectSimulationCorePage();
page.PageTitle.HeaderSvgImage = svgImage;
page.AppendWorkingEvent += (working) =>
{
//增加工况事件
this.simulationFunctionMgrCtrl1.AppendWorking(scheme, working);
};
page.SaveModelEvent += (rhs) =>
{
//保存模型事件
return this.simulationFunctionMgrCtrl1.SaveModel(scheme, rhs);
};
page.RefreshModelEvent += () =>
{
//刷新模型事件
return this.simulationFunctionMgrCtrl1.RefreshModel(scheme);
};
page.UpdateSchemeEvent += (rhs) =>
{
//更新方案事件
this.simulationFunctionMgrCtrl1.UpdateScheme(rhs);
};
page.RemoveSchemeEvent += (rhs) =>
{
//移除方案事件
this.simulationFunctionMgrCtrl1.RemoveScheme(rhs);
};
page.SetBindingData(project, projectSite, scheme, hydroInfo, allWorkingCheckedListDict);
CreatePage(page, guid);
}
}
}
//显示项目站工况事件
private void SimulationFunctionMgrCtrl1_ShowProjectSiteWorkingEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
Yw.Model.HydroModelInfo hydroInfo,
HydroWorkingVmo working,
SvgImage svgImage
)
{
lock (_locker)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Working,
TagName = $"{project.ID}-{projectSite.ID}-{scheme?.ID}-{working.ID}"
};
if (!IsExistPage(guid, true))
{
var page = new XhsProjectSimulationWorkingPage();
page.UpdateWorkingEvent += (rhs) =>
{
this.simulationFunctionMgrCtrl1.UpdateWorking(scheme, rhs);
};
page.RemoveWorkingEvent += (rhs) =>
{
this.simulationFunctionMgrCtrl1.RemoveWorking(scheme, rhs);
};
page.PageTitle.HeaderSvgImage = svgImage;
page.SetBindingData(project, projectSite, scheme, hydroInfo, working);
CreatePage(page, guid);
}
}
}
///
/// 项目站工况增加事件
///
private void SimulationFunctionMgrCtrl1_ProjectSiteWorkingAppendEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
HydroWorkingVmo working
)
{
//目前增加工况都是通过模拟界面增加的,功能管理控件属于被通知的,其他地方暂时不关心工况增加
}
//项目站工况更新事件
private void SimulationFunctionMgrCtrl1_ProjectSiteWorkingUpdateEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
HydroWorkingVmo working
)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Simulation,
TagName = $"{project.ID}-{projectSite.ID}-{scheme?.ID}"
};
var page = FindPage(guid);
if (page == null)
{
return;
}
var ctrl = page as XhsProjectSimulationCorePage;
if (ctrl == null)
{
return;
}
ctrl.UpdateWorkingCheckedList(working);
}
//项目站工况移除事件
private void SimulationFunctionMgrCtrl1_ProjectSiteWorkingRemoveEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
HydroWorkingVmo working
)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Simulation,
TagName = projectSite.ID.ToString()
};
var page = FindPage(guid);
if (page == null)
{
return;
}
var ctrl = page as XhsProjectSimulationCorePage;
if (ctrl == null)
{
return;
}
ctrl.RemoveWorkingCheckedList(working);
}
//项目站工况选择改变事件
private void SimulationFunctionMgrCtrl1_ProjectSiteWorkingCheckedEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme,
HydroWorkingVmo working,
bool hasChecked
)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = SimulationFunctionHelper.Simulation,
TagName = projectSite.ID.ToString()
};
var page = FindPage(guid);
if (page == null)
{
return;
}
var ctrl = page as XhsProjectSimulationCorePage;
if (ctrl == null)
{
return;
}
ctrl.UpdateWorkingCheckedList(working, hasChecked);
}
//项目站方案创建事件
private void SimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
Yw.Model.HydroModelInfo hydroInfo,
SvgImage svgImage
)
{
//WaitFormHelper.ShowWaitForm(this.FindForm(), "正在加载模型,请稍侯...");
//var dlg = new AddXhsSchemeDlg();
//dlg.Shown += delegate { WaitFormHelper.HideWaitForm(this.FindForm()); };
//dlg.ReloadDataEvent += (rhs) =>
//{
// this.simulationFunctionMgrCtrl1.AppendScheme(rhs);
//};
//dlg.SetBindingData(project, projectSite, hydroInfo);
//dlg.ShowDialog();
WaitFormHelper.ShowWaitForm(this.FindForm(), "正在加载模型,请稍侯...");
var dlg = new CreateXhsSchemeDlg();
dlg.Shown += delegate { WaitFormHelper.HideWaitForm(this.FindForm()); };
dlg.SetBindingData(project, projectSite, hydroInfo);
dlg.ReloadDataEvent += (rhs) =>
{
this.simulationFunctionMgrCtrl1.AppendScheme(rhs);
};
dlg.ShowDialog();
}
//项目站方案增加事件
private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeAppendEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme
)
{
//被动
}
//项目站方案更新事件
private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeUpdateEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme
)
{
//被动
}
//项目站方案移除事件
private void SimulationFunctionMgrCtrl1_ProjectSiteSchemeRemoveEvent
(
XhsProjectVmo project,
XhsProjectSiteVmo projectSite,
XhsSchemeVmo scheme
)
{
//被动
}
#endregion
#region TabbedView 相关事件处理程序
//选中
private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e)
{
if (e.Document == null)
return;
var surfaceGuid = e.Document.Tag as PageGuid;
if (surfaceGuid == null)
return;
}
//添加
private void tabbedView1_DocumentAdded(object sender, DocumentEventArgs e)
{
}
//激活
private void tabbedView1_DocumentActivated(object sender, DocumentEventArgs e)
{
var page = e.Document.Control as DocumentPage;
if (page == null)
return;
}
//正在关闭Document
private void tabbedView1_DocumentClosing(object sender, DocumentCancelEventArgs e)
{
var page = e.Document.Control as DocumentPage;
if (page == null)
{
return;
}
if (!page.CanClose())
{
e.Cancel = true;
return;
}
page.UnRegistEvents();
}
//关闭 此时控件已经为空
private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
{
}
#endregion
#region Page
//是否存在Page
private new bool IsExistPage(PageGuid pguid, bool isActivePage)
{
if (pguid == null)
{
return false;
}
if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
{
foreach (DockPanel panel in this.dockManager1.Panels)
{
if (panel.Tag != null)
{
if (panel.Tag is PageGuid)
{
if ((panel.Tag as PageGuid).ToString() == pguid.ToString())
{
if (isActivePage)
{
panel.Show();
}
return true;
}
}
}
}
}
if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
{
foreach (BaseDocument doc in this.tabbedView1.Documents)
{
if (doc.Tag != null)
{
if (doc.Tag is PageGuid)
{
if ((doc.Tag as PageGuid).ToString() == pguid.ToString())
{
if (isActivePage)
{
this.tabbedView1.Controller.Activate(doc);
}
return true;
}
}
}
}
}
return false;
}
//更新数据
private new void RefreshPageData(PageGuid pguid)
{
if (pguid == null)
{
return;
}
if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
{
var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (panel != null)
{
if (panel.ControlContainer.Controls.Count > 0)
{
var page = panel.ControlContainer.Controls[0] as DocumentPage;
if (page != null)
{
page.RefreshData();
}
}
return;
}
}
if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
{
var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (doc != null)
{
var page = doc.Control as DocumentPage;
if (page != null)
{
page.RefreshData();
}
return;
}
}
}
//更新PageTitle
private new void UpdatePageTitle(PageGuid pguid, PageTitle title)
{
if (pguid == null || title == null)
return;
if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
{
var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (panel != null)
{
panel.Text = title.Caption;
panel.ImageOptions.Image = title.HeaderImage;
panel.ImageOptions.SvgImage = title.HeaderSvgImage;
panel.ImageOptions.SvgImageSize = title.SvgImageSize;
if (panel.ControlContainer.Controls.Count > 0)
{
var page = panel.ControlContainer.Controls[0] as DocumentPage;
if (page != null)
{
page.PageTitle = title;
}
}
return;
}
}
if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
{
var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (doc != null)
{
doc.Caption = title.Caption;
doc.ImageOptions.Image = title.HeaderImage;
doc.ImageOptions.SvgImage = title.HeaderSvgImage;
doc.ImageOptions.SvgImageSize = title.SvgImageSize;
var page = doc.Control as DocumentPage;
if (page != null)
{
page.PageTitle = title;
}
return;
}
}
}
//创建Page
private new bool CreatePage(DocumentPage page, PageGuid pguid)
{
if (page == null || pguid == null)
{
return false;
}
page.PageGuid = pguid;
page.Dock = DockStyle.Fill;
page.IsExistPageEvent += IsExistPage;
page.CreatePageEvent += CreatePage;
page.RefreshPageDataEvent += RefreshPageData;
page.UpdatePageTitleEvent += UpdatePageTitle;
page.ClosePageEvent += ClosePage;
page.RegistEvents();
switch (pguid.MoudingType)
{
case eMoudingType.Dock:
{
this.dockManager1.BeginUpdate();
DockPanel docPnl = null;
if (pguid.DockType == eDockType.Left)
{
docPnl = this.dockManager1.AddPanel(DockingStyle.Left);
}
else if (pguid.DockType == eDockType.Right)
{
docPnl = this.dockManager1.AddPanel(DockingStyle.Right);
}
docPnl.Footer = Directory.GetCurrentDirectory();
if (page.PageTitle != null)
{
docPnl.Text = page.PageTitle.Caption;
docPnl.ImageOptions.Image = page.PageTitle.HeaderImage;
docPnl.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
docPnl.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
docPnl.Options.ShowCloseButton = page.PageTitle.AllowClose;
}
docPnl.ControlContainer.Controls.Add(page);
docPnl.Tag = pguid;
this.dockManager1.EndUpdate();
docPnl.Show();
}
break;
case eMoudingType.Tab:
{
this.tabbedView1.BeginUpdate();
var doc = this.tabbedView1.AddDocument(page);
doc.Footer = Directory.GetCurrentDirectory();
if (page.PageTitle != null)
{
doc.Caption = page.PageTitle.Caption;
doc.ImageOptions.Image = page.PageTitle.HeaderImage;
doc.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
doc.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
doc.Properties.AllowClose = page.PageTitle.AllowClose ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
}
doc.Tag = pguid;
this.tabbedView1.EndUpdate();
this.tabbedView1.Controller.Activate(doc);
}
break;
default: break;
}
page.InitialDataSource();
return true;
}
//关闭Page
private new void ClosePage(PageGuid pguid)
{
switch (pguid.MoudingType)
{
case eMoudingType.Dock:
{
if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
{
var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (panel != null)
{
if (panel.Visibility != DockVisibility.Hidden)
panel.Close();//会触发正在关闭和关闭事件
//this.dockManager1.RemovePanel(panel);//不会触发正在关闭和关闭事件
}
}
}
break;
case eMoudingType.Tab:
{
if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
{
var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
if (doc != null)
{
this.tabbedView1.Controller.Close(doc);//会触发正在关闭和关闭事件
}
}
}
break;
default: break;
}
}
//查询Page
private DocumentPage FindPage(PageGuid pguid)
{
if (pguid == null)
{
return default;
}
if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
{
foreach (DockPanel panel in this.dockManager1.Panels)
{
if (panel.Tag != null)
{
if (panel.Tag is PageGuid)
{
if ((panel.Tag as PageGuid).ToString() == pguid.ToString())
{
return panel.ControlContainer.Controls[0] as DocumentPage;
}
}
}
}
}
if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
{
foreach (BaseDocument doc in this.tabbedView1.Documents)
{
if (doc.Tag != null)
{
if (doc.Tag is PageGuid)
{
if ((doc.Tag as PageGuid).ToString() == pguid.ToString())
{
return doc.Control as DocumentPage;
}
}
}
}
}
return default;
}
#endregion
}
}