Only create a new position source once when multiple settings change

This commit is contained in:
Dan Paulat 2024-05-16 23:04:53 -05:00
parent 44698a593f
commit 2efdd1b046

View file

@ -1,4 +1,5 @@
#include <scwx/qt/manager/position_manager.hpp>
#include <scwx/qt/manager/settings_manager.hpp>
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/types/location_types.hpp>
#include <scwx/common/geographic.hpp>
@ -36,13 +37,27 @@ public:
positioningPluginCallbackUuid_ =
generalSettings.positioning_plugin().RegisterValueChangedCallback(
[this](const std::string&) { CreatePositionSource(); });
[this](const std::string&)
{ createPositionSourcePending_ = true; });
nmeaBaudRateCallbackUuid_ =
generalSettings.nmea_baud_rate().RegisterValueChangedCallback(
[this](const std::int64_t&) { CreatePositionSource(); });
[this](const std::int64_t&)
{ createPositionSourcePending_ = true; });
nmeaSourceCallbackUuid_ =
generalSettings.nmea_source().RegisterValueChangedCallback(
[this](const std::string&) { CreatePositionSource(); });
[this](const std::string&)
{ createPositionSourcePending_ = true; });
connect(&SettingsManager::Instance(),
&SettingsManager::SettingsSaved,
self_,
[this]()
{
if (createPositionSourcePending_)
{
CreatePositionSource();
}
});
}
~Impl()
{
@ -78,6 +93,8 @@ public:
boost::uuids::uuid positioningPluginCallbackUuid_ {};
boost::uuids::uuid nmeaBaudRateCallbackUuid_ {};
boost::uuids::uuid nmeaSourceCallbackUuid_ {};
bool createPositionSourcePending_ {false};
};
PositionManager::PositionManager() : p(std::make_unique<Impl>(this)) {}
@ -97,6 +114,8 @@ void PositionManager::Impl::CreatePositionSource()
{
auto& generalSettings = settings::GeneralSettings::Instance();
createPositionSourcePending_ = false;
types::PositioningPlugin positioningPlugin = types::GetPositioningPlugin(
generalSettings.positioning_plugin().GetValue());
std::int64_t nmeaBaudRate = generalSettings.nmea_baud_rate().GetValue();