duheng
2024-12-27 1c3e5bc50d3045d51cb9a9f747d53442b82d9e2c
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/04-scheme/00-core/CreateXhsSchemeDlg.cs
@@ -1,13 +1,5 @@
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraLayout.Utils;
using Mapster;
namespace HStation.WinFrmUI
{
@@ -17,9 +9,292 @@
        {
            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<string> _change_type_list = null;
        /// <summary>
        ///
        /// </summary>
        public CreateXhsSchemeViewModel ViewModel
        {
            get { return _vm; }
        }
        /// <summary>
        ///
        /// </summary>
        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;
            }
        }
        /// <summary>
        ///
        /// </summary>
        public event Action<HStation.Vmo.XhsSchemeVmo> ReloadDataEvent;
        /// <summary>
        ///
        /// </summary>
        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<Yw.Model.HydroModelInfo>();
            _vm.ProjectSite ??= await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_vm.Project.ID);
            if (_vm.HydroInfo == null)
            {
                var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _vm.ProjectSite.ID, HStation.Xhs.Purpose.Simulation);
                _vm.HydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID);
            }
            _vm.AllSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_vm.ProjectSite.ID);
            this.createXhsSchemeInfoPage1.InitialPage(_vm);
            this.createXhsSchemeInfoPage1.ChangeTypeChangedEvent += (List<string> 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<string> 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<string> 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<IWizardPage<CreateXhsSchemeViewModel>>();
            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<CreateXhsSchemeViewModel> 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<CreateXhsSchemeViewModel> 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();
                    }
                }
            }
        }
    }
}