DYTSrouce/src/ui/MainWindow.cpp

383 lines
14 KiB
C++
Raw Normal View History

2025-01-04 04:12:51 +00:00
#include "MainWindow.h"
#include <QBoxLayout>
#include <QUrl>
#include <QFile>
#include <QFileInfo>
#include <QMimeDatabase>
#include <QDir>
#include <qtabwidget.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"
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;
2025-01-05 11:12:18 +00:00
qtOsgViewWidget_->Initialize();
2025-01-04 04:12:51 +00:00
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("Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("Azimuth line of sight") << tr("Pitch gaze angle") // QString::fromLocal8Bit("<22><>λ<EFBFBD><CEBB><EFBFBD>߽<EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>")
<< tr("azimuth") << tr("Pitch angle") // QString::fromLocal8Bit("<22><>λ<EFBFBD><CEBB>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("attribute") << tr("Doppler") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("course") << tr("Speed") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>")
<< tr("longitude") << tr("latitude") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("γ<><CEB3>")
<< tr("distance") << tr("velocity") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22>ٶ<EFBFBD>")
<< tr("Radial dimensions") << tr("Target RCS"); // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>") << QString::fromLocal8Bit("Ŀ<><C4BF>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("Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("Azimuth line of sight") << tr("Pitch gaze angle") // QString::fromLocal8Bit("<22><>λ<EFBFBD><CEBB><EFBFBD>߽<EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>")
<< tr("azimuth") << tr("Pitch angle") // QString::fromLocal8Bit("<22><>λ<EFBFBD><CEBB>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("attribute") << tr("Doppler") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< tr("course") << tr("Speed") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>")
<< tr("longitude") << tr("latitude") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("γ<><CEB3>")
<< tr("distance") << tr("velocity") // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<22>ٶ<EFBFBD>")
<< tr("Radial dimensions") << tr("Target RCS"); // QString::fromLocal8Bit("<22><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>") << QString::fromLocal8Bit("Ŀ<><C4BF>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);
2025-01-05 11:12:18 +00:00
//ui->discript->setText(tr("name: 5year 0412"));
//ui->status->setText(tr("start: no start"));
2025-01-04 04:12:51 +00:00
InitDockLayout();
2025-01-05 11:12:18 +00:00
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
qtOsgViewWidget_->LoadDefaultScene();
OsgViewer::Get().Initialize();
OsgViewer::Get().OnFrame();
2025-01-04 04:12:51 +00:00
#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<QDockWidget*> 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<int> 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);
}