From 6b0aaea7738588a303357c94d54c78f29ba339f1 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 21 Sep 2024 23:31:47 -0500 Subject: [PATCH] Commit line settings changes on apply --- .../scwx/qt/settings/settings_category.cpp | 28 +++++++++++++++++++ .../scwx/qt/settings/settings_category.hpp | 9 ++++++ .../alert_palette_settings_widget.cpp | 2 ++ .../qt/ui/settings/settings_page_widget.cpp | 12 ++++++++ .../qt/ui/settings/settings_page_widget.hpp | 2 ++ 5 files changed, 53 insertions(+) diff --git a/scwx-qt/source/scwx/qt/settings/settings_category.cpp b/scwx-qt/source/scwx/qt/settings/settings_category.cpp index 2258baeb..34859ae2 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_category.cpp +++ b/scwx-qt/source/scwx/qt/settings/settings_category.cpp @@ -68,6 +68,34 @@ void SettingsCategory::SetDefaults() } } +bool SettingsCategory::Commit() +{ + bool committed = false; + + // Commit subcategory arrays + for (auto& subcategoryArray : p->subcategoryArrays_) + { + for (auto& subcategory : subcategoryArray.second) + { + committed |= subcategory->Commit(); + } + } + + // Commit subcategories + for (auto& subcategory : p->subcategories_) + { + committed |= subcategory->Commit(); + } + + // Commit variables + for (auto& variable : p->variables_) + { + committed |= variable->Commit(); + } + + return committed; +} + bool SettingsCategory::ReadJson(const boost::json::object& json) { bool validated = true; diff --git a/scwx-qt/source/scwx/qt/settings/settings_category.hpp b/scwx-qt/source/scwx/qt/settings/settings_category.hpp index bea48659..9ccf7458 100644 --- a/scwx-qt/source/scwx/qt/settings/settings_category.hpp +++ b/scwx-qt/source/scwx/qt/settings/settings_category.hpp @@ -33,6 +33,15 @@ public: */ void SetDefaults(); + /** + * Sets the current value of all variables to the staged + * value. + * + * @return true if any staged value was committed, false if no staged values + * are present. + */ + bool Commit(); + /** * Reads the variables from the JSON object. * diff --git a/scwx-qt/source/scwx/qt/ui/settings/alert_palette_settings_widget.cpp b/scwx-qt/source/scwx/qt/ui/settings/alert_palette_settings_widget.cpp index 0a63add4..2de6f283 100644 --- a/scwx-qt/source/scwx/qt/ui/settings/alert_palette_settings_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings/alert_palette_settings_widget.cpp @@ -248,6 +248,8 @@ void AlertPaletteSettingsWidget::Impl::AddPhenomenonLine( layout->addWidget(lineLabel, row, 1); layout->addWidget(toolButton, row, 2); + self_->AddSettingsCategory(&lineSettings); + connect( toolButton, &QAbstractButton::clicked, diff --git a/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp b/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp index d174fbbd..a7c77380 100644 --- a/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp @@ -19,6 +19,7 @@ public: explicit Impl() {} ~Impl() = default; + std::vector categories_; std::vector settings_; }; @@ -29,6 +30,12 @@ SettingsPageWidget::SettingsPageWidget(QWidget* parent) : SettingsPageWidget::~SettingsPageWidget() = default; +void SettingsPageWidget::AddSettingsCategory( + settings::SettingsCategory* category) +{ + p->categories_.push_back(category); +} + void SettingsPageWidget::AddSettingsInterface( settings::SettingsInterfaceBase* setting) { @@ -39,6 +46,11 @@ bool SettingsPageWidget::CommitChanges() { bool committed = false; + for (auto& category : p->categories_) + { + committed |= category->Commit(); + } + for (auto& setting : p->settings_) { committed |= setting->Commit(); diff --git a/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp b/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp index 228badd6..2fbdfc9e 100644 --- a/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp +++ b/scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -59,6 +60,7 @@ public: void ResetToDefault(); protected: + void AddSettingsCategory(settings::SettingsCategory* category); void AddSettingsInterface(settings::SettingsInterfaceBase* setting); private: