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