#include "MainWindow.h" #include #include #include #include #include #include #include #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" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); InitUI(); } MainWindow::~MainWindow() { OsgViewer::Get().Uninitialize(); delete ui; } void MainWindow::InitUI() { tabWidget_ = new QTabWidget; tabWidget_->setTabPosition(QTabWidget::South); tabWidget_->tabBar()->setMinimumWidth(300); ui->viewWidget->layout()->addWidget(tabWidget_); pSettingUI = new LayoutSettingUI(); const QString uiLaytouPath = RecourceHelper::Get().GetBasePath() + "/workspace/UILayout.xml"; pSettingUI->InitConfig(uiLaytouPath); //pSettingUI->show(); connect(pSettingUI, &LayoutSettingUI::signalUpdate, this, &MainWindow::InitDockLayout); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); DockWidget* model = new DockWidget(tr("model elements"), 0); // addDockWidget(pSettingUI->GetArea("ModelBrowser"), model); modelBrowser_ = new ModelBrowser(0); modelBrowser_->AttachDock(model); m_mapDockWidget.insert("ModelBrowser", model); DockWidget* attribte = new DockWidget(tr("attribte"), 0); //addDockWidget(pSettingUI->GetArea("PropertyBrowser"), attribte); propertyBrowser_ = new PropertyBrowser(0); propertyBrowser_->AttachDock(attribte); m_mapDockWidget.insert("PropertyBrowser", attribte); connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange); connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange); qtOsgViewWidget_ = new QtOsgViewWidget; qtOsgViewWidget_->Initialize(); m_mapDockWidget.insert("PropertyBrowser", attribte); QString wavePath = WorkSpaceManager::Get().GetDYTWaveFile(); if (wavePath.isEmpty()) { wavePath = RecourceHelper::Get().GetBasePath() + "/workspace/Wave.txt"; WorkSpaceManager::Get().SetDYTWaveFile(wavePath); } // const QString wavePath = RecourceHelper::Get().GetBasePath() + "/workspace/Wave.txt"; QString speedPath = WorkSpaceManager::Get().GetDYTReportFile(); if (speedPath.isEmpty()) { speedPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt"; WorkSpaceManager::Get().SetDYTReportFile(speedPath); } //const QString speedPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt"; QString rdPath = WorkSpaceManager::Get().GetDYTRDFile(); if (rdPath.isEmpty()) { rdPath = RecourceHelper::Get().GetBasePath() + "/workspace/RD.txt"; WorkSpaceManager::Get().SetDYTRDFile(rdPath); } // const QString rdPath = RecourceHelper::Get().GetBasePath() + "/workspace/RD.txt"; DockWidget* fitCurveDock = new DockWidget(tr("Wave Curve"), 0); // addDockWidget(pSettingUI->GetArea("2DCurveDialog"), fitCurveDock); fitCurveDlg_ = new FitCurveDialog(1); fitCurveDlg_->AttachDock(fitCurveDock); m_mapDockWidget.insert("WaveCurveDialog", fitCurveDock); fitCurveDlg_->InitWaveFile(wavePath); DockWidget* fitLgCurveDock = new DockWidget(tr("Speed Curve"), 0); //addDockWidget(pSettingUI->GetArea("2D(lg)CurveDialog"), fitLgCurveDock); fitYLgCurveDlg_ = new FitCurveDialog(1); fitYLgCurveDlg_->AttachDock(fitLgCurveDock); m_mapDockWidget.insert("SpeedCurveDialog", fitLgCurveDock); fitYLgCurveDlg_->InitReportFile(speedPath); DockWidget* surfaceCurveDock = new DockWidget(tr("3D Curve"), 0); // addDockWidget(pSettingUI->GetArea("3DCurveDialog"), surfaceCurveDock); surfaceDlg_ = new SurfaceDialog(); surfaceDlg_->AttachDock(surfaceCurveDock); m_mapDockWidget.insert("3DCurveDialog", surfaceCurveDock); surfaceDlg_->InitRD(rdPath); { targetUITable_ = new TargetListWgt; QStringList headerLabels; headerLabels << tr("Target number") << tr("Signal-to-noise ratio") //QString::fromLocal8Bit("目标编号") << QString::fromLocal8Bit("信噪比") << tr("Azimuth line of sight") << tr("Pitch gaze angle") // QString::fromLocal8Bit("方位视线角") << QString::fromLocal8Bit("俯仰视线角") << tr("azimuth") << tr("Pitch angle") // QString::fromLocal8Bit("方位角") << QString::fromLocal8Bit("俯仰角") << tr("attribute") << tr("Doppler") // QString::fromLocal8Bit("属性") << QString::fromLocal8Bit("多普勒") << tr("course") << tr("Speed") // QString::fromLocal8Bit("航向") << QString::fromLocal8Bit("航速") << tr("longitude") << tr("latitude") // QString::fromLocal8Bit("经度") << QString::fromLocal8Bit("纬度") << tr("distance") << tr("velocity") // QString::fromLocal8Bit("距离") << QString::fromLocal8Bit("速度") << tr("Radial dimensions") << tr("Target RCS"); // QString::fromLocal8Bit("径向尺寸") << QString::fromLocal8Bit("目标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); // addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock); targetUITable_->AttachDock(dataTableDock); m_mapDockWidget.insert("TargetListWgt_Table", dataTableDock); } { targetUI_ = new TargetListWgt; //WorkSpaceManager::Get().SetTargetListWgt(targetUITable_); QStringList headerLabels; headerLabels << tr("Target number") << tr("Signal-to-noise ratio") //QString::fromLocal8Bit("目标编号") << QString::fromLocal8Bit("信噪比") << tr("Azimuth line of sight") << tr("Pitch gaze angle") // QString::fromLocal8Bit("方位视线角") << QString::fromLocal8Bit("俯仰视线角") << tr("azimuth") << tr("Pitch angle") // QString::fromLocal8Bit("方位角") << QString::fromLocal8Bit("俯仰角") << tr("attribute") << tr("Doppler") // QString::fromLocal8Bit("属性") << QString::fromLocal8Bit("多普勒") << tr("course") << tr("Speed") // QString::fromLocal8Bit("航向") << QString::fromLocal8Bit("航速") << tr("longitude") << tr("latitude") // QString::fromLocal8Bit("经度") << QString::fromLocal8Bit("纬度") << tr("distance") << tr("velocity") // QString::fromLocal8Bit("距离") << QString::fromLocal8Bit("速度") << tr("Radial dimensions") << tr("Target RCS"); // QString::fromLocal8Bit("径向尺寸") << QString::fromLocal8Bit("目标RCS"); targetUI_->SetHeader(headerLabels); const QString reportPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt"; targetUI_->InitFile(reportPath, 50); DockWidget* dataTableDock = new DockWidget(tr("Report"), 0); // addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock); targetUI_->AttachDock(dataTableDock); m_mapDockWidget.insert("TargetListWgt", dataTableDock); } const QString lampPath = RecourceHelper::Get().GetBasePath() + "/workspace/Lamp.txt"; DockWidget* signalIndicatorLampDock = new DockWidget(tr("Signal Indicator Lamp"), 0); signalIndicatorLampUI_ = new SignalIndicatorLampUI; signalIndicatorLampUI_->AttachDock(signalIndicatorLampDock); signalIndicatorLampUI_->InitLamp(lampPath); m_mapDockWidget.insert("SignalIndicatorLampUI", signalIndicatorLampDock); const QString iniPath = RecourceHelper::Get().GetBasePath() + "/workspace/ParamSetting.ini"; DockWidget* addParamSettingDock = new DockWidget(tr("ParamSetting"), 0); addParamDlg_ = new CodeEdtUI; addParamDlg_->AttachDock(addParamSettingDock); m_mapDockWidget.insert("ParamSetting", addParamSettingDock); //ui->discript->setText(tr("name: 5year 0412")); //ui->status->setText(tr("start: no start")); InitDockLayout(); //ui->viewWidget->layout()->addWidget(qtOsgViewWidget_); qtOsgViewWidget_->LoadDefaultScene(); OsgViewer::Get().Initialize(); OsgViewer::Get().OnFrame(); #if 0 MatlabObject* mtlb = new MatlabObject; mtlb->RunMatlabFile("D:\\DYT\\TestGUI\\TestGUI\\LDPlatformTest.m"); #endif // 1 } void MainWindow::InitDockLayout() { while (tabWidget_->count() > 0) { tabWidget_->removeTab(0); } QVariantList listTab = pSettingUI->GetAreaLayout().toList(); for (int i = 0; i < listTab.size(); i++) { QVariantMap mapTab = listTab[i].toMap(); QString strTabName = mapTab.value("Name").toString(); QMainWindow* mainWindow_ = new QMainWindow; QVariantList listDocArea = mapTab.value("Widget").toList(); tabWidget_->insertTab(i, mainWindow_, strTabName); if (listDocArea[0].toList().size() > 0) { mainWindow_->setCentralWidget(qtOsgViewWidget_); OsgViewer::Get().Initialize(); OsgViewer::Get().OnFrame(); } else { mainWindow_->takeCentralWidget(); } if (listDocArea.size() > 0) { QDockWidget* lastDock = nullptr; for (int j = 1; j < listDocArea.size(); j++) { Qt::DockWidgetArea dockArea; if (j == 1) { dockArea = Qt::LeftDockWidgetArea; } else if (j == 2) { dockArea = Qt::TopDockWidgetArea; } else if (j == 3) { dockArea = Qt::RightDockWidgetArea; } else if (j == 4) { dockArea = Qt::BottomDockWidgetArea; } QVariantList listDocAreaChild = listDocArea[j].toList(); for (int m = 0; m < listDocAreaChild.size(); m++) { QVariant varWidget = listDocAreaChild[m]; if (varWidget.type() == QVariant::String) { QDockWidget* pDock = m_mapDockWidget.value(varWidget.toString()); if (pDock == nullptr) { continue; } mainWindow_->addDockWidget(dockArea, pDock); lastDock = pDock; } else { QVariantList listWidget = varWidget.toList(); for (int k = 0; k < listWidget.size(); k++) { QDockWidget* pDock = m_mapDockWidget.value(listWidget[k].toString()); mainWindow_->addDockWidget(dockArea, pDock); if (k == 0) { if (lastDock) { mainWindow_->splitDockWidget(lastDock, pDock, Qt::Vertical); } } else { mainWindow_->splitDockWidget(lastDock, pDock, Qt::Horizontal); } lastDock = pDock; } } } } } } /* AddDockArea("DockLeftArea"); AddDockArea("DockTopArea"); AddDockArea("DockRightArea"); AddDockArea("DockBottomArea");*/ } void MainWindow::AddDockArea(const QString& strArea) { Qt::DockWidgetArea dockArea; Qt::Orientation orient; if (strArea == "DockLeftArea") { dockArea = Qt::LeftDockWidgetArea; orient = Qt::Vertical; } else if (strArea == "DockTopArea") { dockArea = Qt::TopDockWidgetArea; orient = Qt::Horizontal; } else if (strArea == "DockRightArea") { dockArea = Qt::RightDockWidgetArea; orient = Qt::Vertical; } else if (strArea == "DockBottomArea") { dockArea = Qt::BottomDockWidgetArea; orient = Qt::Horizontal; } else { return; } QList listAdd; QVariant varArea = pSettingUI->GetAreaLayout(); if (varArea.isValid()) { QVariantList listWidget = varArea.toList(); for each(QVariant varWidget in listWidget) { if (varWidget.type() == QVariant::String) { QDockWidget* pDock = m_mapDockWidget.value(varWidget.toString()); addDockWidget(dockArea, pDock); listAdd.push_back(pDock); } else { QDockWidget* pLastDock = nullptr; QVariantList listTab = varWidget.toList(); for each(QVariant tabChild in listTab) { QDockWidget* pDock = m_mapDockWidget.value(tabChild.toString()); addDockWidget(dockArea, pDock); if (pLastDock) { //tabifyDockWidget(pLastDock, pDock); splitDockWidget(pLastDock, pDock, Qt::Horizontal); } listAdd.push_back(pDock); pLastDock = pDock; } } } } QList listSpliter; for (size_t i = 0; i < listAdd.size(); i++) { listSpliter.push_back(1); } resizeDocks(listAdd, listSpliter, orient); } void MainWindow::slotShowUISetting() { pSettingUI->show(); } void MainWindow::slotResetWorkSpace() { QString wavePath = WorkSpaceManager::Get().GetDYTWaveFile(); if (wavePath.isEmpty()) { wavePath = RecourceHelper::Get().GetBasePath() + "/workspace/Wave.txt"; WorkSpaceManager::Get().SetDYTWaveFile(wavePath); } QString speedPath = WorkSpaceManager::Get().GetDYTReportFile(); if (speedPath.isEmpty()) { speedPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt"; WorkSpaceManager::Get().SetDYTReportFile(speedPath); } QString rdPath = WorkSpaceManager::Get().GetDYTRDFile(); if (rdPath.isEmpty()) { rdPath = RecourceHelper::Get().GetBasePath() + "/workspace/RD.txt"; WorkSpaceManager::Get().SetDYTRDFile(rdPath); } fitCurveDlg_->InitWaveFile(wavePath); fitYLgCurveDlg_->InitReportFile(speedPath); surfaceDlg_->InitRD(rdPath); targetUITable_->InitFile(speedPath, 50); }