#include "MainWindow.h" #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" #include "viewer/OsgWidget.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); InitUI(); } MainWindow::~MainWindow() { UninitUI(); 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 OsgWidget; qtOsgViewWidget_->Initialize(); //m_mapDockWidget.insert("PropertyBrowser", attribte); 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); fitCurveDlg_ = new FitCurveDialog(1); fitCurveDlg_->AttachDock(fitCurveDock); m_mapDockWidget.insert("WaveCurveDialog", fitCurveDock); fitCurveDlg_->InitWaveFile(wavePath); DockWidget* fitLgCurveDock = new DockWidget(tr("Speed Curve"), 0); fitYLgCurveDlg_ = new FitCurveDialog(1); fitYLgCurveDlg_->AttachDock(fitLgCurveDock); m_mapDockWidget.insert("SpeedCurveDialog", fitLgCurveDock); fitYLgCurveDlg_->InitReportFile(speedPath); DockWidget* surfaceCurveDock = new DockWidget(tr("3D Curve"), 0); 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") << 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); // addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock); targetUITable_->AttachDock(dataTableDock); m_mapDockWidget.insert("TargetListWgt_Table", 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); DockWidget* addParamSettingDock = new DockWidget(tr("ParamSetting"), 0); addParamDlg_ = new AddParamSetting(matlabParam); addParamDlg_->AttachDock(addParamSettingDock); m_mapDockWidget.insert("ParamSetting", addParamSettingDock); DockWidget* matlabDock = new DockWidget(tr("bat File"), 0); matlabFileDlg_ = new CodeEdtUI; matlabFileDlg_->AttachDock(matlabDock); m_mapDockWidget.insert("Matlab", matlabDock); //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; MatlabObject::GetInstance()->RunMatlabFile(""); #endif // 1 } void MainWindow::UninitUI() { if (qtOsgViewWidget_) { qtOsgViewWidget_->Uninitialize(); delete qtOsgViewWidget_; qtOsgViewWidget_ = nullptr; } } void MainWindow::InitDockLayout() { while (tabWidget_->count() > 0) { tabWidget_->removeTab(0); } tabWidget_->tabBar()->setExpanding(true); 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; connect(mainWindow_, &QMainWindow::tabifiedDockWidgetActivated, this, &MainWindow::OnTabifiedDockWidgetActivated); 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; } } } } } } tabWidget_->tabBar()->setMinimumWidth(500); /* 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::OnTabifiedDockWidgetActivated(QDockWidget* dockWidget) { if (dockWidget) { QMainWindow* mainWindow = qobject_cast(dockWidget->parentWidget()); if (mainWindow) { mainWindow->removeDockWidget(dockWidget); } // tabWidget_->setCurrentWidget(dockWidget->parentWidget()); } } 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); }