DYT/Source/src/ui/MainWindow.cpp
2024-12-15 00:28:25 +08:00

384 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 "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;
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
OsgViewer::Get().Initialize();
OsgViewer::Get().OnFrame();
m_mapDockWidget.insert("PropertyBrowser", attribte);
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);
const QString wavePath = RecourceHelper::Get().GetBasePath() + "/workspace/Wave.txt";
fitCurveDlg_->InitWaveFile(wavePath);
connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), fitCurveDlg_, SLOT(slotUpdateTime(double)));
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);
const QString speedPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt";
fitYLgCurveDlg_->InitReportFile(speedPath);
connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), fitYLgCurveDlg_, SLOT(slotUpdateTime(double)));
DockWidget* surfaceCurveDock = new DockWidget(tr("3D Curve"), 0);
// addDockWidget(pSettingUI->GetArea("3DCurveDialog"), surfaceCurveDock);
surfaceDlg_ = new SurfaceDialog();
surfaceDlg_->AttachDock(surfaceCurveDock);
m_mapDockWidget.insert("3DCurveDialog", surfaceCurveDock);
const QString rdPath = RecourceHelper::Get().GetBasePath() + "/workspace/RD.txt";
surfaceDlg_->InitRD(rdPath);
connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), surfaceDlg_, SLOT(slotUpdateTime(double)));
{
targetUITable_ = new TargetListWgt;
WorkSpaceManager::Get().SetTargetListWgt(targetUITable_);
QStringList headerLabels;
headerLabels << QString::fromLocal8Bit("Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("γ<EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD>ٶ<EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>") << QString::fromLocal8Bit("Ŀ<EFBFBD><EFBFBD>RCS");
targetUITable_->SetHeader(headerLabels);
const QString reportPath = RecourceHelper::Get().GetBasePath() + "/workspace/Report.txt";
targetUITable_->InitFile(reportPath, 50);
DockWidget* dataTableDock = new DockWidget(tr("Report Table"), 0);
// addDockWidget(pSettingUI->GetArea("TargetListWgt"), dataTableDock);
targetUITable_->AttachDock(dataTableDock);
m_mapDockWidget.insert("TargetListWgt_Table", dataTableDock);
connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), targetUITable_, SLOT(slotTimeChanged(double)));
}
{
targetUI_ = new TargetListWgt;
//WorkSpaceManager::Get().SetTargetListWgt(targetUITable_);
QStringList headerLabels;
headerLabels << QString::fromLocal8Bit("Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("γ<EFBFBD><EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") << QString::fromLocal8Bit("<EFBFBD>ٶ<EFBFBD>")
<< QString::fromLocal8Bit("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>") << QString::fromLocal8Bit("Ŀ<EFBFBD><EFBFBD>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);
connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), targetUI_, SLOT(slotTimeChanged(double)));
}
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);
connect(WorkSpaceManager::Get().GetCurrent()->GetLampStatus(), SIGNAL(StatusChanged(int)), signalIndicatorLampUI_, SLOT(onStatusChanged(int)));
m_mapDockWidget.insert("SignalIndicatorLampUI", signalIndicatorLampDock);
const QString iniPath = RecourceHelper::Get().GetBasePath() + "/workspace/ParamSetting.ini";
DockWidget* addParamSettingDock = new DockWidget(tr("ParamSetting"), 0);
addParamDlg_ = new AddParamSetting(iniPath);
addParamDlg_->AttachDock(addParamSettingDock);
m_mapDockWidget.insert("ParamSetting", addParamSettingDock);
ui->discript->setText(tr("name: 5year 0412"));
ui->status->setText(tr("start: no start"));
InitDockLayout();
#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();
}