yangyin
2024-08-21 04e1d0a290ff76bf623bd9de075b350b8b77ba25
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-scheme/XhsSchemeMultiMgrPage.cs
@@ -1,6 +1,6 @@
using DevExpress.Utils;
using NetTaste;
using Yw.Service.Hydro;
using DevExpress.XtraBars.Docking;
using DevExpress.XtraBars.Docking2010.Views;
using Yw.WinFrmUI.Page;
namespace HStation.WinFrmUI
{
@@ -12,10 +12,19 @@
            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>
        /// 绑定数据
@@ -23,6 +32,7 @@
        /// <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);
@@ -41,81 +51,385 @@
            _hydroInfo = await new Yw.BLL.HydroModelInfo().GetByID(relation.ModelID);
        }
        /// <summary>
        /// 绑定数据
        /// </summary>
        /// <param name="project">项目</param>
        public void SetBindingData(HStation.Dto.XhsProjectStdDto project)
        //功能点击
        private async void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e)
        {
            _project = project;
            this.PageTitle.Caption = $"{_project?.Name}\n方案管理";
            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;
            }
        }
        /// <summary>
        /// 初始化数据源
        /// </summary>
        public override async void InitialDataSource()
        #region TabbedView 相关事件处理程序
        //选中
        private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e)
        {
            base.InitialDataSource();
            this.bimfaceInterop3dContainer1.LoadCompletedEvent += BimfaceInterop3dContainer1_LoadCompletedEvent;
            this.bimfaceInterop3dContainer1.ClickInEvent += BimfaceInterop3dContainer1_ClickInEvent;
            await this.bimfaceInterop3dContainer1.InitialContainer();
            if (e.Document == null)
                return;
            var surfaceGuid = e.Document.Tag as PageGuid;
            if (surfaceGuid == null)
                return;
        }
        /// <summary>
        /// 页面加载完成后触发
        /// </summary>
        private async void BimfaceInterop3dContainer1_LoadCompletedEvent()
        //添加
        private void tabbedView1_DocumentAdded(object sender, DocumentEventArgs e)
        {
            if (_project == null)
            {
                return;
            }
            var projectSite = await new BLL.XhsProjectSiteStd().GetDefaultByProjectID(_project.ID);
            if (projectSite == null)
            {
                return;
            }
            var relation = await new Yw.BLL.BimfaceFileRelationStd()
                .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, projectSite.ID, Yw.Bimface.Purpose.Simulation);
            if (relation == null)
            {
                return;
            }
            var bimfaceFile = await new Yw.BLL.BimfaceFileStd().GetByID(relation.BimfaceFileID);
            if (bimfaceFile == null)
            {
                return;
            }
            var viewToken = await BimfaceHelper.GetViewToken(bimfaceFile.BimfaceId);
            if (string.IsNullOrEmpty(viewToken))
            {
                return;
            }
            await this.bimfaceInterop3dContainer1.LoadView(viewToken);
        }
        /// <summary>
        /// 点击事件
        /// </summary>
        private void BimfaceInterop3dContainer1_ClickInEvent(Yw.WinFrmUI.Bimface.ClickIn3dInfo obj)
        //激活
        private void tabbedView1_DocumentActivated(object sender, DocumentEventArgs e)
        {
            //if (_hydroInfo == null)
            //{
            //    return;
            //}
            //var allParterList = _hydroInfo.GetAllParters();
            //var parter = allParterList.Find(x => x.Code == obj.ObjectId);
            //if (parter != null)
            //{
            //    var vm = HydroParterPropertyViewModelBuilder.CreateViewModel(parter, allParterList);
            //    this.hydroParterPropertyCtrl1.SelectedObject = vm;
            //}
            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
    }
}