lixiaojun
2024-09-11 ec0d0b6f8e3ac7791c736ae8aad69c4a1587cad9
WinFrmUI/HStation.WinFrmUI.Xhs.Core/04-simulation/XhsProjectSimulationMgrPage.cs
@@ -1,4 +1,8 @@
namespace HStation.WinFrmUI
using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using Yw.WinFrmUI.Page;
namespace HStation.WinFrmUI
{
    public partial class XhsProjectSimulationMgrPage : Yw.WinFrmUI.DocumentPage
    {
@@ -6,6 +10,423 @@
        {
            InitializeComponent();
            this.PageTitle.Caption = "水力模拟";
            this.PageTitle.HeaderSvgImage = this.svgImg32[0];
            this.PageTitle.SvgImageSize = new Size(24, 24);
        }
        private XhsProjectStdDto _project = null;
        private Yw.Model.HydroModelInfo _hydroInfo = null;
        /// <summary>
        /// 初始化数据源
        /// </summary>
        public override void InitialDataSource()
        {
            base.InitialDataSource();
        }
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="projectId">项目id</param>
        public async Task SetBindingData(long projectId)
        {
            //this.xhsSchemeMgrListCtrl1.SetBindingData(projectId);
            //_project = await new BLL.XhsProjectStd().GetByID(projectId);
            //this.PageTitle.Caption = $"{_project?.Name}\r\n方案管理";
            //var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
            //if (projectSite == null)
            //{
            //    return;
            //}
            //var relation = await new Yw.BLL.HydroModelRelation()
            //    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
            //if (relation == null)
            //{
            //    return;
            //}
            //_hydroInfo = await new Yw.BLL.HydroModelInfo().GetByID(relation.ModelID);
        }
        //功能点击
        private async void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
        {
            var tag = e.Element.Tag;
            if (tag is not string code)
                return;
            var svg_image_size = new Size(24, 24);
            switch (code)
            {
                case "basic_info":
                    {
                        var guid = new PageGuid()
                        {
                            Modular = this.PageGuid.Modular,
                            MoudingType = eMoudingType.Tab,
                            Function = "basic_info",
                        };
                        if (!IsExistPage(guid, true))
                        {
                            var page = new XhsSchemeBasicInfoPage();
                            page.SetBindingData(_project.ID);
                            page.PageTitle.Caption = e.Element.Text;
                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
                            page.PageTitle.SvgImageSize = svg_image_size;
                            CreatePage(page, guid);
                        }
                    }
                    break;
                case "asset_mgr":
                    {
                        var guid = new PageGuid()
                        {
                            Modular = this.PageGuid.Modular,
                            MoudingType = eMoudingType.Tab,
                            Function = "asset_mgr",
                        };
                        if (!IsExistPage(guid, true))
                        {
                            var page = new XhsSchemeAssetMgrPage();
                            await page.SetBindingData(_project.ID);
                            page.PageTitle.Caption = e.Element.Text;
                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
                            page.PageTitle.SvgImageSize = svg_image_size;
                            CreatePage(page, guid);
                        }
                    }
                    break;
                case "hydraulic_simulation":
                    {
                        var guid = new PageGuid()
                        {
                            Modular = this.PageGuid.Modular,
                            MoudingType = eMoudingType.Tab,
                            Function = "hydraulic_simulation",
                        };
                        if (!IsExistPage(guid, true))
                        {
                            var page = new XhsSchemeHydraulicSimulationPage();
                            await page.SetBindingData(_project.ID);
                            page.PageTitle.Caption = e.Element.Text;
                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
                            page.PageTitle.SvgImageSize = svg_image_size;
                            CreatePage(page, guid);
                        }
                    }
                    break;
                case "create_scheme":
                    {
                        var dlg = new CreateSchemeDlg();
                        dlg.ShowDialog();
                    }
                    break;
                case "scheme_comparison":
                    {
                        var guid = new PageGuid()
                        {
                            Modular = this.PageGuid.Modular,
                            MoudingType = eMoudingType.Tab,
                            Function = "scheme_comparison",
                        };
                        if (!IsExistPage(guid, true))
                        {
                            var page = new XhsSchemeComparisonPage();
                            page.PageTitle.Caption = e.Element.Text;
                            page.PageTitle.HeaderSvgImage = e.Element.ImageOptions.SvgImage;
                            page.PageTitle.SvgImageSize = svg_image_size;
                            CreatePage(page, guid);
                        }
                    }
                    break;
                default:
                    break;
            }
        }
        #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
    }
}