using DevExpress.XtraLayout.Utils;
using Mapster;
namespace PBS.WinFrmUI.Hydro
{
public partial class QuickModelingPage : DocumentPage
{
public QuickModelingPage()
{
InitializeComponent();
this.layoutControl1.SetupLayoutControl();
//this.ClosePageEvent += CreateXhsSchemeDlg_FormClosing;
}
///
/// 重载数据
///
//public event Action ReloadDataEvent;
private QuickModelingViewModel _vm = null;//视图
private QuickModelingManager _wizard = null;//管理器
private List> _allPageList = null;//所有页面列表
private List> _bindingPageList = null;//绑定页面列表
///
/// 绑定数据
///
public void SetBindingData
(
)
{
if (project == null)
{
return;
}
if (projectSite == null)
{
return;
}
if (hydroInfo == null)
{
return;
}
var hydroInfoRhs = hydroInfo.Adapt();
_vm = new QuickModelingViewModel(project, projectSite, hydroInfoRhs, allSchemeList);
InitialManager();
}
//初始化管理器
private void InitialManager()
{
if (_vm == null)
{
return;
}
InitialPages();
InitialSteps();
_wizard = new QuickModelingManager(_vm);
_wizard.SelectedPageChangedEvent += _wizard_SelectedPageChangedEvent;
_wizard.SelectedPageStateChangedEvent += _wizard_SelectedPageStateChangedEvent;
_wizard.InitialManager(_bindingPageList?.ToArray());
}
//初始化页面
private void InitialPages()
{
if (_vm == null)
{
return;
}
_bindingPageList = new List>();
if (_allPageList == null)
{
_allPageList = new List>();
}
this.navigationFrame.Pages.Clear();
//基础信息
var pageInfo = _allPageList.Find(x => x is CreateXhsSchemeInfoPage) as CreateXhsSchemeInfoPage;
if (pageInfo == null)
{
pageInfo = new CreateXhsSchemeInfoPage();
pageInfo.Dock = DockStyle.Fill;
_allPageList.Add(pageInfo);
}
_bindingPageList.Add(pageInfo);
this.navigationFrame.AddPage(pageInfo);
if (_vm.Scheme != null && _vm.Scheme.ChangeTypes != null && _vm.Scheme.ChangeTypes.Count > 0)
{
//水池
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Tank))
{
var pageTank = _allPageList.Find(x => x is CreateXhsSchemeTankChangePage) as CreateXhsSchemeTankChangePage;
if (pageTank == null)
{
pageTank = new CreateXhsSchemeTankChangePage();
pageTank.Dock = DockStyle.Fill;
_allPageList.Add(pageTank);
}
_bindingPageList.Add(pageTank);
this.navigationFrame.AddPage(pageTank);
}
//水箱
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Waterbox))
{
var pageWaterbox = _allPageList.Find(x => x is CreateXhsSchemeWaterboxChangePage) as CreateXhsSchemeWaterboxChangePage;
if (pageWaterbox == null)
{
pageWaterbox = new CreateXhsSchemeWaterboxChangePage();
pageWaterbox.Dock = DockStyle.Fill;
_allPageList.Add(pageWaterbox);
}
_bindingPageList.Add(pageWaterbox);
this.navigationFrame.AddPage(pageWaterbox);
}
//闷头
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Blunthead))
{
var pageBlunthead = _allPageList.Find(x => x is CreateXhsSchemeBluntheadChangePage) as CreateXhsSchemeBluntheadChangePage;
if (pageBlunthead == null)
{
pageBlunthead = new CreateXhsSchemeBluntheadChangePage();
pageBlunthead.Dock = DockStyle.Fill;
_allPageList.Add(pageBlunthead);
}
_bindingPageList.Add(pageBlunthead);
this.navigationFrame.AddPage(pageBlunthead);
}
//弯头
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Elbow))
{
var pageElbow = _allPageList.Find(x => x is CreateXhsSchemeElbowChangePage) as CreateXhsSchemeElbowChangePage;
if (pageElbow == null)
{
pageElbow = new CreateXhsSchemeElbowChangePage();
pageElbow.Dock = DockStyle.Fill;
_allPageList.Add(pageElbow);
}
_bindingPageList.Add(pageElbow);
this.navigationFrame.AddPage(pageElbow);
}
//三通
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Threelink))
{
var pageThreelink = _allPageList.Find(x => x is CreateXhsSchemeThreelinkChangePage) as CreateXhsSchemeThreelinkChangePage;
if (pageThreelink == null)
{
pageThreelink = new CreateXhsSchemeThreelinkChangePage();
pageThreelink.Dock = DockStyle.Fill;
_allPageList.Add(pageThreelink);
}
_bindingPageList.Add(pageThreelink);
this.navigationFrame.AddPage(pageThreelink);
}
//四通
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Fourlink))
{
var pageFourlink = _allPageList.Find(x => x is CreateXhsSchemeFourlinkChangePage) as CreateXhsSchemeFourlinkChangePage;
if (pageFourlink == null)
{
pageFourlink = new CreateXhsSchemeFourlinkChangePage();
pageFourlink.Dock = DockStyle.Fill;
_allPageList.Add(pageFourlink);
}
_bindingPageList.Add(pageFourlink);
this.navigationFrame.AddPage(pageFourlink);
}
//水表
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Meter))
{
var pageMeter = _allPageList.Find(x => x is CreateXhsSchemeMeterChangePage) as CreateXhsSchemeMeterChangePage;
if (pageMeter == null)
{
pageMeter = new CreateXhsSchemeMeterChangePage();
pageMeter.Dock = DockStyle.Fill;
_allPageList.Add(pageMeter);
}
_bindingPageList.Add(pageMeter);
this.navigationFrame.AddPage(pageMeter);
}
//流量计
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Flowmeter))
{
var pageFlowmeter = _allPageList.Find(x => x is CreateXhsSchemeFlowmeterChangePage) as CreateXhsSchemeFlowmeterChangePage;
if (pageFlowmeter == null)
{
pageFlowmeter = new CreateXhsSchemeFlowmeterChangePage();
pageFlowmeter.Dock = DockStyle.Fill;
_allPageList.Add(pageFlowmeter);
}
_bindingPageList.Add(pageFlowmeter);
this.navigationFrame.AddPage(pageFlowmeter);
}
//压力表
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pressmeter))
{
var pagePressmeter = _allPageList.Find(x => x is CreateXhsSchemePressmeterChangePage) as CreateXhsSchemePressmeterChangePage;
if (pagePressmeter == null)
{
pagePressmeter = new CreateXhsSchemePressmeterChangePage();
pagePressmeter.Dock = DockStyle.Fill;
_allPageList.Add(pagePressmeter);
}
_bindingPageList.Add(pagePressmeter);
this.navigationFrame.AddPage(pagePressmeter);
}
//消火栓
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Hydrant))
{
var pageHydrant = _allPageList.Find(x => x is CreateXhsSchemeHydrantChangePage) as CreateXhsSchemeHydrantChangePage;
if (pageHydrant == null)
{
pageHydrant = new CreateXhsSchemeHydrantChangePage();
pageHydrant.Dock = DockStyle.Fill;
_allPageList.Add(pageHydrant);
}
_bindingPageList.Add(pageHydrant);
this.navigationFrame.AddPage(pageHydrant);
}
//喷嘴
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Nozzle))
{
var pageNozzle = _allPageList.Find(x => x is CreateXhsSchemeNozzleChangePage) as CreateXhsSchemeNozzleChangePage;
if (pageNozzle == null)
{
pageNozzle = new CreateXhsSchemeNozzleChangePage();
pageNozzle.Dock = DockStyle.Fill;
_allPageList.Add(pageNozzle);
}
_bindingPageList.Add(pageNozzle);
this.navigationFrame.AddPage(pageNozzle);
}
//冷却塔
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Cooling))
{
var pageCooling = _allPageList.Find(x => x is CreateXhsSchemeCoolingChangePage) as CreateXhsSchemeCoolingChangePage;
if (pageCooling == null)
{
pageCooling = new CreateXhsSchemeCoolingChangePage();
pageCooling.Dock = DockStyle.Fill;
_allPageList.Add(pageCooling);
}
_bindingPageList.Add(pageCooling);
this.navigationFrame.AddPage(pageCooling);
}
//管道
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pipe))
{
var pagePipe = _allPageList.Find(x => x is CreateXhsSchemePipeChangePage) as CreateXhsSchemePipeChangePage;
if (pagePipe == null)
{
pagePipe = new CreateXhsSchemePipeChangePage();
pagePipe.Dock = DockStyle.Fill;
_allPageList.Add(pagePipe);
}
_bindingPageList.Add(pagePipe);
this.navigationFrame.AddPage(pagePipe);
}
//过渡件
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Translation))
{
var pageTranslation = _allPageList.Find(x => x is CreateXhsSchemeTranslationChangePage) as CreateXhsSchemeTranslationChangePage;
if (pageTranslation == null)
{
pageTranslation = new CreateXhsSchemeTranslationChangePage();
pageTranslation.Dock = DockStyle.Fill;
_allPageList.Add(pageTranslation);
}
_bindingPageList.Add(pageTranslation);
this.navigationFrame.AddPage(pageTranslation);
}
//水泵
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pump))
{
var pagePump = _allPageList.Find(x => x is CreateXhsSchemePumpChangePage) as CreateXhsSchemePumpChangePage;
if (pagePump == null)
{
pagePump = new CreateXhsSchemePumpChangePage();
pagePump.Dock = DockStyle.Fill;
_allPageList.Add(pagePump);
}
_bindingPageList.Add(pagePump);
this.navigationFrame.AddPage(pagePump);
}
//阀门
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Valve))
{
var pageValve = _allPageList.Find(x => x is CreateXhsSchemeValveChangePage) as CreateXhsSchemeValveChangePage;
if (pageValve == null)
{
pageValve = new CreateXhsSchemeValveChangePage();
pageValve.Dock = DockStyle.Fill;
_allPageList.Add(pageValve);
}
_bindingPageList.Add(pageValve);
this.navigationFrame.AddPage(pageValve);
}
//换热器
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Exchanger))
{
var pageExchanger = _allPageList.Find(x => x is CreateXhsSchemeExchangerChangePage) as CreateXhsSchemeExchangerChangePage;
if (pageExchanger == null)
{
pageExchanger = new CreateXhsSchemeExchangerChangePage();
pageExchanger.Dock = DockStyle.Fill;
_allPageList.Add(pageExchanger);
}
_bindingPageList.Add(pageExchanger);
this.navigationFrame.AddPage(pageExchanger);
}
//压缩机
if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Compressor))
{
var pageCompressor = _allPageList.Find(x => x is CreateXhsSchemeCompressorChangePage) as CreateXhsSchemeCompressorChangePage;
if (pageCompressor == null)
{
pageCompressor = new CreateXhsSchemeCompressorChangePage();
pageCompressor.Dock = DockStyle.Fill;
_allPageList.Add(pageCompressor);
}
_bindingPageList.Add(pageCompressor);
this.navigationFrame.AddPage(pageCompressor);
}
}
//生成
var pageGenerate = _allPageList.Find(x => x is CreateXhsSchemeGeneralWizardPage) as CreateXhsSchemeGeneralWizardPage;
if (pageGenerate == null)
{
pageGenerate = new CreateXhsSchemeGeneralWizardPage();
pageGenerate.Dock = DockStyle.Fill;
_allPageList.Add(pageGenerate);
}
_bindingPageList.Add(pageGenerate);
this.navigationFrame.AddPage(pageGenerate);
//变更记录
var pageComplete = _allPageList.Find(x => x is CreateXhsSchemeChangeRecordPage) as CreateXhsSchemeChangeRecordPage;
if (pageComplete == null)
{
pageComplete = new CreateXhsSchemeChangeRecordPage();
pageComplete.Dock = DockStyle.Fill;
_allPageList.Add(pageComplete);
}
_bindingPageList.Add(pageComplete);
this.navigationFrame.AddPage(pageComplete);
}
//初始化步骤
private void InitialSteps()
{
this.stepProgressBar1.Items.Clear();
if (_bindingPageList != null && _bindingPageList.Count > 0)
{
foreach (var page in _bindingPageList)
{
if (page is CreateXhsSchemeInfoPage)
{
AddStepItem("方案信息");
}
else if (page is CreateXhsSchemeTankChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeWaterboxChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Waterbox);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeBluntheadChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Blunthead);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeElbowChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeThreelinkChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeFourlinkChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Fourlink);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeMeterChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Meter);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeFlowmeterChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Flowmeter);
AddStepItem(caption);
}
else if (page is CreateXhsSchemePressmeterChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pressmeter);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeHydrantChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Hydrant);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeNozzleChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Nozzle);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeCoolingChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Cooling);
AddStepItem(caption);
}
else if (page is CreateXhsSchemePipeChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeTranslationChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation);
AddStepItem(caption);
}
else if (page is CreateXhsSchemePumpChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeValveChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeExchangerChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Exchanger);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeCompressorChangePage)
{
var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Compressor);
AddStepItem(caption);
}
else if (page is CreateXhsSchemeGeneralWizardPage)
{
var caption = "创建";
AddStepItem(caption);
}
else if (page is CreateXhsSchemeChangeRecordPage)
{
var caption = "变更记录";
AddStepItem(caption);
}
}
}
}
//选择页面改变
private void _wizard_SelectedPageChangedEvent(IWizardPageAsync page, int index)
{
this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForNext.Visibility = page.AllowNext ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForCancel.Visibility = page.AllowCancel ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
this.navigationFrame.SelectedPageIndex = index;
this.stepProgressBar1.SelectedItemIndex = index;
this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
}
//选择页面状态改变
private void _wizard_SelectedPageStateChangedEvent(IWizardPageAsync page, int index)
{
this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForNext.Visibility = page.AllowNext ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForCancel.Visibility = page.AllowCancel ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
}
//上一步
private async void btnPrev_Click(object sender, EventArgs e)
{
if (_wizard != null)
{
await _wizard.Prev();
}
}
//下一步
private async void btnNext_Click(object sender, EventArgs e)
{
if (_wizard != null)
{
if (_wizard.SelectedIndex == 0)
{
var page = _wizard.SelectedPage;
if (await page.CanNext())
{
InitialManager();
}
}
await _wizard.Next();
}
}
//取消
private async void btnCancel_Click(object sender, EventArgs e)
{
if (_wizard != null)
{
if (await _wizard.Cancel())
{
//this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
}
//完成
private async void btnComplete_Click(object sender, EventArgs e)
{
if (_wizard != null)
{
if (await _wizard.Complete())
{
this.ReloadDataEvent?.Invoke(_vm.Scheme);
//this.DialogResult = DialogResult.OK;
this.Close();
}
}
}
//正在关闭
private async void CreateXhsSchemeDlg_FormClosing(object sender, FormClosingEventArgs e)
{
if (_wizard != null)
{
//if (this.DialogResult == DialogResult.OK)
//{
// /* if (!_wizard.Complete())
// {
// e.Cancel = true;
// }*/
//}
//else if (this.DialogResult == DialogResult.Cancel)
//{
// if (!await _wizard.Cancel())
// {
// e.Cancel = true;
// }
//}
//else
//{
// e.Cancel = true;
//}
}
}
//添加步骤项
private void AddStepItem(string caption)
{
this.stepProgressBar1.BeginInit();
var item = new StepProgressBarItem();
item.ContentBlock2.Caption = caption;
item.Options.Indicator.ActiveStateDrawMode = IndicatorDrawMode.Full;
item.Options.Indicator.ActiveStateImageOptions.SvgImage = null;
item.Options.Indicator.InactiveStateImageOptions.SvgImage = null;
item.State = StepProgressBarItemState.Inactive;
this.stepProgressBar1.Items.Add(item);
this.stepProgressBar1.EndInit();
}
}
}