#include "MainWindow.h" #include #include "utils/UiLayoutManager.h" #include "PropertyBrowser.h" #include "ModelBrowser.h" #include "DockWidget.h" #include "viewer/QtOsgViewWidget.h" #include "viewer/OsgViewer.h" #include "chartPlot/FitCurveDialog.h" #include "chartPlot/SurfaceDialog.h" #include "Layout/LayoutSettingUI.h" #include "Layout/SignalIndicatorLampUI.h" #include "Layout/AddParamSetting.h" #include "Layout/CodeEdtUI.h" #include "Table/targetlistwgt.h" #include "common/RecourceHelper.h" #include "../workspace/WorkSpaceManager.h" #include "../workspace/WorkSpace.h" #include "../workspace/Timestep.h" #include "../workspace/LampStatus.h" #include "Matlab/MatlabObject.h" #include "ui_MainWindow.h" #include "viewer/OsgWidget.h" #include "DockTitleBar.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); InitUI(); } MainWindow::~MainWindow() { UninitUI(); delete ui; } void MainWindow::InitUI() { QWidget* centralWidget = takeCentralWidget(); if (nullptr != centralWidget) { delete centralWidget; } setDockNestingEnabled(true); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); setDockOptions(QMainWindow::AllowTabbedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AnimatedDocks); DockWidget* model = new DockWidget(tr("model elements"), 0); model->SetDockWidgetTitleBar(new DockTitleBar(model)); model->setObjectName("Dock.ModelBrowser"); // addDockWidget(pSettingUI->GetArea("ModelBrowser"), model); modelBrowser_ = new ModelBrowser(0); modelBrowser_->AttachDock(model); m_mapDockWidget.insert("ModelBrowser", model); DockWidget* attribte = new DockWidget(tr("attribte"), 0); attribte->SetDockWidgetTitleBar(new DockTitleBar(attribte)); attribte->setObjectName("Dock.PropertyBrowser"); //addDockWidget(pSettingUI->GetArea("PropertyBrowser"), attribte); propertyBrowser_ = new PropertyBrowser(0); propertyBrowser_->AttachDock(attribte); m_mapDockWidget.insert("PropertyBrowser", attribte); addDockWidget(Qt::RightDockWidgetArea, attribte); connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange); connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange); qtOsgViewWidget_ = new OsgWidget; qtOsgViewWidget_->Initialize(); // 主视图改为 DockWidget,支持自由停靠 DockWidget* viewDock = new DockWidget(tr("Main View"), 0); viewDock->SetDockWidgetTitleBar(new DockTitleBar(viewDock)); viewDock->setObjectName("Dock.MainView"); viewDock->setWidget(qtOsgViewWidget_); addDockWidget(Qt::LeftDockWidgetArea, viewDock); m_mapDockWidget.insert("MainView", viewDock); addDockWidget(Qt::LeftDockWidgetArea, model); splitDockWidget(model, viewDock, Qt::Horizontal); QString wavePath ="", speedPath = "", rdPath = "", matlabParam=""; if (WorkSpaceManager::Get().GetCurrent()) { if (!WorkSpaceManager::Get().GetCurrent()->GetWavePath().isEmpty()) { wavePath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetWavePath(); } if (!WorkSpaceManager::Get().GetCurrent()->GetReportPath().isEmpty()) { speedPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetReportPath(); } if (!WorkSpaceManager::Get().GetCurrent()->GetRDPath().isEmpty()) { rdPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetRDPath(); } if (!WorkSpaceManager::Get().GetCurrent()->GetMatlabParam().isEmpty()) { matlabParam = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetMatlabParam(); } } DockWidget* fitCurveDock = new DockWidget(tr("Wave Curve"), 0); fitCurveDock->SetDockWidgetTitleBar(new DockTitleBar(fitCurveDock)); fitCurveDock->setObjectName("Dock.WaveCurveDialog"); fitCurveDlg_ = new FitCurveDialog(1); fitCurveDlg_->AttachDock(fitCurveDock); m_mapDockWidget.insert("WaveCurveDialog", fitCurveDock); addDockWidget(Qt::BottomDockWidgetArea, fitCurveDock); fitCurveDlg_->InitWaveFile(wavePath); DockWidget* fitLgCurveDock = new DockWidget(tr("Speed Curve"), 0); fitLgCurveDock->SetDockWidgetTitleBar(new DockTitleBar(fitLgCurveDock)); fitLgCurveDock->setObjectName("Dock.SpeedCurveDialog"); fitYLgCurveDlg_ = new FitCurveDialog(1); fitYLgCurveDlg_->AttachDock(fitLgCurveDock); m_mapDockWidget.insert("SpeedCurveDialog", fitLgCurveDock); addDockWidget(Qt::BottomDockWidgetArea, fitLgCurveDock); tabifyDockWidget(fitCurveDock, fitLgCurveDock); fitYLgCurveDlg_->InitReportFile(speedPath); DockWidget* surfaceCurveDock = new DockWidget(tr("3D Curve"), 0); surfaceCurveDock->SetDockWidgetTitleBar(new DockTitleBar(surfaceCurveDock)); surfaceCurveDock->setObjectName("Dock.3DCurveDialog"); surfaceDlg_ = new SurfaceDialog(); surfaceDlg_->AttachDock(surfaceCurveDock); m_mapDockWidget.insert("3DCurveDialog", surfaceCurveDock); addDockWidget(Qt::BottomDockWidgetArea, surfaceCurveDock); tabifyDockWidget(fitCurveDock, surfaceCurveDock); surfaceDlg_->InitRD(rdPath); { targetUITable_ = new TargetListWgt; QStringList headerLabels; headerLabels << tr("Target number") << tr("Signal-to-noise ratio") << tr("Azimuth line of sight") << tr("Pitch gaze angle") << tr("azimuth") << tr("Pitch angle") << tr("attribute") << tr("Doppler") << tr("course") << tr("Speed") << tr("longitude") << tr("latitude") << tr("distance") << tr("velocity") << tr("Radial dimensions") << tr("Target RCS"); targetUITable_->SetHeader(headerLabels); //const QString reportPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt"; targetUITable_->InitFile(speedPath, 50); DockWidget* dataTableDock = new DockWidget(tr("Report Table"), 0); dataTableDock->SetDockWidgetTitleBar(new DockTitleBar(dataTableDock)); dataTableDock->setObjectName("Dock.TargetListWgt_Table"); // addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock); targetUITable_->AttachDock(dataTableDock); m_mapDockWidget.insert("TargetListWgt_Table", dataTableDock); addDockWidget(Qt::BottomDockWidgetArea, dataTableDock); tabifyDockWidget(fitCurveDock, dataTableDock); } const QString lampPath = RecourceHelper::Get().GetBasePath() + "/workspace/Lamp.txt"; DockWidget* signalIndicatorLampDock = new DockWidget(tr("Signal Indicator Lamp"), 0); signalIndicatorLampDock->SetDockWidgetTitleBar(new DockTitleBar(signalIndicatorLampDock)); signalIndicatorLampDock->setObjectName("Dock.SignalIndicatorLampUI"); signalIndicatorLampUI_ = new SignalIndicatorLampUI; signalIndicatorLampUI_->AttachDock(signalIndicatorLampDock); signalIndicatorLampUI_->InitLamp(lampPath); m_mapDockWidget.insert("SignalIndicatorLampUI", signalIndicatorLampDock); addDockWidget(Qt::BottomDockWidgetArea, signalIndicatorLampDock); tabifyDockWidget(fitCurveDock, signalIndicatorLampDock); DockWidget* addParamSettingDock = new DockWidget(tr("ParamSetting"), 0); addParamSettingDock->SetDockWidgetTitleBar(new DockTitleBar(addParamSettingDock)); addParamSettingDock->setObjectName("Dock.ParamSetting"); addParamDlg_ = new AddParamSetting(matlabParam); addParamDlg_->AttachDock(addParamSettingDock); m_mapDockWidget.insert("ParamSetting", addParamSettingDock); addDockWidget(Qt::BottomDockWidgetArea, addParamSettingDock); tabifyDockWidget(fitCurveDock, addParamSettingDock); DockWidget* matlabDock = new DockWidget(tr("bat File"), 0); matlabDock->SetDockWidgetTitleBar(new DockTitleBar(matlabDock)); matlabDock->setObjectName("Dock.Matlab"); matlabFileDlg_ = new CodeEdtUI; matlabFileDlg_->AttachDock(matlabDock); m_mapDockWidget.insert("Matlab", matlabDock); addDockWidget(Qt::BottomDockWidgetArea, matlabDock); tabifyDockWidget(fitCurveDock, matlabDock); //ui->discript->setText(tr("name: 5year 0412")); //ui->status->setText(tr("start: no start")); // InitDockLayout(); // Restore previous UI layout if available UiLayoutManager::Restore(this, 1); //ui->viewWidget->layout()->addWidget(qtOsgViewWidget_); qtOsgViewWidget_->LoadDefaultScene(); /*OsgViewer::Get().Initialize(); OsgViewer::Get().OnFrame();*/ #if 0 // MatlabObject* mtlb = new MatlabObject; MatlabObject::GetInstance()->RunMatlabFile(""); #endif // 1 } void MainWindow::UninitUI() { // Save layout state before tearing down widgets UiLayoutManager::Save(this, 1); if (qtOsgViewWidget_) { qtOsgViewWidget_->Uninitialize(); delete qtOsgViewWidget_; qtOsgViewWidget_ = nullptr; } } void MainWindow::slotShowUISetting() { pSettingUI->show(); } void MainWindow::slotResetWorkSpace() { QString wavePath = "", speedPath = "", rdPath = ""; if (WorkSpaceManager::Get().GetCurrent()) { if (!WorkSpaceManager::Get().GetCurrent()->GetWavePath().isEmpty()) { wavePath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetWavePath(); } if (!WorkSpaceManager::Get().GetCurrent()->GetReportPath().isEmpty()) { speedPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetReportPath(); } if (!WorkSpaceManager::Get().GetCurrent()->GetRDPath().isEmpty()) { rdPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetRDPath(); } } fitCurveDlg_->InitWaveFile(wavePath); fitYLgCurveDlg_->InitReportFile(speedPath); surfaceDlg_->InitRD(rdPath); targetUITable_->InitFile(speedPath, 50); }