using DevExpress.XtraLayout.Utils; using Mapster; namespace HStation.WinFrmUI { public partial class CreateXhsSchemeDlg : DevExpress.XtraEditors.XtraForm { public CreateXhsSchemeDlg() { InitializeComponent(); this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon; } private readonly CreateXhsSchemeViewModel _vm = new(); private CreateXhsSchemeManager _wizard=null; private bool _initial_wizard_manager = false;//运行下一步 private List _change_type_list = null; /// /// /// public CreateXhsSchemeViewModel ViewModel { get { return _vm; } } /// /// /// public int SelectedPageIndex { get { return this.navigationFrameMain.SelectedPageIndex; } set { if (value == 0) { _initial_wizard_manager = false; InitialButtonStatus(_change_type_list); } else { _initial_wizard_manager = true; InitialWizardManager(_change_type_list); } this.navigationFrameMain.SelectedPageIndex = value; } } /// /// /// public event Action ReloadDataEvent; /// /// /// public async void SetBindingData ( HStation.Vmo.XhsProjectVmo project, HStation.Vmo.XhsProjectSiteVmo project_site, Yw.Model.HydroModelInfo hydro_info ) { this.itemForNext.Visibility = LayoutVisibility.Never; this.itemForPrev.Visibility = LayoutVisibility.Never; this.itemForComplete.Visibility = LayoutVisibility.Always; this.itemForCancel.Visibility = LayoutVisibility.Always; if (project == null) return; _vm.Project = project; _vm.ProjectSite = project_site; _vm.HydroInfo = hydro_info.Adapt(); _vm.ProjectSite ??= await BLLFactory.Instance.GetDefaultByProjectID(_vm.Project.ID); if (_vm.HydroInfo == null) { var hydroRelation = await BLLFactory.Instance .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _vm.ProjectSite.ID, HStation.Xhs.Purpose.Simulation); _vm.HydroInfo = await BLLFactory.Instance.GetByID(hydroRelation.ModelID); } _vm.AllSchemeList = await BLLFactory.Instance.GetBySiteID(_vm.ProjectSite.ID); this.createXhsSchemeInfoPage1.InitialPage(_vm); this.createXhsSchemeInfoPage1.ChangeTypeChangedEvent += (List change_type_list) => { _initial_wizard_manager = false; _change_type_list = change_type_list; InitialButtonStatus(change_type_list); }; this.FormClosing += (s, e) => { if (_wizard != null) { if (this.DialogResult == DialogResult.OK) { if (!_wizard.Complete()) { e.Cancel = true; } } else if (this.DialogResult == DialogResult.Cancel) { //if (!_wizard.Cancel()) //{ // e.Cancel = true; //} } else { e.Cancel = true; } } }; } //添加步骤项 private void AddStepProgressBarItem(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(); } //初始化按钮状态 private void InitialButtonStatus(List change_type_list) { if (change_type_list == null || !change_type_list.Any()) { this.itemForNext.Visibility = LayoutVisibility.Never; this.itemForComplete.Visibility = LayoutVisibility.Always; } else { this.itemForPrev.Visibility = LayoutVisibility.Never; this.itemForNext.Visibility = LayoutVisibility.Always; this.itemForComplete.Visibility = LayoutVisibility.Never; this.itemForCancel.Visibility = LayoutVisibility.Always; } } //初始化步骤管理器 private void InitialWizardManager(List change_type_list) { if (change_type_list == null || !change_type_list.Any()) return; var overlay = this.ShowOverlay(); this.stepProgressBar1.Items.Clear(); this.navigationFrameStep.Pages.Clear(); var page_list = new List>(); if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Pipe)) { var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe); AddStepProgressBarItem(caption); page_list.Add(new CreateXhsSchemePipeChangePage()); } if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Pump)) { var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump); AddStepProgressBarItem(caption); page_list.Add(new CreateXhsSchemePumpChangePage()); } if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Valve)) { var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve); AddStepProgressBarItem(caption); page_list.Add(new CreateXhsSchemeValveChangePage()); } AddStepProgressBarItem("变更记录"); page_list.Add(new CreateXhsSchemeChangeRecordPage()); foreach (var item in page_list) { var ctrl = item as XtraUserControl; ctrl.Dock = DockStyle.Fill; this.navigationFrameStep.AddPage(ctrl); } _wizard = new CreateXhsSchemeManager(_vm); _wizard.SelectedPageChangedEvent += _wizard_SelectedPageChangedEvent; _wizard.SelectedPageStateChangedEvent += _wizard_SelectedPageStateChangedEvent; _wizard.InitialManager(page_list.ToArray()); overlay.Close(); } //选择页面改变 private void _wizard_SelectedPageChangedEvent(IWizardPage 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.navigationFrameStep.SelectedPageIndex = index; this.stepProgressBar1.SelectedItemIndex = index; } //选择页面状态改变 private void _wizard_SelectedPageStateChangedEvent(IWizardPage 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; } //上一步 private void btnPrev_Click(object sender, EventArgs e) { if (_wizard != null) { if (_wizard.SelectedIndex == 0) { this.SelectedPageIndex = 0; } else { _wizard.Prev(); } } } //下一步 private void btnNext_Click(object sender, EventArgs e) { if (!_initial_wizard_manager) { if (this.createXhsSchemeInfoPage1.CanNext()) { this.SelectedPageIndex = 1; } } else { if (_wizard != null) { _wizard.Next(); } } } //取消 private void btnCancel_Click(object sender, EventArgs e) { if (_wizard != null) { var bol = _wizard.Cancel(); if (bol) { this.DialogResult = DialogResult.Cancel; this.Close(); } } } //完成 private void btnComplete_Click(object sender, EventArgs e) { if (this.SelectedPageIndex == 0) { if (this.createXhsSchemeInfoPage1.CanComplete()) { this.ReloadDataEvent?.Invoke(_vm.Scheme); this.DialogResult = DialogResult.OK; this.Close(); } } else { if (_wizard != null) { var bol = _wizard.Complete(); if (bol) { this.ReloadDataEvent?.Invoke(_vm.Scheme); this.DialogResult = DialogResult.OK; this.Close(); } } } } } }