#include "MainWindow.h" #include #include "utils/UiLayoutManager.h" #include "PropertyBrowser.h" #include "ModelBrowser.h" #include "PresetModelPanel.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 "Panel/DataPanelManager.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* presetModel = new DockWidget(tr("preset models"), 0); presetModel->SetDockWidgetTitleBar(new DockTitleBar(presetModel)); presetModel->setObjectName("Dock.PresetModelPanel"); presetModelPanel_ = new PresetModelPanel(0); presetModelPanel_->AttachDock(presetModel); m_mapDockWidget.insert("PresetModelPanel", presetModel); 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* 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); addDockWidget(Qt::LeftDockWidgetArea, presetModel); splitDockWidget(model, viewDock, Qt::Horizontal); // 将预制模型面板与模型浏览器标签化 tabifyDockWidget(model, presetModel); 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(); //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(); //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(); dataPanelManager_ = new DataPanelManager(this, this); connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, dataPanelManager_, &DataPanelManager::OnWorkspaceChanged); // Restore previous UI layout if available UiLayoutManager::Restore(this, 1); //InitChartLayout(); //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 (dataPanelManager_) { delete dataPanelManager_; dataPanelManager_ = nullptr; } if (qtOsgViewWidget_) { qtOsgViewWidget_->Uninitialize(); delete qtOsgViewWidget_; qtOsgViewWidget_ = nullptr; } } 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); } void MainWindow::InitChartLayout() { QString strChart = RecourceHelper::Get().GetBasePath() + "/workspace/Chart.xml"; m_mgrChart.Load(strChart); QVariantList varList = m_mgrChart.GetChartWgt(); for (int nI = 0; nI < varList.size(); nI++) { QVariantMap mapWgt = varList.at(nI).toMap(); QString strWgt = mapWgt.value("Name").toString(); QVariantList listChart = mapWgt.value("Chart").toList(); QMainWindow* mainWindow_ = new QMainWindow; //connect(mainWindow_, &QMainWindow::tabifiedDockWidgetActivated, this, &MainWindow::OnTabifiedDockWidgetActivated); DockWidget* wgtDock = new DockWidget(strWgt, 0); wgtDock->SetDockWidgetTitleBar(new DockTitleBar(wgtDock)); wgtDock->setWidget(mainWindow_); addDockWidget(Qt::BottomDockWidgetArea, wgtDock); for (int nJ = 0; nJ < listChart.size(); nJ++) { QVariantMap mapChart = listChart.at(nJ).toMap(); InitChart(mapChart, mainWindow_); } } } QDockWidget *MainWindow::InitChart(QVariantMap mapChart, QMainWindow* mainWindow) { QString strName = mapChart.value("Name").toString(); QString strType = mapChart.value("Type").toString(); QString after = mapChart.value("after").toString(); QString orientation = mapChart.value("orientation").toString(); int nT = mapChart.value("t").toInt(); QString strFile = mapChart.value("File").toString(); DockWidget* pDock = new DockWidget(strName, 0); if (strType == "Wave" || strType == "Report") { QString xTitle = mapChart.value("xTitle").toString(); QString yTitle = mapChart.value("yTitle").toString(); float xMin = mapChart.value("xMin").toFloat(); float xMax = mapChart.value("xMax").toFloat(); int xCount = mapChart.value("xCount").toInt(); float yMin = mapChart.value("yMin").toFloat(); float yMax = mapChart.value("yMax").toFloat(); int yCount = mapChart.value("yCount").toInt(); QVariantList listCurve = mapChart.value("Curve").toList(); FitCurveDialog *fitCurveDlg = new FitCurveDialog(); fitCurveDlg->AttachDock(pDock); fitCurveDlg->updateTitle(strName + "-" + strFile); fitCurveDlg->updateTitleAxis(xTitle, yTitle); fitCurveDlg->updateMinMaxX(xMin, xMax, xCount); fitCurveDlg->updateMinMaxY(yMin, yMax, yCount); if (strType == "Wave") { fitCurveDlg->updateParseWaveFile(strFile, nT, listCurve); } else if (strType == "Report") { fitCurveDlg->updateParseReportFile(strFile, nT, listCurve); } } else if (strType == "Table") { QString head = mapChart.value("head").toString(); QVariantList listCurve = mapChart.value("Curve").toList(); TargetListWgt *targetUITable = new TargetListWgt; targetUITable->AttachDock(pDock); targetUITable->SetHead(head); targetUITable->updateTitle(strName + "-" + strFile); targetUITable->updateParseFile(strFile, nT, listCurve); } else if (strType == "Lamp") { QString openColor = mapChart.value("openColor").toString(); QString closeColor = mapChart.value("closeColor").toString(); QVariantList listCurve = mapChart.value("Curve").toList(); SignalIndicatorLampUI *signalIndicatorLamp = new SignalIndicatorLampUI; signalIndicatorLamp->AttachDock(pDock); signalIndicatorLamp->updateTitle(strName + "-" + strFile); signalIndicatorLamp->updateLampColor(openColor, closeColor); signalIndicatorLamp->updateParseFile(strFile, nT, listCurve); } else if (strType == "Surface") { QString xTitle = mapChart.value("xTitle").toString(); QString yTitle = mapChart.value("yTitle").toString(); QString zTitle = mapChart.value("zTitle").toString(); float xMin = mapChart.value("xMin").toFloat(); float xMax = mapChart.value("xMax").toFloat(); int xCount = mapChart.value("xCount").toInt(); float yMin = mapChart.value("yMin").toFloat(); float yMax = mapChart.value("yMax").toFloat(); int yCount = mapChart.value("yCount").toInt(); float zMin = mapChart.value("zMin").toFloat(); float zMax = mapChart.value("zMax").toFloat(); int zCount = mapChart.value("zCount").toInt(); QVariantList listCurve = mapChart.value("Curve").toList(); SurfaceDialog *surfaceDlg = new SurfaceDialog(); surfaceDlg->AttachDock(pDock); surfaceDlg->updateTitle(strName + "-" + strFile); surfaceDlg->updateTitleAxis(xTitle, yTitle, zTitle); surfaceDlg->updateMinMaxX(xMin, xMax, xCount); surfaceDlg->updateMinMaxY(yMin, yMax, yCount); surfaceDlg->updateMinMaxZ(zMin, zMax, zCount); surfaceDlg->updateParseFile(strFile, nT, listCurve); } mainWindow->addDockWidget(Qt::LeftDockWidgetArea, pDock); QDockWidget* afterDock = m_mapChartWidget.value(after); if (afterDock) { if (orientation == QString("Horizontal")) { mainWindow->splitDockWidget(afterDock, pDock, Qt::Horizontal); } else if (orientation == QString("Vertical")) { mainWindow->splitDockWidget(afterDock, pDock, Qt::Vertical); } } m_mapChartWidget.insert(strName, pDock); return pDock; } QDockWidget * MainWindow::InitCurveChart(QVariantMap mapChart, QMainWindow * mainWindow) { return nullptr; }