DYTSrouce/src/ui/MainWindow.cpp
2025-11-02 14:37:22 +08:00

160 lines
5.4 KiB
C++

#include "MainWindow.h"
#include <qtabwidget.h>
#include "utils/UiLayoutManager.h"
#include "PropertyBrowser.h"
#include "ModelBrowser.h"
#include "ModelBrowser/PresetModelPanel.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 "Panel/DataPanelManager.h"
#include "ui_MainWindow.h"
#include "viewer/OsgWidget.h"
#include "DockTitleBar.h"
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow) {
ui->setupUi(this);
LOG_INFO("MainWindow::MainWindow - Constructor called, about to call InitUI");
InitUI();
LOG_INFO("MainWindow::MainWindow - Constructor completed");
}
MainWindow::~MainWindow() {
UninitUI();
delete ui;
}
void MainWindow::InitUI() {
LOG_INFO("MainWindow::InitUI - Function started");
QWidget* centralWidget = takeCentralWidget();
if (nullptr != centralWidget) {
delete centralWidget;
}
setDockNestingEnabled(true);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
setDockOptions(QMainWindow::AllowTabbedDocks | QMainWindow::AllowNestedDocks | QMainWindow::AnimatedDocks);
DockWidget* model = new DockWidget(tr("model elements"), 0);
model->SetDockWidgetTitleBar(new DockTitleBar(model));
model->setObjectName("Dock.ModelBrowser");
modelBrowser_ = new ModelBrowser(0);
modelBrowser_->AttachDock(model);
mapDockWidget_.insert("ModelBrowser", model);
addDockWidget(Qt::LeftDockWidgetArea, model);
// 创建预制模型面板
DockWidget* presetModel = new DockWidget(tr("preset models"), 0);
presetModel->SetDockWidgetTitleBar(new DockTitleBar(presetModel));
presetModel->setObjectName("Dock.PresetModelPanel");
presetModelPanel_ = new PresetModelPanel(0);
presetModelPanel_->AttachDock(presetModel);
addDockWidget(Qt::LeftDockWidgetArea, presetModel);
mapDockWidget_.insert("PresetModelPanel", presetModel);
DockWidget* attribte = new DockWidget(tr("attribte"), 0);
attribte->SetDockWidgetTitleBar(new DockTitleBar(attribte));
attribte->setObjectName("Dock.PropertyBrowser");
//addDockWidget(pSettingUI->GetArea("PropertyBrowser"), attribte);
propertyBrowser_ = new PropertyBrowser(0);
propertyBrowser_->AttachDock(attribte);
mapDockWidget_.insert("PropertyBrowser", attribte);
addDockWidget(Qt::RightDockWidgetArea, attribte);
connect(modelBrowser_, &ModelBrowser::WorkSpaceChange, propertyBrowser_, &PropertyBrowser::OnWorkSpaceChange);
connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange);
qtOsgViewWidget_ = new OsgWidget;
qtOsgViewWidget_->Initialize();
DockWidget* viewDock = new DockWidget(tr("Main View"), 0);
viewDock->SetDockWidgetTitleBar(new DockTitleBar(viewDock));
viewDock->setObjectName("Dock.MainView");
viewDock->setWidget(qtOsgViewWidget_);
addDockWidget(Qt::LeftDockWidgetArea, viewDock);
mapDockWidget_.insert("MainView", viewDock);
splitDockWidget(model, viewDock, Qt::Horizontal);
// 将预制模型面板与模型浏览器标签化
tabifyDockWidget(model, presetModel);
dataPanelManager_ = new DataPanelManager(this, this);
connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged,
dataPanelManager_, &DataPanelManager::OnWorkspaceChanged);
// Restore previous UI layout if available
LOG_INFO("MainWindow::InitUI - About to call UiLayoutManager::Restore");
UiLayoutManager::Restore(this, 1);
LOG_INFO("MainWindow::InitUI - UiLayoutManager::Restore completed");
//ui->viewWidget->layout()->addWidget(qtOsgViewWidget_);
qtOsgViewWidget_->LoadDefaultScene();
#if 0
MatlabObject::GetInstance()->RunMatlabFile("");
#endif // 1
}
void MainWindow::UninitUI() {
// Save layout state before tearing down widgets
UiLayoutManager::Save(this, 1);
if (dataPanelManager_) {
delete dataPanelManager_;
dataPanelManager_ = nullptr;
}
if (qtOsgViewWidget_) {
qtOsgViewWidget_->Uninitialize();
delete qtOsgViewWidget_;
qtOsgViewWidget_ = nullptr;
}
}
void MainWindow::slotResetWorkSpace()
{
QString wavePath = "", speedPath = "", rdPath = "";
if (WorkSpaceManager::Get().GetCurrent()) {
if (!WorkSpaceManager::Get().GetCurrent()->GetWavePath().isEmpty()) {
wavePath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetWavePath();
}
if (!WorkSpaceManager::Get().GetCurrent()->GetReportPath().isEmpty()) {
speedPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetReportPath();
}
if (!WorkSpaceManager::Get().GetCurrent()->GetRDPath().isEmpty()) {
rdPath = RecourceHelper::Get().GetBasePath() + "/" + WorkSpaceManager::Get().GetCurrent()->GetRDPath();
}
}
}