From 302694578c7373c928301a8c33931aa3d3faa319 Mon Sep 17 00:00:00 2001 From: jiegeaiai Date: Sun, 5 Jan 2025 19:12:18 +0800 Subject: [PATCH] modify workspace notify ui --- src/translations/Dyt_zh_CN.ts | 107 +++++++++++------------- src/ui/Layout/SignalIndicatorLampUI.cpp | 22 +++++ src/ui/Layout/SignalIndicatorLampUI.h | 2 + src/ui/MainWindow.cpp | 21 ++--- src/ui/Menu/PlayManagerMenu.cpp | 32 +++++-- src/ui/Menu/PlayManagerMenu.h | 1 + src/ui/Table/targetlistwgt.cpp | 23 +++++ src/ui/Table/targetlistwgt.h | 3 + src/ui/WorkSpace/WorkSpaceDlg.cpp | 2 +- src/ui/chartPlot/FitCurveDialog.cpp | 24 ++++++ src/ui/chartPlot/FitCurveDialog.h | 2 + src/ui/chartPlot/SurfaceDialog.cpp | 24 ++++++ src/ui/chartPlot/SurfaceDialog.h | 2 + src/viewer/QtOsgViewWidget.cpp | 47 ++--------- src/viewer/QtOsgViewWidget.h | 2 + src/workspace/WorkSpace.cpp | 11 +++ src/workspace/WorkSpace.h | 7 ++ src/workspace/WorkSpaceManager.cpp | 58 ++++++++++++- src/workspace/WorkSpaceManager.h | 6 ++ 19 files changed, 276 insertions(+), 120 deletions(-) diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index b0ef5fe8..7b505aea 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -422,12 +422,12 @@ - + 2D Curve - + 2D(y(lg)) Curve @@ -516,146 +516,136 @@ - + Wave Curve - + Speed Curve - + 3D Curve - - + + Target number - - + + Signal-to-noise ratio - - + + Azimuth line of sight - - + + Pitch gaze angle - - + + azimuth - - + + Pitch angle - - + + attribute - - + + Doppler - - + + course - - + + Speed - - + + longitude - - + + latitude - - + + distance - - + + velocity - - + + Radial dimensions - - + + Target RCS - + Report Table - + Report - + Signal Indicator Lamp - + ParamSetting 参数设置 - - - name: 5year 0412 - - - - - start: no start - - ModelBrowser @@ -759,6 +749,8 @@ + + play @@ -819,6 +811,7 @@ + pause @@ -1278,12 +1271,12 @@ QtOsgViewWidget - + notify - + open dyt file failed @@ -1570,12 +1563,12 @@ - + Signal Indicator Lamp - + light @@ -1588,7 +1581,7 @@ - + 3D Curve @@ -1659,7 +1652,7 @@ - + Data Table diff --git a/src/ui/Layout/SignalIndicatorLampUI.cpp b/src/ui/Layout/SignalIndicatorLampUI.cpp index ed14530b..9e8514f6 100644 --- a/src/ui/Layout/SignalIndicatorLampUI.cpp +++ b/src/ui/Layout/SignalIndicatorLampUI.cpp @@ -11,11 +11,16 @@ #include #include +#include "common/SpdLogger.h" +#include "workspace/WorkSpace.h" +#include "workspace/Timestep.h" +#include "workspace/WorkSpaceManager.h" SignalIndicatorLampUI::SignalIndicatorLampUI(QWidget* parent) : QWidget(parent) { ui.setupUi(this); + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, this, &SignalIndicatorLampUI::OnWorkSpaceChanged); } SignalIndicatorLampUI::~SignalIndicatorLampUI() @@ -228,6 +233,23 @@ void SignalIndicatorLampUI::onStatusChanged(int status) { SetLampState(vecStatus); } +void SignalIndicatorLampUI::OnWorkSpaceChanged(WorkSpace* worksapce) { + if (worksapce == nullptr) { + LOG_ERROR("worksapce is nullptr"); + return; + } + + connect(worksapce, &WorkSpace::TimestepChanged, this, &SignalIndicatorLampUI::OnTimestepChanged); +} + +void SignalIndicatorLampUI::OnTimestepChanged(Timestep* timestep) { + if (timestep == nullptr) { + LOG_ERROR("timestep is nullptr"); + return; + } + connect(timestep, SIGNAL(TimeChanged(double)), this, SLOT(slotUpdateTime(double))); +} + void SignalIndicatorLampUI::paintEvent(QPaintEvent* event) { QPainter painter(this); diff --git a/src/ui/Layout/SignalIndicatorLampUI.h b/src/ui/Layout/SignalIndicatorLampUI.h index 65d5fad8..21daad0c 100644 --- a/src/ui/Layout/SignalIndicatorLampUI.h +++ b/src/ui/Layout/SignalIndicatorLampUI.h @@ -36,6 +36,8 @@ public: protected slots: void slotUpdateTime(double dTime); void onStatusChanged(int status); + void OnWorkSpaceChanged(class WorkSpace*); + void OnTimestepChanged(class Timestep*); protected: void paintEvent(QPaintEvent* event); diff --git a/src/ui/MainWindow.cpp b/src/ui/MainWindow.cpp index 468c429d..70095266 100644 --- a/src/ui/MainWindow.cpp +++ b/src/ui/MainWindow.cpp @@ -84,10 +84,7 @@ void MainWindow::InitUI() { connect(modelBrowser_, &ModelBrowser::EntityChange, propertyBrowser_, &PropertyBrowser::OnEntityChange); qtOsgViewWidget_ = new QtOsgViewWidget; - //ui->viewWidget->layout()->addWidget(qtOsgViewWidget_); - OsgViewer::Get().Initialize(); - OsgViewer::Get().OnFrame(); - + qtOsgViewWidget_->Initialize(); m_mapDockWidget.insert("PropertyBrowser", attribte); QString wavePath = WorkSpaceManager::Get().GetDYTWaveFile(); @@ -117,7 +114,6 @@ void MainWindow::InitUI() { m_mapDockWidget.insert("WaveCurveDialog", fitCurveDock); 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); @@ -127,7 +123,6 @@ void MainWindow::InitUI() { 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); @@ -136,7 +131,6 @@ void MainWindow::InitUI() { m_mapDockWidget.insert("3DCurveDialog", surfaceCurveDock); surfaceDlg_->InitRD(rdPath); - connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), surfaceDlg_, SLOT(slotUpdateTime(double))); { targetUITable_ = new TargetListWgt; @@ -160,7 +154,6 @@ void MainWindow::InitUI() { targetUITable_->AttachDock(dataTableDock); m_mapDockWidget.insert("TargetListWgt_Table", dataTableDock); - connect(WorkSpaceManager::Get().GetCurrent()->GetTimestep(), SIGNAL(TimeChanged(double)), targetUITable_, SLOT(slotTimeChanged(double))); } { @@ -185,8 +178,6 @@ void MainWindow::InitUI() { // 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))); } @@ -196,7 +187,6 @@ void MainWindow::InitUI() { 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); @@ -206,10 +196,15 @@ void MainWindow::InitUI() { addParamDlg_->AttachDock(addParamSettingDock); m_mapDockWidget.insert("ParamSetting", addParamSettingDock); - ui->discript->setText(tr("name: 5year 0412")); - ui->status->setText(tr("start: no start")); + //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; diff --git a/src/ui/Menu/PlayManagerMenu.cpp b/src/ui/Menu/PlayManagerMenu.cpp index b641adc1..86de20a1 100644 --- a/src/ui/Menu/PlayManagerMenu.cpp +++ b/src/ui/Menu/PlayManagerMenu.cpp @@ -113,16 +113,14 @@ void PlayManagerMenu::OnDown() { void PlayManagerMenu::OnWorkspaceChange(WorkSpace* workSpace) { if (nullptr == workSpace) { + LOG_WARN("current is nullptr"); return; } workSpace_ = workSpace; + connect(workSpace, &WorkSpace::TimestepChanged, this, &PlayManagerMenu::OnTimestepChanged); +} - Timestep* timestep = workSpace_->GetTimestep(); - if (nullptr == timestep) { - LOG_INFO("current is nullptr"); - return; - } - +void PlayManagerMenu::OnTimestepChanged(Timestep* timestep) { double step = 0.0; timestep->GetRange(minTime_, maxTime_, step); ui->lbtime->setText(QString::number(minTime_, 'f', 3)); @@ -141,4 +139,26 @@ void PlayManagerMenu::OnWorkspaceChange(WorkSpace* workSpace) { ui->lbUp->setText(QString("x%1").arg(step)); } ); + + connect(timestep, &Timestep::StatusChanged, [this](int statue) { + Timestep::PlayStatus state = static_cast(statue); + switch (state) { + case Timestep::PlayStatus::PS_Started: + ui->psbPlay->setText(tr("pause")); + break; + case Timestep::PlayStatus::PS_Stoped: { + ui->psbPlay->setText(tr("play")); + ui->lbtime->setText(QString::number(minTime_, 'f', 3)); + ui->lbtimeTotal->setText(QString("/%1(s)").arg(maxTime_)); + ui->horizontalSlider->setValue(0); + } + break; + case Timestep::PlayStatus::PS_Suspended: + ui->psbPlay->setText(tr("play")); + break; + default: + break; + } + } + ); } diff --git a/src/ui/Menu/PlayManagerMenu.h b/src/ui/Menu/PlayManagerMenu.h index d6e0a456..4d8153eb 100644 --- a/src/ui/Menu/PlayManagerMenu.h +++ b/src/ui/Menu/PlayManagerMenu.h @@ -22,6 +22,7 @@ protected: void OnDown(); void OnWorkspaceChange(class WorkSpace* workSpace); + void OnTimestepChanged(class Timestep* timestep); private: diff --git a/src/ui/Table/targetlistwgt.cpp b/src/ui/Table/targetlistwgt.cpp index 874a23a9..2847b98a 100644 --- a/src/ui/Table/targetlistwgt.cpp +++ b/src/ui/Table/targetlistwgt.cpp @@ -15,6 +15,10 @@ #include "../DockWidget.h" #include +#include "common/SpdLogger.h" +#include "workspace/WorkSpace.h" +#include "workspace/Timestep.h" +#include "workspace/WorkSpaceManager.h" TargetListWgt::TargetListWgt(QWidget * parent) : QWidget(parent) { ui.setupUi(this); @@ -38,6 +42,8 @@ TargetListWgt::TargetListWgt(QWidget * parent) : QWidget(parent) { ui.lineEdit->setText("1"); ui.lineEdit_2->setText("1"); ui.spinBox_2->setValue(1); + + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, this, &TargetListWgt::OnWorkSpaceChanged); } TargetListWgt::~TargetListWgt() { @@ -223,6 +229,23 @@ void TargetListWgt::slotNextPage() UpdatePageData(nCurPage); } +void TargetListWgt::OnWorkSpaceChanged(WorkSpace* worksapce) { + if (worksapce == nullptr) { + LOG_ERROR("worksapce is nullptr"); + return; + } + + connect(worksapce, &WorkSpace::TimestepChanged, this, &TargetListWgt::OnTimestepChanged); +} + +void TargetListWgt::OnTimestepChanged(Timestep* timestep) { + if (timestep == nullptr) { + LOG_ERROR("timestep is nullptr"); + return; + } + connect(timestep, SIGNAL(TimeChanged(double)), this, SLOT(slotUpdateTime(double))); +} + void TargetListWgt::slotTimeChanged(double dTime) { UpdateTable(dTime); diff --git a/src/ui/Table/targetlistwgt.h b/src/ui/Table/targetlistwgt.h index a24219bc..cd6250da 100644 --- a/src/ui/Table/targetlistwgt.h +++ b/src/ui/Table/targetlistwgt.h @@ -64,6 +64,9 @@ protected slots: void slotForwardPage(); // 前一页 void slotNextPage(); // 下一页 + void OnWorkSpaceChanged(class WorkSpace*); + void OnTimestepChanged(class Timestep*); + signals: diff --git a/src/ui/WorkSpace/WorkSpaceDlg.cpp b/src/ui/WorkSpace/WorkSpaceDlg.cpp index 69338f35..576a8c12 100644 --- a/src/ui/WorkSpace/WorkSpaceDlg.cpp +++ b/src/ui/WorkSpace/WorkSpaceDlg.cpp @@ -99,7 +99,7 @@ void WorkSpaceDlg::OnSure() { } emit WorkSpaceManager::Get().WorkSpaceChanged(workSpace); - + WorkSpaceManager::Get().SetCurrent(workSpace); accept(); } diff --git a/src/ui/chartPlot/FitCurveDialog.cpp b/src/ui/chartPlot/FitCurveDialog.cpp index 4c3216b6..e8c46b14 100644 --- a/src/ui/chartPlot/FitCurveDialog.cpp +++ b/src/ui/chartPlot/FitCurveDialog.cpp @@ -5,6 +5,11 @@ #include "../DockTitleBar.h" #include "../DockWidget.h" +#include "common/SpdLogger.h" +#include "workspace/WorkSpace.h" +#include "workspace/Timestep.h" +#include "workspace/WorkSpaceManager.h" + FitCurveDialog::FitCurveDialog(int iType, QWidget* parent) : QDialog(parent), ui(new Ui::FitCurveDialog) @@ -22,6 +27,8 @@ FitCurveDialog::FitCurveDialog(int iType, QWidget* parent) : qApp->setOverrideCursor(Qt::ArrowCursor); //ϵͳʾ initQChartView(); + + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, this, &FitCurveDialog::OnWorkSpaceChanged); } void FitCurveDialog::initQChartView() { @@ -721,6 +728,23 @@ void FitCurveDialog::ParseReport(const QString& strFile, std::vector>>& vecWavePoint, int iRowCount = 50); void ParseReport(const QString& strFile, std::vector>>& vecReportPoint, int iRowCount = 50); + void OnWorkSpaceChanged(class WorkSpace*); + void OnTimestepChanged(class Timestep*); public slots: void theSlotMouseEvent(int eventId, QMouseEvent* event); diff --git a/src/ui/chartPlot/SurfaceDialog.cpp b/src/ui/chartPlot/SurfaceDialog.cpp index 3b782ac9..209f01a7 100644 --- a/src/ui/chartPlot/SurfaceDialog.cpp +++ b/src/ui/chartPlot/SurfaceDialog.cpp @@ -8,6 +8,11 @@ #include #include +#include "common/SpdLogger.h" +#include "workspace/WorkSpace.h" +#include "workspace/Timestep.h" +#include "workspace/WorkSpaceManager.h" + SurfaceDialog::SurfaceDialog(QWidget *parent) : QWidget(parent) { @@ -16,6 +21,7 @@ SurfaceDialog::SurfaceDialog(QWidget *parent) setWindowTitle("3D Curve"); InitSurface(); + connect(&WorkSpaceManager::Get(), &WorkSpaceManager::WorkSpaceChanged, this, &SurfaceDialog::OnWorkSpaceChanged); } SurfaceDialog::~SurfaceDialog() @@ -271,6 +277,24 @@ void SurfaceDialog::slotUpdateTime(double dTime) m_Surface.setShadowQuality(QAbstract3DGraph::ShadowQuality::ShadowQualityNone); } +void SurfaceDialog::OnWorkSpaceChanged(WorkSpace* worksapce) { + if (worksapce == nullptr) { + LOG_ERROR("worksapce is nullptr"); + return; + } + + connect(worksapce, &WorkSpace::TimestepChanged, this, &SurfaceDialog::OnTimestepChanged); +} + +void SurfaceDialog::OnTimestepChanged(Timestep* timestep) { + if (timestep == nullptr) { + LOG_ERROR("timestep is nullptr"); + return; + } + connect(timestep, SIGNAL(TimeChanged(double)), this, SLOT(slotUpdateTime(double))); +} + + void SurfaceDialog::InitSurface() { m_Surface.setFlags(m_Surface.flags()); diff --git a/src/ui/chartPlot/SurfaceDialog.h b/src/ui/chartPlot/SurfaceDialog.h index 8c4d2b4e..915562dc 100644 --- a/src/ui/chartPlot/SurfaceDialog.h +++ b/src/ui/chartPlot/SurfaceDialog.h @@ -25,6 +25,8 @@ public slots: void slotAddSeries(QVariant varSeriesData); void slotInserKeyPoint(float xValue, float yValue, float zValue); void slotUpdateTime(double dTime); + void OnWorkSpaceChanged(class WorkSpace*); + void OnTimestepChanged(class Timestep*); protected: void InitSurface(); diff --git a/src/viewer/QtOsgViewWidget.cpp b/src/viewer/QtOsgViewWidget.cpp index 8807569a..7f653cd4 100644 --- a/src/viewer/QtOsgViewWidget.cpp +++ b/src/viewer/QtOsgViewWidget.cpp @@ -38,7 +38,7 @@ QtOsgViewWidget::QtOsgViewWidget(QWidget* parent) setAttribute(Qt::WA_OpaquePaintEvent, false); setAttribute(Qt::WA_DontCreateNativeAncestors, false); setFocusPolicy(Qt::StrongFocus); - Initialize(); + //Initialize(); } QtOsgViewWidget::~QtOsgViewWidget() { @@ -71,20 +71,6 @@ void QtOsgViewWidget::Initialize(void) { setMouseTracking(true); - ////OsgSceneManipulator* manipulator = new OsgSceneManipulator; - //CameraControlManipulator* manipulator = new CameraControlManipulator; - ////osg::Vec3f eye(-256.63, 48.57, 82.19); - ////osg::Vec3f center(-164.45, 30.05, 48.14); - ////osg::Vec3f up(0.33, -0.07, 0.94); - - //osg::Vec3 eye(0.0f, 300.f, 60.0f); - //osg::Vec3 center(0.0f, 60.0f, 0.0f); - //osg::Vec3 up(0.0f, 0.0f, 1.0f); - //manipulator->setHomePosition(eye, center, up); - //manipulator->setManipulatorMode(CameraControlManipulator::Roam_ManipulatorMode); - //manipulator->setVerticalAxisFixed(true); - //manipulator->setRoamCamera(eye, center, up); - //manipulator->setDistance(650.0); osgEarth::Util::EarthManipulator* manipulator = new osgEarth::Util::EarthManipulator; osgEarth::Viewpoint vp("home", 107.85, 32.35, 100.0, -2.50, -90.0, 1.5e7); @@ -93,32 +79,6 @@ void QtOsgViewWidget::Initialize(void) { OsgCameraManipulator* cameraManipulator = new OsgCameraManipulator(manipulator, this); view_->Initialize(cameraManipulator); - - //auto pScene = Scenes::SceneManager::GetSingleton().GetCurrentScene(); - //if (nullptr == pScene) { - // pScene = Core::Application::GetSingleton().GetEngine()->CreateScene("Untitled"); - // Scenes::SceneManager::GetSingleton().SetCurrentScene(pScene); - //} - //view_->SetScense(pScene); - - /* scene_ = new OsgScene; - scene_->UseShadows(false); - - scene_->ChangeScene(OsgScene::CLOUDY); - - scene_->AttachView(view_); - scene_->InitEventHandle(view_);*/ - - //scene_->TestBuildModel(); - - const QString path = QString("%1/default2.dyt").arg(Application::GetWorkSpacePath()); - OnLoadDyt(path); - - /*WorkSpace* workspace = WorkSpaceManager::Get().GetOrCreate("defaultDyt"); - workspace->AddScene("default", scene_, true); - workspace_ = workspace;*/ - //WorkSpaceManager::Get(). - } void QtOsgViewWidget::Uninitialize(void) { @@ -133,6 +93,11 @@ void QtOsgViewWidget::Uninitialize(void) { } } +void QtOsgViewWidget::LoadDefaultScene(void) { + dyt_check(nullptr != view_, "view is nullptr"); + WorkSpaceManager::Get().LoadDefaultWorkspace(view_); +} + void QtOsgViewWidget::OnLoadDyt(const QString& path) { LOG_INFO("load dyt path:{}", path.toStdString()); WorkSpace* workSpace = WorkSpaceManager::Get().LoadDyt(path, view_); diff --git a/src/viewer/QtOsgViewWidget.h b/src/viewer/QtOsgViewWidget.h index b8a8cd52..583f4eca 100644 --- a/src/viewer/QtOsgViewWidget.h +++ b/src/viewer/QtOsgViewWidget.h @@ -24,6 +24,8 @@ public: void Initialize(void); void Uninitialize(void); + void LoadDefaultScene(void); + void OnLoadDyt(const QString& path); //void setKeyboardModifiers(QInputEvent* event); diff --git a/src/workspace/WorkSpace.cpp b/src/workspace/WorkSpace.cpp index 97a3b105..141f9d2a 100644 --- a/src/workspace/WorkSpace.cpp +++ b/src/workspace/WorkSpace.cpp @@ -119,6 +119,7 @@ bool WorkSpace::SetTimestep(Timestep* timestep) { } timestep_ = timestep; + emit TimestepChanged(timestep_); return true; } @@ -138,6 +139,7 @@ bool WorkSpace::SetLampStatus(class LampStatus* lampStatus) { } lampStatus_ = lampStatus; + emit LampStatusChanged(lampStatus_); return true; } @@ -205,3 +207,12 @@ void WorkSpace::End() { item->End(); } } + +void WorkSpace::OnLoaded() { + if (nullptr != lampStatus_) { + emit LampStatusChanged(lampStatus_); + } + if (nullptr != timestep_) { + emit TimestepChanged(timestep_); + } +} diff --git a/src/workspace/WorkSpace.h b/src/workspace/WorkSpace.h index 01bdf3c1..00fa3dc3 100644 --- a/src/workspace/WorkSpace.h +++ b/src/workspace/WorkSpace.h @@ -24,6 +24,9 @@ public: inline const QString& GetName() const { return name_; } + inline const QString& GetPath() const { + return path_; + } inline void SetUUid(const QString& uuid) { uuid_ = uuid; } @@ -77,9 +80,13 @@ public: void OnFrame(double dt); void End(); + void OnLoaded(); + Q_SIGNALS: void EntityAdded(class Entity* entity); void EntityRemoved(class Entity* entity); + void TimestepChanged(class Timestep* timestep); + void LampStatusChanged(class LampStatus* lampStatus); private: QString name_; diff --git a/src/workspace/WorkSpaceManager.cpp b/src/workspace/WorkSpaceManager.cpp index 21b98581..3426c839 100644 --- a/src/workspace/WorkSpaceManager.cpp +++ b/src/workspace/WorkSpaceManager.cpp @@ -1,11 +1,12 @@ #include "workspace/WorkSpaceManager.h" +#include +#include + #include "workspace/WorkSpace.h" #include "workspace/Timestep.h" #include "common/SpdLogger.h" -#include - template<> WorkSpaceManager* Singleton::instance_ = nullptr; WorkSpaceManager::WorkSpaceManager(QObject* parent) @@ -17,7 +18,48 @@ WorkSpaceManager::~WorkSpaceManager() { } void WorkSpaceManager::OnDestory() { + SaveDefaultWorkspace(); +} +WorkSpace* WorkSpaceManager::LoadDefaultWorkspace(class OsgView* view) { + const QString iniFile = GetDefaultWorkSpaceName(); + if (!QFile::exists(iniFile)) { + LOG_ERROR("default workspace file not exist:{}", iniFile.toStdString()); + return nullptr; + } + + QSettings settings(iniFile, QSettings::IniFormat); + const QString path = settings.value("workspace/path", "").toString(); + if (path.isEmpty()) { + LOG_ERROR("default workspace path is empty"); + return nullptr; + } + WorkSpace* workspace = LoadDyt(path, view); + if (nullptr == workspace) { + LOG_ERROR("load default workspace failed"); + return nullptr; + } + + SetCurrent(workspace); + return workspace; +} + +void WorkSpaceManager::SaveDefaultWorkspace() { + const QString iniFile = GetDefaultWorkSpaceName(); + if (!QFile::exists(iniFile)) { + LOG_ERROR("default workspace file not exist:{}", iniFile.toStdString()); + return; + } + + WorkSpace* current = GetCurrent(); + if (nullptr == current) { + LOG_ERROR("current workspace is nullptr"); + return; + } + + const QString path = current->GetPath(); + QSettings settings(iniFile, QSettings::IniFormat); + settings.setValue("workspace/path", path); } bool WorkSpaceManager::Contains(const QString& name) const { @@ -76,6 +118,8 @@ void WorkSpaceManager::SetCurrent(WorkSpace* workspace) { lastTime_ = clock(); emit WorkSpaceChanged(current_); + + current_->OnLoaded(); } void WorkSpaceManager::OnFrame() { @@ -94,3 +138,13 @@ void WorkSpaceManager::OnFrame() { lastTime_ = t; } + +QString WorkSpaceManager::GetDefaultWorkSpaceName() { +#if _DEBUG + const QString iniFile = QString("%1workspace/config.ini").arg(QString(CONFIG_PATH)).arg(skin); +#else + const QString appDirPath = QApplication::applicationDirPath(); + const QString iniFile = QString("%1/config/workspace/config.ini").arg(appDirPath); +#endif + return iniFile; +} diff --git a/src/workspace/WorkSpaceManager.h b/src/workspace/WorkSpaceManager.h index 1e485152..3749cb9f 100644 --- a/src/workspace/WorkSpaceManager.h +++ b/src/workspace/WorkSpaceManager.h @@ -19,6 +19,9 @@ public: ~WorkSpaceManager(); void OnDestory(); + WorkSpace* LoadDefaultWorkspace(class OsgView* view); + void SaveDefaultWorkspace(); + bool Contains(const QString& name) const; bool Remove(const QString& name); WorkSpace* LoadDyt(const QString& dyt, class OsgView* view); @@ -64,6 +67,9 @@ public: signals: void WorkSpaceChanged(WorkSpace*); +private: + QString GetDefaultWorkSpaceName(); + private: std::unordered_map workSpaces_; WorkSpace* current_{ nullptr };