using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using HStation.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.xhsProjectSimulationFunctionMgrCtrl1.ProjectSiteSelectedChangedEvent += xhsProjectSimulationFunctionMgrCtrl1_ProjectSiteSelectedChangedEvent;
this.xhsProjectSimulationFunctionMgrCtrl1.ShowXhsProjectInfoEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectInfoEvent;
this.xhsProjectSimulationFunctionMgrCtrl1.ShowXhsProjectSimulationEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectSimulationEvent;
this.xhsProjectSimulationFunctionMgrCtrl1.CreateXhsProjectSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CreateXhsProjectSchemeEvent;
this.xhsProjectSimulationFunctionMgrCtrl1.CompareXhsProjectSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CompareXhsProjectSchemeEvent;
PumpFullInfoViewDlg.JumpPumpFullInfoCtrl += ShowPumpInfo;
}
private long _projectId;//项目id
private XhsProjectVmo _project = null;//项目
private XhsProjectSiteVmo _projectSite = null;//项目站
private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
///
/// 初始化数据源
///
public override void InitialDataSource()
{
base.InitialDataSource();
}
///
/// 绑定数据
///
public async Task SetBindingData(long projectId)
{
_project = await BLLFactory.Instance.GetByID(projectId);
await SetBindingData(_project);
}
///
/// 设置数据
///
public async Task SetBindingData(XhsProjectVmo project)
{
if (project == null)
{
return;
}
_project = project;
_projectId = project.ID;
this.PageTitle.Caption = $"{_project.Name}\r\n项目模拟";
await this.xhsProjectSimulationFunctionMgrCtrl1.SetBindingData(_project);
}
#region 功能面板
//项目站选择改变事件
private async void xhsProjectSimulationFunctionMgrCtrl1_ProjectSiteSelectedChangedEvent(XhsProjectSiteVmo obj)
{
_projectSite = obj;
if (_projectSite != null)
{
var hydroRelation = await BLLFactory.Instance
.GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _projectSite.ID, HStation.Xhs.Purpose.Simulation);
_hydroInfo = await BLLFactory.Instance.GetByID(hydroRelation.ModelID);
this.xhsProjectSimulationFunctionMgrCtrl1.ResetBindingData();
}
}
//显示项目信息事件
private async void XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectInfoEvent(DevExpress.Utils.Svg.SvgImage obj)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = "xhs-project-simulation-info",
};
if (!IsExistPage(guid, true))
{
var page = new XhsProjectSimulationInfoPage();
await page.SetBindingData(_project, _projectSite, _hydroInfo);
CreatePage(page, guid);
}
}
//显示水力模拟事件
private async void XhsProjectSimulationFunctionMgrCtrl1_ShowXhsProjectSimulationEvent(DevExpress.Utils.Svg.SvgImage obj)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = "xhs-project-simulation-core",
};
if (!IsExistPage(guid, true))
{
var page = new XhsProjectSimulationCorePage();
await page.SetBindingData(_project, _projectSite, _hydroInfo);
CreatePage(page, guid);
}
}
//创建项目方案事件
private async void XhsProjectSimulationFunctionMgrCtrl1_CreateXhsProjectSchemeEvent(DevExpress.Utils.Svg.SvgImage obj)
{
if (_projectSite == null)
{
return;
}
//var dlg = new AddXhsProjectSimulationSchemeDlg();
//await dlg.SetBindingData(_projectSite.ID);
//dlg.ReloadDataEvent += (scheme) =>
//{
// this.xhsProjectSimulationFunctionMgrCtrl1.AppendScheme(scheme);
//};
//dlg.ShowDialog();
var dlg = new AddXhsSchemeDlg();
await dlg.SetBindingData(_project, _projectSite, _hydroInfo);
dlg.ShowDialog();
}
//比较项目方案事件
private void XhsProjectSimulationFunctionMgrCtrl1_CompareXhsProjectSchemeEvent(DevExpress.Utils.Svg.SvgImage obj)
{
TipFormHelper.ShowWarn("正在开发中,敬请期待...");
}
#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;
}
//关闭 此时控件已经为空
private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
{
}
#endregion TabbedView 相关事件处理程序
#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;
}
}
#endregion Page
private void ShowPumpInfo(PumpFullInfoCtrl pumpFullInfoCtrl)
{
var guid = new PageGuid()
{
Modular = this.PageGuid.Modular,
MoudingType = eMoudingType.Tab,
Function = "xhs-project-pump-info",
};
if (!IsExistPage(guid, true))
{
CreatePage(pumpFullInfoCtrl, guid);
}
}
}
}