diff --git a/scwx-qt/source/scwx/qt/settings/general_settings.cpp b/scwx-qt/source/scwx/qt/settings/general_settings.cpp index 7f1dabcd..fe73a7d5 100644 --- a/scwx-qt/source/scwx/qt/settings/general_settings.cpp +++ b/scwx-qt/source/scwx/qt/settings/general_settings.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,8 @@ public: types::GetDefaultTimeZoneName(types::DefaultTimeZone::Radar); std::string defaultMapProviderValue = map::GetMapProviderName(map::MapProvider::MapTiler); + std::string defaultPositioningPlugin = + types::GetPositioningPluginName(types::PositioningPlugin::Default); std::string defaultThemeValue = types::GetUiStyleName(types::UiStyle::Default); @@ -44,6 +47,7 @@ public: boost::to_lower(defaultDefaultAlertActionValue); boost::to_lower(defaultDefaultTimeZoneValue); boost::to_lower(defaultMapProviderValue); + boost::to_lower(defaultPositioningPlugin); boost::to_lower(defaultThemeValue); antiAliasingEnabled_.SetDefault(true); @@ -61,6 +65,9 @@ public: mapProvider_.SetDefault(defaultMapProviderValue); mapboxApiKey_.SetDefault("?"); maptilerApiKey_.SetDefault("?"); + nmeaBaudRate_.SetDefault(9600); + nmeaSource_.SetDefault(""); + positioningPlugin_.SetDefault(defaultPositioningPlugin); showMapAttribution_.SetDefault(true); showMapCenter_.SetDefault(false); showMapLogo_.SetDefault(true); @@ -83,6 +90,8 @@ public: loopSpeed_.SetMaximum(99.99); loopTime_.SetMinimum(1); loopTime_.SetMaximum(1440); + nmeaBaudRate_.SetMinimum(1); + nmeaBaudRate_.SetMaximum(999999999); clockFormat_.SetValidator( SCWX_SETTINGS_ENUM_VALIDATOR(scwx::util::ClockFormat, @@ -104,6 +113,10 @@ public: { return !value.empty(); }); maptilerApiKey_.SetValidator([](const std::string& value) { return !value.empty(); }); + positioningPlugin_.SetValidator( + SCWX_SETTINGS_ENUM_VALIDATOR(types::PositioningPlugin, + types::PositioningPluginIterator(), + types::GetPositioningPluginName)); theme_.SetValidator( // SCWX_SETTINGS_ENUM_VALIDATOR(types::UiStyle, // types::UiStyleIterator(), @@ -128,13 +141,16 @@ public: SettingsVariable loopSpeed_ {"loop_speed"}; SettingsVariable loopTime_ {"loop_time"}; SettingsVariable mapProvider_ {"map_provider"}; - SettingsVariable mapboxApiKey_ {"mapbox_api_key"}; - SettingsVariable maptilerApiKey_ {"maptiler_api_key"}; - SettingsVariable showMapAttribution_ {"show_map_attribution"}; - SettingsVariable showMapCenter_ {"show_map_center"}; - SettingsVariable showMapLogo_ {"show_map_logo"}; - SettingsVariable theme_ {"theme"}; - SettingsVariable trackLocation_ {"track_location"}; + SettingsVariable mapboxApiKey_ {"mapbox_api_key"}; + SettingsVariable maptilerApiKey_ {"maptiler_api_key"}; + SettingsVariable nmeaBaudRate_ {"nmea_baud_rate"}; + SettingsVariable nmeaSource_ {"nmea_source"}; + SettingsVariable positioningPlugin_ {"positioning_plugin"}; + SettingsVariable showMapAttribution_ {"show_map_attribution"}; + SettingsVariable showMapCenter_ {"show_map_center"}; + SettingsVariable showMapLogo_ {"show_map_logo"}; + SettingsVariable theme_ {"theme"}; + SettingsVariable trackLocation_ {"track_location"}; SettingsVariable updateNotificationsEnabled_ {"update_notifications"}; SettingsVariable warningsProvider_ {"warnings_provider"}; }; @@ -157,6 +173,9 @@ GeneralSettings::GeneralSettings() : &p->mapProvider_, &p->mapboxApiKey_, &p->maptilerApiKey_, + &p->nmeaBaudRate_, + &p->nmeaSource_, + &p->positioningPlugin_, &p->showMapAttribution_, &p->showMapCenter_, &p->showMapLogo_, @@ -248,6 +267,21 @@ SettingsVariable& GeneralSettings::maptiler_api_key() const return p->maptilerApiKey_; } +SettingsVariable& GeneralSettings::nmea_baud_rate() const +{ + return p->nmeaBaudRate_; +} + +SettingsVariable& GeneralSettings::nmea_source() const +{ + return p->nmeaSource_; +} + +SettingsVariable& GeneralSettings::positioning_plugin() const +{ + return p->positioningPlugin_; +} + SettingsVariable& GeneralSettings::show_map_attribution() const { return p->showMapAttribution_; @@ -319,6 +353,9 @@ bool operator==(const GeneralSettings& lhs, const GeneralSettings& rhs) lhs.p->mapProvider_ == rhs.p->mapProvider_ && lhs.p->mapboxApiKey_ == rhs.p->mapboxApiKey_ && lhs.p->maptilerApiKey_ == rhs.p->maptilerApiKey_ && + lhs.p->nmeaBaudRate_ == rhs.p->nmeaBaudRate_ && + lhs.p->nmeaSource_ == rhs.p->nmeaSource_ && + lhs.p->positioningPlugin_ == rhs.p->positioningPlugin_ && lhs.p->showMapAttribution_ == rhs.p->showMapAttribution_ && lhs.p->showMapCenter_ == rhs.p->showMapCenter_ && lhs.p->showMapLogo_ == rhs.p->showMapLogo_ && diff --git a/scwx-qt/source/scwx/qt/settings/general_settings.hpp b/scwx-qt/source/scwx/qt/settings/general_settings.hpp index 65c3536f..4c162616 100644 --- a/scwx-qt/source/scwx/qt/settings/general_settings.hpp +++ b/scwx-qt/source/scwx/qt/settings/general_settings.hpp @@ -40,6 +40,9 @@ public: SettingsVariable& map_provider() const; SettingsVariable& mapbox_api_key() const; SettingsVariable& maptiler_api_key() const; + SettingsVariable& nmea_baud_rate() const; + SettingsVariable& nmea_source() const; + SettingsVariable& positioning_plugin() const; SettingsVariable& show_map_attribution() const; SettingsVariable& show_map_center() const; SettingsVariable& show_map_logo() const; diff --git a/scwx-qt/source/scwx/qt/types/location_types.cpp b/scwx-qt/source/scwx/qt/types/location_types.cpp index 63ec414c..b1c759de 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.cpp +++ b/scwx-qt/source/scwx/qt/types/location_types.cpp @@ -19,13 +19,24 @@ static const std::unordered_map {LocationMethod::All, "All"}, {LocationMethod::Unknown, "?"}}; +static const std::unordered_map + positioningPluginName_ {{PositioningPlugin::Default, "Default"}, + {PositioningPlugin::Nmea, "NMEA"}, + {PositioningPlugin::Unknown, "?"}}; + SCWX_GET_ENUM(LocationMethod, GetLocationMethod, locationMethodName_) +SCWX_GET_ENUM(PositioningPlugin, GetPositioningPlugin, positioningPluginName_) const std::string& GetLocationMethodName(LocationMethod locationMethod) { return locationMethodName_.at(locationMethod); } +const std::string& GetPositioningPluginName(PositioningPlugin positioningPlugin) +{ + return positioningPluginName_.at(positioningPlugin); +} + } // namespace types } // namespace qt } // namespace scwx diff --git a/scwx-qt/source/scwx/qt/types/location_types.hpp b/scwx-qt/source/scwx/qt/types/location_types.hpp index 3c9407de..65d32f1e 100644 --- a/scwx-qt/source/scwx/qt/types/location_types.hpp +++ b/scwx-qt/source/scwx/qt/types/location_types.hpp @@ -23,9 +23,24 @@ typedef scwx::util:: Iterator LocationMethodIterator; +enum class PositioningPlugin +{ + Default, + Nmea, + Unknown +}; +typedef scwx::util::Iterator + PositioningPluginIterator; + LocationMethod GetLocationMethod(const std::string& name); const std::string& GetLocationMethodName(LocationMethod locationMethod); +PositioningPlugin GetPositioningPlugin(const std::string& name); +const std::string& +GetPositioningPluginName(PositioningPlugin positioningPlugin); + } // namespace types } // namespace qt } // namespace scwx diff --git a/test/data b/test/data index af115273..35e3e40d 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit af115273844804d29c502b5ecbb94eee2b4b02f4 +Subproject commit 35e3e40d63bc020dfdc50c438c700c368fdf32fc