Refactor settings to be managed by singletons

This commit is contained in:
Dan Paulat 2023-10-05 21:55:43 -05:00
parent acc782b2bc
commit b66ca2cb09
21 changed files with 138 additions and 133 deletions

View file

@ -7,13 +7,14 @@
#include <scwx/qt/main/versions.hpp> #include <scwx/qt/main/versions.hpp>
#include <scwx/qt/manager/placefile_manager.hpp> #include <scwx/qt/manager/placefile_manager.hpp>
#include <scwx/qt/manager/radar_product_manager.hpp> #include <scwx/qt/manager/radar_product_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/manager/text_event_manager.hpp> #include <scwx/qt/manager/text_event_manager.hpp>
#include <scwx/qt/manager/timeline_manager.hpp> #include <scwx/qt/manager/timeline_manager.hpp>
#include <scwx/qt/manager/update_manager.hpp> #include <scwx/qt/manager/update_manager.hpp>
#include <scwx/qt/map/map_provider.hpp> #include <scwx/qt/map/map_provider.hpp>
#include <scwx/qt/map/map_widget.hpp> #include <scwx/qt/map/map_widget.hpp>
#include <scwx/qt/model/radar_product_model.hpp> #include <scwx/qt/model/radar_product_model.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/map_settings.hpp>
#include <scwx/qt/settings/ui_settings.hpp> #include <scwx/qt/settings/ui_settings.hpp>
#include <scwx/qt/ui/about_dialog.hpp> #include <scwx/qt/ui/about_dialog.hpp>
#include <scwx/qt/ui/alert_dock_widget.hpp> #include <scwx/qt/ui/alert_dock_widget.hpp>
@ -89,10 +90,8 @@ public:
elevationButtonsChanged_ {false}, elevationButtonsChanged_ {false},
resizeElevationButtons_ {false} resizeElevationButtons_ {false}
{ {
mapProvider_ = mapProvider_ = map::GetMapProvider(
map::GetMapProvider(manager::SettingsManager::general_settings() settings::GeneralSettings::Instance().map_provider().GetValue());
.map_provider()
.GetValue());
const map::MapProviderInfo& mapProviderInfo = const map::MapProviderInfo& mapProviderInfo =
map::GetMapProviderInfo(mapProvider_); map::GetMapProviderInfo(mapProvider_);
@ -230,7 +229,7 @@ MainWindow::MainWindow(QWidget* parent) :
ui->actionAlerts->setVisible(false); ui->actionAlerts->setVisible(false);
ui->menuDebug->menuAction()->setVisible( ui->menuDebug->menuAction()->setVisible(
manager::SettingsManager::general_settings().debug_enabled().GetValue()); settings::GeneralSettings::Instance().debug_enabled().GetValue());
// Configure Resource Explorer Dock // Configure Resource Explorer Dock
ui->resourceExplorerDock->setVisible(false); ui->resourceExplorerDock->setVisible(false);
@ -306,7 +305,7 @@ MainWindow::MainWindow(QWidget* parent) :
// Update Dialog // Update Dialog
p->updateDialog_ = new ui::UpdateDialog(this); p->updateDialog_ = new ui::UpdateDialog(this);
auto& mapSettings = manager::SettingsManager::map_settings(); auto& mapSettings = settings::MapSettings::Instance();
for (size_t i = 0; i < p->maps_.size(); i++) for (size_t i = 0; i < p->maps_.size(); i++)
{ {
p->SelectRadarProduct(p->maps_.at(i), p->SelectRadarProduct(p->maps_.at(i),
@ -582,7 +581,7 @@ void MainWindow::on_resourceTreeView_doubleClicked(const QModelIndex& index)
void MainWindowImpl::AsyncSetup() void MainWindowImpl::AsyncSetup()
{ {
auto& generalSettings = manager::SettingsManager::general_settings(); auto& generalSettings = settings::GeneralSettings::Instance();
// Check for updates // Check for updates
if (generalSettings.update_notifications_enabled().GetValue()) if (generalSettings.update_notifications_enabled().GetValue())
@ -595,7 +594,7 @@ void MainWindowImpl::AsyncSetup()
void MainWindowImpl::ConfigureMapLayout() void MainWindowImpl::ConfigureMapLayout()
{ {
auto& generalSettings = manager::SettingsManager::general_settings(); auto& generalSettings = settings::GeneralSettings::Instance();
const int64_t gridWidth = generalSettings.grid_width().GetValue(); const int64_t gridWidth = generalSettings.grid_width().GetValue();
const int64_t gridHeight = generalSettings.grid_height().GetValue(); const int64_t gridHeight = generalSettings.grid_height().GetValue();
@ -646,7 +645,7 @@ void MainWindowImpl::ConfigureMapLayout()
void MainWindowImpl::ConfigureMapStyles() void MainWindowImpl::ConfigureMapStyles()
{ {
const auto& mapProviderInfo = map::GetMapProviderInfo(mapProvider_); const auto& mapProviderInfo = map::GetMapProviderInfo(mapProvider_);
auto& mapSettings = manager::SettingsManager::map_settings(); auto& mapSettings = settings::MapSettings::Instance();
for (std::size_t i = 0; i < maps_.size(); i++) for (std::size_t i = 0; i < maps_.size(); i++)
{ {
@ -897,8 +896,7 @@ void MainWindowImpl::ConnectOtherSignals()
{ {
if (maps_[i] == activeMap_) if (maps_[i] == activeMap_)
{ {
auto& mapSettings = auto& mapSettings = settings::MapSettings::Instance();
manager::SettingsManager::map_settings();
mapSettings.map_style(i).StageValue(text.toStdString()); mapSettings.map_style(i).StageValue(text.toStdString());
break; break;
} }
@ -1075,7 +1073,7 @@ void MainWindowImpl::UpdateMapStyle(const std::string& styleName)
{ {
if (maps_[i] == activeMap_) if (maps_[i] == activeMap_)
{ {
auto& mapSettings = manager::SettingsManager::map_settings(); auto& mapSettings = settings::MapSettings::Instance();
mapSettings.map_style(i).StageValue(styleName); mapSettings.map_style(i).StageValue(styleName);
break; break;
} }

View file

@ -1,5 +1,8 @@
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/map/map_provider.hpp> #include <scwx/qt/map/map_provider.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/map_settings.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
#include <scwx/qt/settings/text_settings.hpp> #include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/settings/ui_settings.hpp> #include <scwx/qt/settings/ui_settings.hpp>
#include <scwx/qt/util/json.hpp> #include <scwx/qt/util/json.hpp>
@ -96,8 +99,8 @@ void Shutdown()
{ {
bool dataChanged = false; bool dataChanged = false;
dataChanged |= general_settings().Shutdown(); dataChanged |= settings::GeneralSettings::Instance().Shutdown();
dataChanged |= map_settings().Shutdown(); dataChanged |= settings::MapSettings::Instance().Shutdown();
dataChanged |= settings::UiSettings::Instance().Shutdown(); dataChanged |= settings::UiSettings::Instance().Shutdown();
if (dataChanged) if (dataChanged)
@ -106,31 +109,13 @@ void Shutdown()
} }
} }
settings::GeneralSettings& general_settings()
{
static settings::GeneralSettings generalSettings_;
return generalSettings_;
}
settings::MapSettings& map_settings()
{
static settings::MapSettings mapSettings_;
return mapSettings_;
}
settings::PaletteSettings& palette_settings()
{
static settings::PaletteSettings paletteSettings_;
return paletteSettings_;
}
static boost::json::value ConvertSettingsToJson() static boost::json::value ConvertSettingsToJson()
{ {
boost::json::object settingsJson; boost::json::object settingsJson;
general_settings().WriteJson(settingsJson); settings::GeneralSettings::Instance().WriteJson(settingsJson);
map_settings().WriteJson(settingsJson); settings::MapSettings::Instance().WriteJson(settingsJson);
palette_settings().WriteJson(settingsJson); settings::PaletteSettings::Instance().WriteJson(settingsJson);
settings::TextSettings::Instance().WriteJson(settingsJson); settings::TextSettings::Instance().WriteJson(settingsJson);
settings::UiSettings::Instance().WriteJson(settingsJson); settings::UiSettings::Instance().WriteJson(settingsJson);
@ -141,9 +126,9 @@ static void GenerateDefaultSettings()
{ {
logger_->info("Generating default settings"); logger_->info("Generating default settings");
general_settings().SetDefaults(); settings::GeneralSettings::Instance().SetDefaults();
map_settings().SetDefaults(); settings::MapSettings::Instance().SetDefaults();
palette_settings().SetDefaults(); settings::PaletteSettings::Instance().SetDefaults();
settings::TextSettings::Instance().SetDefaults(); settings::TextSettings::Instance().SetDefaults();
settings::UiSettings::Instance().SetDefaults(); settings::UiSettings::Instance().SetDefaults();
} }
@ -154,9 +139,9 @@ static bool LoadSettings(const boost::json::object& settingsJson)
bool jsonDirty = false; bool jsonDirty = false;
jsonDirty |= !general_settings().ReadJson(settingsJson); jsonDirty |= !settings::GeneralSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !map_settings().ReadJson(settingsJson); jsonDirty |= !settings::MapSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !palette_settings().ReadJson(settingsJson); jsonDirty |= !settings::PaletteSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::TextSettings::Instance().ReadJson(settingsJson);
jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson); jsonDirty |= !settings::UiSettings::Instance().ReadJson(settingsJson);
@ -169,7 +154,7 @@ static void ValidateSettings()
bool settingsChanged = false; bool settingsChanged = false;
auto& generalSettings = general_settings(); auto& generalSettings = settings::GeneralSettings::Instance();
// Validate map provider // Validate map provider
std::string mapProviderName = generalSettings.map_provider().GetValue(); std::string mapProviderName = generalSettings.map_provider().GetValue();

View file

@ -1,8 +1,6 @@
#pragma once #pragma once
#include <scwx/qt/settings/general_settings.hpp> #include <string>
#include <scwx/qt/settings/map_settings.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
namespace scwx namespace scwx
{ {
@ -18,10 +16,6 @@ void ReadSettings(const std::string& settingsPath);
void SaveSettings(); void SaveSettings();
void Shutdown(); void Shutdown();
settings::GeneralSettings& general_settings();
settings::MapSettings& map_settings();
settings::PaletteSettings& palette_settings();
} // namespace SettingsManager } // namespace SettingsManager
} // namespace manager } // namespace manager
} // namespace qt } // namespace qt

View file

@ -2,7 +2,7 @@
#include <scwx/qt/manager/timeline_manager.hpp> #include <scwx/qt/manager/timeline_manager.hpp>
#include <scwx/qt/manager/radar_product_manager.hpp> #include <scwx/qt/manager/radar_product_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/settings/general_settings.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <scwx/util/map.hpp> #include <scwx/util/map.hpp>
#include <scwx/util/time.hpp> #include <scwx/util/time.hpp>
@ -39,7 +39,7 @@ class TimelineManager::Impl
public: public:
explicit Impl(TimelineManager* self) : self_ {self} explicit Impl(TimelineManager* self) : self_ {self}
{ {
auto& generalSettings = SettingsManager::general_settings(); auto& generalSettings = settings::GeneralSettings::Instance();
loopDelay_ = loopDelay_ =
std::chrono::milliseconds(generalSettings.loop_delay().GetValue()); std::chrono::milliseconds(generalSettings.loop_delay().GetValue());

View file

@ -1,6 +1,6 @@
#include <scwx/qt/map/alert_layer.hpp> #include <scwx/qt/map/alert_layer.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/manager/text_event_manager.hpp> #include <scwx/qt/manager/text_event_manager.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
#include <scwx/qt/util/color.hpp> #include <scwx/qt/util/color.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <scwx/util/threads.hpp> #include <scwx/util/threads.hpp>
@ -394,7 +394,7 @@ static void AddAlertLayer(std::shared_ptr<QMapLibreGL::Map> map,
const QString& beforeLayer) const QString& beforeLayer)
{ {
settings::PaletteSettings& paletteSettings = settings::PaletteSettings& paletteSettings =
manager::SettingsManager::palette_settings(); settings::PaletteSettings::Instance();
QString sourceId = GetSourceId(phenomenon, alertActive); QString sourceId = GetSourceId(phenomenon, alertActive);
QString idSuffix = GetSuffix(phenomenon, alertActive); QString idSuffix = GetSuffix(phenomenon, alertActive);

View file

@ -1,5 +1,5 @@
#include <scwx/qt/map/map_provider.hpp> #include <scwx/qt/map/map_provider.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/settings/general_settings.hpp>
#include <unordered_map> #include <unordered_map>
@ -128,12 +128,10 @@ std::string GetMapProviderApiKey(MapProvider mapProvider)
switch (mapProvider) switch (mapProvider)
{ {
case MapProvider::Mapbox: case MapProvider::Mapbox:
return manager::SettingsManager::general_settings() return settings::GeneralSettings::Instance().mapbox_api_key().GetValue();
.mapbox_api_key()
.GetValue();
case MapProvider::MapTiler: case MapProvider::MapTiler:
return manager::SettingsManager::general_settings() return settings::GeneralSettings::Instance()
.maptiler_api_key() .maptiler_api_key()
.GetValue(); .GetValue();

View file

@ -3,7 +3,6 @@
#include <scwx/qt/manager/font_manager.hpp> #include <scwx/qt/manager/font_manager.hpp>
#include <scwx/qt/manager/placefile_manager.hpp> #include <scwx/qt/manager/placefile_manager.hpp>
#include <scwx/qt/manager/radar_product_manager.hpp> #include <scwx/qt/manager/radar_product_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/map/alert_layer.hpp> #include <scwx/qt/map/alert_layer.hpp>
#include <scwx/qt/map/color_table_layer.hpp> #include <scwx/qt/map/color_table_layer.hpp>
#include <scwx/qt/map/layer_wrapper.hpp> #include <scwx/qt/map/layer_wrapper.hpp>
@ -13,6 +12,8 @@
#include <scwx/qt/map/radar_product_layer.hpp> #include <scwx/qt/map/radar_product_layer.hpp>
#include <scwx/qt/map/radar_range_layer.hpp> #include <scwx/qt/map/radar_range_layer.hpp>
#include <scwx/qt/model/imgui_context_model.hpp> #include <scwx/qt/model/imgui_context_model.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
#include <scwx/qt/util/file.hpp> #include <scwx/qt/util/file.hpp>
#include <scwx/qt/util/maplibre.hpp> #include <scwx/qt/util/maplibre.hpp>
#include <scwx/qt/util/tooltip.hpp> #include <scwx/qt/util/tooltip.hpp>
@ -81,8 +82,7 @@ public:
prevBearing_ {0.0}, prevBearing_ {0.0},
prevPitch_ {0.0} prevPitch_ {0.0}
{ {
auto& generalSettings = auto& generalSettings = settings::GeneralSettings::Instance();
scwx::qt::manager::SettingsManager::general_settings();
SetRadarSite(generalSettings.default_radar_site().GetValue()); SetRadarSite(generalSettings.default_radar_site().GetValue());
@ -1227,7 +1227,7 @@ void MapWidgetImpl::InitializeNewRadarProductView(
auto radarProductView = context_->radar_product_view(); auto radarProductView = context_->radar_product_view();
std::string colorTableFile = std::string colorTableFile =
manager::SettingsManager::palette_settings() settings::PaletteSettings::Instance()
.palette(colorPalette) .palette(colorPalette)
.GetValue(); .GetValue();
if (!colorTableFile.empty()) if (!colorTableFile.empty())

View file

@ -16,10 +16,10 @@ namespace settings
static const std::string logPrefix_ = "scwx::qt::settings::general_settings"; static const std::string logPrefix_ = "scwx::qt::settings::general_settings";
class GeneralSettingsImpl class GeneralSettings::Impl
{ {
public: public:
explicit GeneralSettingsImpl() explicit Impl()
{ {
std::string defaultDefaultAlertActionValue = std::string defaultDefaultAlertActionValue =
types::GetAlertActionName(types::AlertAction::Go); types::GetAlertActionName(types::AlertAction::Go);
@ -102,7 +102,7 @@ public:
{ return !value.empty(); }); { return !value.empty(); });
} }
~GeneralSettingsImpl() {} ~Impl() {}
SettingsVariable<bool> debugEnabled_ {"debug_enabled"}; SettingsVariable<bool> debugEnabled_ {"debug_enabled"};
SettingsVariable<std::string> defaultAlertAction_ {"default_alert_action"}; SettingsVariable<std::string> defaultAlertAction_ {"default_alert_action"};
@ -120,7 +120,7 @@ public:
}; };
GeneralSettings::GeneralSettings() : GeneralSettings::GeneralSettings() :
SettingsCategory("general"), p(std::make_unique<GeneralSettingsImpl>()) SettingsCategory("general"), p(std::make_unique<Impl>())
{ {
RegisterVariables({&p->debugEnabled_, RegisterVariables({&p->debugEnabled_,
&p->defaultAlertAction_, &p->defaultAlertAction_,
@ -221,6 +221,12 @@ bool GeneralSettings::Shutdown()
return dataChanged; return dataChanged;
} }
GeneralSettings& GeneralSettings::Instance()
{
static GeneralSettings generalSettings_;
return generalSettings_;
}
bool operator==(const GeneralSettings& lhs, const GeneralSettings& rhs) bool operator==(const GeneralSettings& lhs, const GeneralSettings& rhs)
{ {
return (lhs.p->debugEnabled_ == rhs.p->debugEnabled_ && return (lhs.p->debugEnabled_ == rhs.p->debugEnabled_ &&

View file

@ -13,8 +13,6 @@ namespace qt
namespace settings namespace settings
{ {
class GeneralSettingsImpl;
class GeneralSettings : public SettingsCategory class GeneralSettings : public SettingsCategory
{ {
public: public:
@ -41,13 +39,16 @@ public:
SettingsVariable<std::string>& maptiler_api_key() const; SettingsVariable<std::string>& maptiler_api_key() const;
SettingsVariable<bool>& update_notifications_enabled() const; SettingsVariable<bool>& update_notifications_enabled() const;
static GeneralSettings& Instance();
friend bool operator==(const GeneralSettings& lhs, friend bool operator==(const GeneralSettings& lhs,
const GeneralSettings& rhs); const GeneralSettings& rhs);
bool Shutdown(); bool Shutdown();
private: private:
std::unique_ptr<GeneralSettingsImpl> p; class Impl;
std::unique_ptr<Impl> p;
}; };
} // namespace settings } // namespace settings

View file

@ -35,7 +35,7 @@ static const std::string kDefaultRadarProductGroupString_ = "L3";
static const std::array<std::string, kCount_> kDefaultRadarProduct_ { static const std::array<std::string, kCount_> kDefaultRadarProduct_ {
"N0B", "N0G", "N0C", "N0X"}; "N0B", "N0G", "N0C", "N0X"};
class MapSettingsImpl class MapSettings::Impl
{ {
public: public:
struct MapData struct MapData
@ -47,7 +47,7 @@ public:
SettingsVariable<std::string> radarProduct_ {kRadarProductName_}; SettingsVariable<std::string> radarProduct_ {kRadarProductName_};
}; };
explicit MapSettingsImpl() explicit Impl()
{ {
for (std::size_t i = 0; i < kCount_; i++) for (std::size_t i = 0; i < kCount_; i++)
{ {
@ -101,7 +101,7 @@ public:
} }
} }
~MapSettingsImpl() {} ~Impl() {}
void SetDefaults(std::size_t i) void SetDefaults(std::size_t i)
{ {
@ -111,12 +111,30 @@ public:
map_[i].radarProduct_.SetValueToDefault(); map_[i].radarProduct_.SetValueToDefault();
} }
friend void tag_invoke(boost::json::value_from_tag,
boost::json::value& jv,
const MapData& data)
{
jv = {{kMapStyleName_, data.mapStyle_.GetValue()},
{kRadarSiteName_, data.radarSite_.GetValue()},
{kRadarProductGroupName_, data.radarProductGroup_.GetValue()},
{kRadarProductName_, data.radarProduct_.GetValue()}};
}
friend bool operator==(const MapData& lhs, const MapData& rhs)
{
return (lhs.mapStyle_ == rhs.mapStyle_ && //
lhs.radarSite_ == rhs.radarSite_ &&
lhs.radarProductGroup_ == rhs.radarProductGroup_ &&
lhs.radarProduct_ == rhs.radarProduct_);
}
std::array<MapData, kCount_> map_ {}; std::array<MapData, kCount_> map_ {};
std::vector<SettingsVariableBase*> variables_ {}; std::vector<SettingsVariableBase*> variables_ {};
}; };
MapSettings::MapSettings() : MapSettings::MapSettings() :
SettingsCategory("maps"), p(std::make_unique<MapSettingsImpl>()) SettingsCategory("maps"), p(std::make_unique<Impl>())
{ {
RegisterVariables(p->variables_); RegisterVariables(p->variables_);
SetDefaults(); SetDefaults();
@ -161,7 +179,7 @@ bool MapSettings::Shutdown()
// Commit settings that are managed separate from the settings dialog // Commit settings that are managed separate from the settings dialog
for (std::size_t i = 0; i < kCount_; ++i) for (std::size_t i = 0; i < kCount_; ++i)
{ {
MapSettingsImpl::MapData& mapRecordSettings = p->map_[i]; Impl::MapData& mapRecordSettings = p->map_[i];
dataChanged |= mapRecordSettings.mapStyle_.Commit(); dataChanged |= mapRecordSettings.mapStyle_.Commit();
} }
@ -184,7 +202,7 @@ bool MapSettings::ReadJson(const boost::json::object& json)
if (i < mapArray.size() && mapArray.at(i).is_object()) if (i < mapArray.size() && mapArray.at(i).is_object())
{ {
const boost::json::object& mapRecord = mapArray.at(i).as_object(); const boost::json::object& mapRecord = mapArray.at(i).as_object();
MapSettingsImpl::MapData& mapRecordSettings = p->map_[i]; Impl::MapData& mapRecordSettings = p->map_[i];
// Load JSON Elements // Load JSON Elements
validated &= mapRecordSettings.mapStyle_.ReadValue(mapRecord); validated &= mapRecordSettings.mapStyle_.ReadValue(mapRecord);
@ -234,14 +252,10 @@ void MapSettings::WriteJson(boost::json::object& json) const
json.insert_or_assign(name(), object); json.insert_or_assign(name(), object);
} }
void tag_invoke(boost::json::value_from_tag, MapSettings& MapSettings::Instance()
boost::json::value& jv,
const MapSettingsImpl::MapData& data)
{ {
jv = {{kMapStyleName_, data.mapStyle_.GetValue()}, static MapSettings mapSettings_;
{kRadarSiteName_, data.radarSite_.GetValue()}, return mapSettings_;
{kRadarProductGroupName_, data.radarProductGroup_.GetValue()},
{kRadarProductName_, data.radarProduct_.GetValue()}};
} }
bool operator==(const MapSettings& lhs, const MapSettings& rhs) bool operator==(const MapSettings& lhs, const MapSettings& rhs)
@ -249,15 +263,6 @@ bool operator==(const MapSettings& lhs, const MapSettings& rhs)
return (lhs.p->map_ == rhs.p->map_); return (lhs.p->map_ == rhs.p->map_);
} }
bool operator==(const MapSettingsImpl::MapData& lhs,
const MapSettingsImpl::MapData& rhs)
{
return (lhs.mapStyle_ == rhs.mapStyle_ && //
lhs.radarSite_ == rhs.radarSite_ &&
lhs.radarProductGroup_ == rhs.radarProductGroup_ &&
lhs.radarProduct_ == rhs.radarProduct_);
}
} // namespace settings } // namespace settings
} // namespace qt } // namespace qt
} // namespace scwx } // namespace scwx

View file

@ -13,8 +13,6 @@ namespace qt
namespace settings namespace settings
{ {
class MapSettingsImpl;
class MapSettings : public SettingsCategory class MapSettings : public SettingsCategory
{ {
public: public:
@ -52,10 +50,13 @@ public:
*/ */
void WriteJson(boost::json::object& json) const override; void WriteJson(boost::json::object& json) const override;
static MapSettings& Instance();
friend bool operator==(const MapSettings& lhs, const MapSettings& rhs); friend bool operator==(const MapSettings& lhs, const MapSettings& rhs);
private: private:
std::unique_ptr<MapSettingsImpl> p; class Impl;
std::unique_ptr<Impl> p;
}; };
} // namespace settings } // namespace settings

View file

@ -72,10 +72,10 @@ static const std::map<
static const std::string kDefaultKey_ {"???"}; static const std::string kDefaultKey_ {"???"};
static const awips::Phenomenon kDefaultPhenomenon_ {awips::Phenomenon::Marine}; static const awips::Phenomenon kDefaultPhenomenon_ {awips::Phenomenon::Marine};
class PaletteSettingsImpl class PaletteSettings::Impl
{ {
public: public:
explicit PaletteSettingsImpl() explicit Impl()
{ {
for (const auto& name : kPaletteKeys_) for (const auto& name : kPaletteKeys_)
{ {
@ -120,7 +120,7 @@ public:
} }
} }
~PaletteSettingsImpl() {} ~Impl() {}
static bool ValidateColor(const std::string& value); static bool ValidateColor(const std::string& value);
@ -132,14 +132,14 @@ public:
std::vector<SettingsVariableBase*> variables_ {}; std::vector<SettingsVariableBase*> variables_ {};
}; };
bool PaletteSettingsImpl::ValidateColor(const std::string& value) bool PaletteSettings::Impl::ValidateColor(const std::string& value)
{ {
static const std::regex re {"#[0-9A-Za-z]{8}"}; static const std::regex re {"#[0-9A-Za-z]{8}"};
return std::regex_match(value, re); return std::regex_match(value, re);
} }
PaletteSettings::PaletteSettings() : PaletteSettings::PaletteSettings() :
SettingsCategory("palette"), p(std::make_unique<PaletteSettingsImpl>()) SettingsCategory("palette"), p(std::make_unique<Impl>())
{ {
RegisterVariables(p->variables_); RegisterVariables(p->variables_);
SetDefaults(); SetDefaults();
@ -200,6 +200,12 @@ const std::vector<awips::Phenomenon>& PaletteSettings::alert_phenomena()
return kAlertPhenomena_; return kAlertPhenomena_;
} }
PaletteSettings& PaletteSettings::Instance()
{
static PaletteSettings paletteSettings_;
return paletteSettings_;
}
bool operator==(const PaletteSettings& lhs, const PaletteSettings& rhs) bool operator==(const PaletteSettings& lhs, const PaletteSettings& rhs)
{ {
return lhs.p->palette_ == rhs.p->palette_; return lhs.p->palette_ == rhs.p->palette_;

View file

@ -14,8 +14,6 @@ namespace qt
namespace settings namespace settings
{ {
class PaletteSettingsImpl;
class PaletteSettings : public SettingsCategory class PaletteSettings : public SettingsCategory
{ {
public: public:
@ -34,11 +32,14 @@ public:
static const std::vector<awips::Phenomenon>& alert_phenomena(); static const std::vector<awips::Phenomenon>& alert_phenomena();
static PaletteSettings& Instance();
friend bool operator==(const PaletteSettings& lhs, friend bool operator==(const PaletteSettings& lhs,
const PaletteSettings& rhs); const PaletteSettings& rhs);
private: private:
std::unique_ptr<PaletteSettingsImpl> p; class Impl;
std::unique_ptr<Impl> p;
}; };
} // namespace settings } // namespace settings

View file

@ -169,8 +169,8 @@ SettingsVariable<std::string>& TextSettings::tooltip_method() const
TextSettings& TextSettings::Instance() TextSettings& TextSettings::Instance()
{ {
static TextSettings TextSettings_; static TextSettings textSettings_;
return TextSettings_; return textSettings_;
} }
bool operator==(const TextSettings& lhs, const TextSettings& rhs) bool operator==(const TextSettings& lhs, const TextSettings& rhs)

View file

@ -1,10 +1,10 @@
#include "alert_dock_widget.hpp" #include "alert_dock_widget.hpp"
#include "ui_alert_dock_widget.h" #include "ui_alert_dock_widget.h"
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/manager/text_event_manager.hpp> #include <scwx/qt/manager/text_event_manager.hpp>
#include <scwx/qt/model/alert_model.hpp> #include <scwx/qt/model/alert_model.hpp>
#include <scwx/qt/model/alert_proxy_model.hpp> #include <scwx/qt/model/alert_proxy_model.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/types/alert_types.hpp> #include <scwx/qt/types/alert_types.hpp>
#include <scwx/qt/types/qt_types.hpp> #include <scwx/qt/types/qt_types.hpp>
#include <scwx/qt/ui/alert_dialog.hpp> #include <scwx/qt/ui/alert_dialog.hpp>
@ -175,10 +175,10 @@ void AlertDockWidgetImpl::ConnectSignals()
// If an item is selected // If an item is selected
if (selectedAlertKey_ != types::TextEventKey {}) if (selectedAlertKey_ != types::TextEventKey {})
{ {
types::AlertAction alertAction = types::GetAlertAction( types::AlertAction alertAction =
manager::SettingsManager::general_settings() types::GetAlertAction(settings::GeneralSettings::Instance()
.default_alert_action() .default_alert_action()
.GetValue()); .GetValue());
switch (alertAction) switch (alertAction)
{ {

View file

@ -1,7 +1,7 @@
#include "animation_dock_widget.hpp" #include "animation_dock_widget.hpp"
#include "ui_animation_dock_widget.h" #include "ui_animation_dock_widget.h"
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/util/time.hpp> #include <scwx/qt/util/time.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
@ -101,7 +101,7 @@ AnimationDockWidget::AnimationDockWidget(QWidget* parent) :
maxDateTimer->start(15000); maxDateTimer->start(15000);
// Set loop defaults // Set loop defaults
auto& generalSettings = manager::SettingsManager::general_settings(); auto& generalSettings = settings::GeneralSettings::Instance();
ui->loopTimeSpinBox->setValue(generalSettings.loop_time().GetValue()); ui->loopTimeSpinBox->setValue(generalSettings.loop_time().GetValue());
ui->loopSpeedSpinBox->setValue(generalSettings.loop_speed().GetValue()); ui->loopSpeedSpinBox->setValue(generalSettings.loop_speed().GetValue());
ui->loopDelaySpinBox->setValue(generalSettings.loop_delay().GetValue() * ui->loopDelaySpinBox->setValue(generalSettings.loop_delay().GetValue() *
@ -175,7 +175,7 @@ void AnimationDockWidgetImpl::ConnectSignals()
self_, self_,
[this](int i) [this](int i)
{ {
manager::SettingsManager::general_settings().loop_time().StageValue(i); settings::GeneralSettings::Instance().loop_time().StageValue(i);
Q_EMIT self_->LoopTimeChanged(std::chrono::minutes(i)); Q_EMIT self_->LoopTimeChanged(std::chrono::minutes(i));
}); });
QObject::connect( QObject::connect(
@ -184,8 +184,7 @@ void AnimationDockWidgetImpl::ConnectSignals()
self_, self_,
[this](double d) [this](double d)
{ {
manager::SettingsManager::general_settings().loop_speed().StageValue( settings::GeneralSettings::Instance().loop_speed().StageValue(d);
d);
Q_EMIT self_->LoopSpeedChanged(d); Q_EMIT self_->LoopSpeedChanged(d);
}); });
QObject::connect( QObject::connect(
@ -194,7 +193,7 @@ void AnimationDockWidgetImpl::ConnectSignals()
self_, self_,
[this](double d) [this](double d)
{ {
manager::SettingsManager::general_settings().loop_delay().StageValue( settings::GeneralSettings::Instance().loop_delay().StageValue(
static_cast<std::int64_t>(d * 1000.0)); static_cast<std::int64_t>(d * 1000.0));
Q_EMIT self_->LoopDelayChanged(std::chrono::milliseconds( Q_EMIT self_->LoopDelayChanged(std::chrono::milliseconds(
static_cast<typename std::chrono::milliseconds::rep>(d * 1000.0))); static_cast<typename std::chrono::milliseconds::rep>(d * 1000.0)));

View file

@ -6,6 +6,8 @@
#include <scwx/qt/config/radar_site.hpp> #include <scwx/qt/config/radar_site.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/map/map_provider.hpp> #include <scwx/qt/map/map_provider.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
#include <scwx/qt/settings/settings_interface.hpp> #include <scwx/qt/settings/settings_interface.hpp>
#include <scwx/qt/settings/text_settings.hpp> #include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/types/alert_types.hpp> #include <scwx/qt/types/alert_types.hpp>
@ -104,7 +106,7 @@ public:
&tooltipMethod_}} &tooltipMethod_}}
{ {
// Configure default alert phenomena colors // Configure default alert phenomena colors
auto& paletteSettings = manager::SettingsManager::palette_settings(); auto& paletteSettings = settings::PaletteSettings::Instance();
int index = 0; int index = 0;
for (auto& phenomenon : settings::PaletteSettings::alert_phenomena()) for (auto& phenomenon : settings::PaletteSettings::alert_phenomena())
@ -384,7 +386,7 @@ void SettingsDialogImpl::SetupGeneralTab()
} }
settings::GeneralSettings& generalSettings = settings::GeneralSettings& generalSettings =
manager::SettingsManager::general_settings(); settings::GeneralSettings::Instance();
defaultRadarSite_.SetSettingsVariable(generalSettings.default_radar_site()); defaultRadarSite_.SetSettingsVariable(generalSettings.default_radar_site());
defaultRadarSite_.SetMapFromValueFunction( defaultRadarSite_.SetMapFromValueFunction(
@ -525,7 +527,7 @@ void SettingsDialogImpl::SetupGeneralTab()
void SettingsDialogImpl::SetupPalettesColorTablesTab() void SettingsDialogImpl::SetupPalettesColorTablesTab()
{ {
settings::PaletteSettings& paletteSettings = settings::PaletteSettings& paletteSettings =
manager::SettingsManager::palette_settings(); settings::PaletteSettings::Instance();
// Palettes > Color Tables // Palettes > Color Tables
QGridLayout* colorTableLayout = QGridLayout* colorTableLayout =
@ -617,7 +619,7 @@ void SettingsDialogImpl::SetupPalettesColorTablesTab()
void SettingsDialogImpl::SetupPalettesAlertsTab() void SettingsDialogImpl::SetupPalettesAlertsTab()
{ {
settings::PaletteSettings& paletteSettings = settings::PaletteSettings& paletteSettings =
manager::SettingsManager::palette_settings(); settings::PaletteSettings::Instance();
// Palettes > Alerts // Palettes > Alerts
QGridLayout* alertsLayout = QGridLayout* alertsLayout =

View file

@ -5,8 +5,8 @@
#define _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS
#include <scwx/qt/util/font.hpp> #include <scwx/qt/util/font.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/model/imgui_context_model.hpp> #include <scwx/qt/model/imgui_context_model.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <codecvt> #include <codecvt>
@ -337,7 +337,7 @@ std::shared_ptr<Font> Font::Create(const std::string& resource)
font->p->CreateImGuiFont( font->p->CreateImGuiFont(
fontFile, fontFile,
fontData, fontData,
manager::SettingsManager::general_settings().font_sizes().GetValue()); settings::GeneralSettings::Instance().font_sizes().GetValue());
font->p->atlas_ = ftgl::texture_atlas_new(512, 512, 1); font->p->atlas_ = ftgl::texture_atlas_new(512, 512, 1);
ftgl::texture_font_t* textureFont = ftgl::texture_font_new_from_memory( ftgl::texture_font_t* textureFont = ftgl::texture_font_new_from_memory(

View file

@ -1,6 +1,6 @@
#include <scwx/qt/util/imgui.hpp> #include <scwx/qt/util/imgui.hpp>
#include <scwx/qt/manager/resource_manager.hpp> #include <scwx/qt/manager/resource_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/settings/general_settings.hpp>
#include <scwx/util/logger.hpp> #include <scwx/util/logger.hpp>
#include <mutex> #include <mutex>
@ -48,7 +48,7 @@ void ImGui::Impl::Initialize()
// Configure monospace font // Configure monospace font
UpdateMonospaceFont(); UpdateMonospaceFont();
manager::SettingsManager::general_settings() settings::GeneralSettings::Instance()
.font_sizes() .font_sizes()
.RegisterValueChangedCallback([this](const std::vector<std::int64_t>&) .RegisterValueChangedCallback([this](const std::vector<std::int64_t>&)
{ UpdateMonospaceFont(); }); { UpdateMonospaceFont(); });
@ -61,7 +61,7 @@ void ImGui::Impl::UpdateMonospaceFont()
// Get monospace font size // Get monospace font size
std::size_t fontSize = 16; std::size_t fontSize = 16;
auto fontSizes = auto fontSizes =
manager::SettingsManager::general_settings().font_sizes().GetValue(); settings::GeneralSettings::Instance().font_sizes().GetValue();
if (fontSizes.size() > 1) if (fontSizes.size() > 1)
{ {
fontSize = fontSizes[1]; fontSize = fontSizes[1];

View file

@ -1,5 +1,5 @@
#include <scwx/qt/util/tooltip.hpp> #include <scwx/qt/util/tooltip.hpp>
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/text_settings.hpp> #include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/types/font_types.hpp> #include <scwx/qt/types/font_types.hpp>
#include <scwx/qt/types/text_types.hpp> #include <scwx/qt/types/text_types.hpp>
@ -100,7 +100,7 @@ void Show(const std::string& text, const QPointF& mouseGlobalPos)
// Get monospace font size // Get monospace font size
units::font_size::pixels<double> fontSize {16}; units::font_size::pixels<double> fontSize {16};
auto fontSizes = auto fontSizes =
manager::SettingsManager::general_settings().font_sizes().GetValue(); settings::GeneralSettings::Instance().font_sizes().GetValue();
if (fontSizes.size() > 1) if (fontSizes.size() > 1)
{ {
fontSize = units::font_size::pixels<double> {fontSizes[1]}; fontSize = units::font_size::pixels<double> {fontSizes[1]};

View file

@ -1,5 +1,10 @@
#include <scwx/qt/manager/settings_manager.hpp> #include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/config/radar_site.hpp> #include <scwx/qt/config/radar_site.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/settings/map_settings.hpp>
#include <scwx/qt/settings/palette_settings.hpp>
#include <scwx/qt/settings/text_settings.hpp>
#include <scwx/qt/settings/ui_settings.hpp>
#include <filesystem> #include <filesystem>
#include <fstream> #include <fstream>
@ -39,10 +44,14 @@ void VerifyDefaults()
settings::GeneralSettings defaultGeneralSettings {}; settings::GeneralSettings defaultGeneralSettings {};
settings::MapSettings defaultMapSettings {}; settings::MapSettings defaultMapSettings {};
settings::PaletteSettings defaultPaletteSettings {}; settings::PaletteSettings defaultPaletteSettings {};
settings::TextSettings defaultTextSettings {};
settings::UiSettings defaultUiSettings {};
EXPECT_EQ(defaultGeneralSettings, SettingsManager::general_settings()); EXPECT_EQ(defaultGeneralSettings, settings::GeneralSettings::Instance());
EXPECT_EQ(defaultMapSettings, SettingsManager::map_settings()); EXPECT_EQ(defaultMapSettings, settings::MapSettings::Instance());
EXPECT_EQ(defaultPaletteSettings, SettingsManager::palette_settings()); EXPECT_EQ(defaultPaletteSettings, settings::PaletteSettings::Instance());
EXPECT_EQ(defaultTextSettings, settings::TextSettings::Instance());
EXPECT_EQ(defaultUiSettings, settings::UiSettings::Instance());
} }
void CompareFiles(const std::string& file1, const std::string& file2) void CompareFiles(const std::string& file1, const std::string& file2)
@ -86,11 +95,11 @@ TEST_F(SettingsManagerTest, SettingsKeax)
SettingsManager::ReadSettings(filename); SettingsManager::ReadSettings(filename);
EXPECT_EQ( EXPECT_EQ(
SettingsManager::general_settings().default_radar_site().GetValue(), settings::GeneralSettings::Instance().default_radar_site().GetValue(),
"KEAX"); "KEAX");
for (size_t i = 0; i < SettingsManager::map_settings().count(); ++i) for (size_t i = 0; i < settings::MapSettings::Instance().count(); ++i)
{ {
EXPECT_EQ(SettingsManager::map_settings().radar_site(i).GetValue(), EXPECT_EQ(settings::MapSettings::Instance().radar_site(i).GetValue(),
"KEAX"); "KEAX");
} }
} }