383 lines
14 KiB
C++
383 lines
14 KiB
C++
#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;
|
||
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("Ŀ<><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);
|
||
|
||
//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<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);
|
||
}
|