DYT/Source/src/ui/MainWindow.cpp

371 lines
13 KiB
C++
Raw Normal View History

2024-11-22 15:11:48 +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 "Table/targetlistwgt.h"
#include "common/RecourceHelper.h"
#include "../workspace/WorkSpaceManager.h"
#include "../workspace/WorkSpace.h"
#include "../workspace/Timestep.h"
2024-12-01 17:18:24 +00:00
#include "../workspace/LampStatus.h"
2024-11-22 15:11:48 +00:00
#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);
2024-12-01 17:18:24 +00:00
connect(WorkSpaceManager::Get().GetCurrent()->GetLampStatus(), SIGNAL(StatusChanged(int)), signalIndicatorLampUI_, SLOT(onStatusChanged(int)));
2024-11-22 15:11:48 +00:00
m_mapDockWidget.insert("SignalIndicatorLampUI", signalIndicatorLampDock);
ui->discript->setText(tr("name: 5year 0412"));
ui->status->setText(tr("start: no start"));
InitDockLayout();
}
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();
}