DYTSrouce/src/ui/MainWindow.cpp

383 lines
14 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}