From 9e4b5bda56950191b6673c39b615f568e62f54b7 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 19 May 2022 15:48:14 +0200 Subject: [PATCH] Save auto stack workspaces status in configuration --- .github/workflows/sdrangel.yml | 1 - sdrbase/settings/configuration.cpp | 15 +++++++++++++++ sdrbase/settings/configuration.h | 3 +++ sdrgui/gui/workspace.cpp | 10 ++++++++++ sdrgui/gui/workspace.h | 2 ++ sdrgui/mainwindow.cpp | 24 +++++++++++++++++------- 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/.github/workflows/sdrangel.yml b/.github/workflows/sdrangel.yml index 28b653fe9..ac183aa87 100644 --- a/.github/workflows/sdrangel.yml +++ b/.github/workflows/sdrangel.yml @@ -6,7 +6,6 @@ on: push: branches: - master - - v7 tags: - 'v*' pull_request: diff --git a/sdrbase/settings/configuration.cpp b/sdrbase/settings/configuration.cpp index 4d194c07f..6e527157a 100644 --- a/sdrbase/settings/configuration.cpp +++ b/sdrbase/settings/configuration.cpp @@ -58,6 +58,13 @@ QByteArray Configuration::serialize() const s.writeBlob(201 + i, m_deviceSetPresets[i].serialize()); } + nitems = m_workspaceAutoStackOptions.size() < 99 ? m_workspaceAutoStackOptions.size() : 99; + s.writeS32(300, nitems); + + for (int i = 0; i < nitems; i++) { + s.writeBool(301 + i, m_workspaceAutoStackOptions[i]); + } + return s.final(); } @@ -98,6 +105,14 @@ bool Configuration::deserialize(const QByteArray& data) m_deviceSetPresets.back().deserialize(b); } + d.readS32(300, &nitems, 0); + + for (int i = 0; i < nitems; i++) + { + m_workspaceAutoStackOptions.push_back(true); + d.readBool(301 + i, &m_workspaceAutoStackOptions.back()); + } + return true; } else diff --git a/sdrbase/settings/configuration.h b/sdrbase/settings/configuration.h index 296db22c3..746d4360a 100644 --- a/sdrbase/settings/configuration.h +++ b/sdrbase/settings/configuration.h @@ -50,6 +50,8 @@ public: int getNumberOfWorkspaceGeometries() const { return m_workspaceGeometries.size(); } QList& getWorkspaceGeometries() { return m_workspaceGeometries; } const QList& getWorkspaceGeometries() const { return m_workspaceGeometries; } + QList& getWorkspaceAutoStackOptions() { return m_workspaceAutoStackOptions; } + const QList& getWorkspaceAutoStackOptions() const { return m_workspaceAutoStackOptions; } FeatureSetPreset& getFeatureSetPreset() { return m_featureSetPreset; } const FeatureSetPreset& getFeatureSetPreset() const { return m_featureSetPreset; } QList& getDeviceSetPresets() { return m_deviceSetPresets; } @@ -73,6 +75,7 @@ private: QString m_group; QString m_description; QList m_workspaceGeometries; + QList m_workspaceAutoStackOptions; FeatureSetPreset m_featureSetPreset; QList m_deviceSetPresets; }; diff --git a/sdrgui/gui/workspace.cpp b/sdrgui/gui/workspace.cpp index eb0652ccc..ab2b5ece8 100644 --- a/sdrgui/gui/workspace.cpp +++ b/sdrgui/gui/workspace.cpp @@ -688,6 +688,16 @@ void Workspace::restoreMdiGeometry(const QByteArray& blob) m_mdi->restoreGeometry(qUncompress(blob)); } +bool Workspace::getAutoStackOption() const +{ + return m_autoStackSubWindows->isChecked(); +} + +void Workspace::setAutoStackOption(bool autoStack) +{ + m_autoStackSubWindows->doToggle(autoStack); +} + void Workspace::adjustSubWindowsAfterRestore() { QList subWindowList = m_mdi->subWindowList(); diff --git a/sdrgui/gui/workspace.h b/sdrgui/gui/workspace.h index 5f23e9cbb..8b0a3249d 100644 --- a/sdrgui/gui/workspace.h +++ b/sdrgui/gui/workspace.h @@ -53,6 +53,8 @@ public: int getNumberOfSubWindows() const; QByteArray saveMdiGeometry(); void restoreMdiGeometry(const QByteArray& blob); + bool getAutoStackOption() const; + void setAutoStackOption(bool autoStack); QList getSubWindowList() const; void orderByIndex(QList &list); void orderByIndex(QList &list); diff --git a/sdrgui/mainwindow.cpp b/sdrgui/mainwindow.cpp index 35321aba2..efd65e253 100644 --- a/sdrgui/mainwindow.cpp +++ b/sdrgui/mainwindow.cpp @@ -193,15 +193,21 @@ MainWindow::MainWindow(qtwebapp::LoggerWithFile *logger, const MainParser& parse addFeatureSet(); // Create the uniuefeature set m_apiAdapter = new WebAPIAdapter(); - if (!parser.getScratch()) + if (parser.getScratch()) + { + qDebug() << "MainWindow::MainWindow: scratch mode: do not load current configuration"; + } + else { splash->showStatusMessage("load current configuration...", Qt::white); qDebug() << "MainWindow::MainWindow: load current configuration..."; loadConfiguration(m_mainCore->m_settings.getWorkingConfiguration()); - } - else - { - qDebug() << "MainWindow::MainWindow: scratch mode: do not load current configuration"; + + if (m_workspaces.size() == 0) + { + qDebug() << "MainWindow::MainWindow: no or empty current configuration, creating empty workspace..."; + addWorkspace(); + } } splash->showStatusMessage("finishing...", Qt::white); @@ -1232,8 +1238,10 @@ void MainWindow::loadConfiguration(const Configuration *configuration, bool from // Reconstruct // Workspaces - for (int i = 0; i < configuration->getNumberOfWorkspaceGeometries(); i++) { + for (int i = 0; i < configuration->getNumberOfWorkspaceGeometries(); i++) + { addWorkspace(); + m_workspaces[i]->setAutoStackOption(configuration->getWorkspaceAutoStackOptions()[i]); } if (m_workspaces.size() <= 0) { // cannot go further if there are no workspaces @@ -1383,8 +1391,10 @@ void MainWindow::saveConfiguration(Configuration *configuration) m_featureUIs[0]->saveFeatureSetSettings(&configuration->getFeatureSetPreset()); - for (const auto& workspace : m_workspaces) { + for (const auto& workspace : m_workspaces) + { configuration->getWorkspaceGeometries().push_back(workspace->saveGeometry()); + configuration->getWorkspaceAutoStackOptions().push_back(workspace->getAutoStackOption()); } }