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 e2c2ea59..228badd6 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 @@ -4,6 +4,41 @@ #include +#define SCWX_ENUM_MAP_FROM_VALUE(Iterator, ToName) \ + [](const std::string& text) -> std::string \ + { \ + for (auto enumValue : Iterator) \ + { \ + const std::string enumName = ToName(enumValue); \ + \ + if (boost::iequals(text, enumName)) \ + { \ + /* Return label */ \ + return enumName; \ + } \ + } \ + \ + /* Label not found, return unknown */ \ + return "?"; \ + } + +#define SCWX_SETTINGS_COMBO_BOX(settingsInterface, comboBox, Iterator, ToName) \ + for (const auto& enumValue : Iterator) \ + { \ + comboBox->addItem(QString::fromStdString(ToName(enumValue))); \ + } \ + \ + settingsInterface.SetMapFromValueFunction( \ + SCWX_ENUM_MAP_FROM_VALUE(Iterator, ToName)); \ + settingsInterface.SetMapToValueFunction( \ + [](std::string text) -> std::string \ + { \ + boost::to_lower(text); \ + return text; \ + }); \ + \ + settingsInterface.SetEditWidget(comboBox); + namespace scwx { namespace qt diff --git a/scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp b/scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp index fc1a6b9a..946d21ce 100644 --- a/scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp @@ -12,36 +12,6 @@ #include #include -#define SCWX_SETTINGS_COMBO_BOX(settingsInterface, comboBox, Iterator, ToName) \ - for (const auto& enumValue : Iterator) \ - { \ - comboBox->addItem(QString::fromStdString(ToName(enumValue))); \ - } \ - \ - settingsInterface.SetMapFromValueFunction( \ - [](const std::string& text) -> std::string \ - { \ - for (const auto& enumValue : Iterator) \ - { \ - const std::string valueName = ToName(enumValue); \ - \ - if (boost::iequals(text, valueName)) \ - { \ - return valueName; \ - } \ - } \ - \ - return "?"; \ - }); \ - settingsInterface.SetMapToValueFunction( \ - [](std::string text) -> std::string \ - { \ - boost::to_lower(text); \ - return text; \ - }); \ - \ - settingsInterface.SetEditWidget(comboBox); - namespace scwx { namespace qt diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp index 6830c4e6..9cc80abf 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.cpp @@ -96,24 +96,6 @@ static const std::unordered_map {"VIL", {0u, 255u, 1.0f, 2.5f}}, {"???", {0u, 15u, 0.0f, 1.0f}}}; -#define SCWX_ENUM_MAP_FROM_VALUE(Type, Iterator, ToName) \ - [](const std::string& text) -> std::string \ - { \ - for (Type enumValue : Iterator) \ - { \ - const std::string enumName = ToName(enumValue); \ - \ - if (boost::iequals(text, enumName)) \ - { \ - /* Return label */ \ - return enumName; \ - } \ - } \ - \ - /* Label not found, return unknown */ \ - return "?"; \ - } - class SettingsDialogImpl { public: @@ -134,6 +116,9 @@ public: &defaultAlertAction_, &clockFormat_, &defaultTimeZone_, + &positioningPlugin_, + &nmeaBaudRate_, + &nmeaSource_, &warningsProvider_, &antiAliasingEnabled_, &showMapAttribution_, @@ -235,6 +220,9 @@ public: settings::SettingsInterface defaultAlertAction_ {}; settings::SettingsInterface clockFormat_ {}; settings::SettingsInterface defaultTimeZone_ {}; + settings::SettingsInterface positioningPlugin_ {}; + settings::SettingsInterface nmeaBaudRate_ {}; + settings::SettingsInterface nmeaSource_ {}; settings::SettingsInterface theme_ {}; settings::SettingsInterface warningsProvider_ {}; settings::SettingsInterface antiAliasingEnabled_ {}; @@ -467,38 +455,11 @@ void SettingsDialogImpl::SetupGeneralTab() settings::GeneralSettings& generalSettings = settings::GeneralSettings::Instance(); - for (const auto& uiStyle : types::UiStyleIterator()) - { - self_->ui->themeComboBox->addItem( - QString::fromStdString(types::GetUiStyleName(uiStyle))); - } - theme_.SetSettingsVariable(generalSettings.theme()); - theme_.SetMapFromValueFunction( - [](const std::string& text) -> std::string - { - for (types::UiStyle uiStyle : types::UiStyleIterator()) - { - const std::string uiStyleName = types::GetUiStyleName(uiStyle); - - if (boost::iequals(text, uiStyleName)) - { - // Return UI style label - return uiStyleName; - } - } - - // UI style label not found, return unknown - return "?"; - }); - theme_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - theme_.SetEditWidget(self_->ui->themeComboBox); + SCWX_SETTINGS_COMBO_BOX(theme_, + self_->ui->themeComboBox, + types::UiStyleIterator(), + types::GetUiStyleName); theme_.SetResetButton(self_->ui->resetThemeButton); auto radarSites = config::RadarSite::GetAll(); @@ -561,39 +522,11 @@ void SettingsDialogImpl::SetupGeneralTab() gridHeight_.SetEditWidget(self_->ui->gridHeightSpinBox); gridHeight_.SetResetButton(self_->ui->resetGridHeightButton); - for (const auto& mapProvider : map::MapProviderIterator()) - { - self_->ui->mapProviderComboBox->addItem( - QString::fromStdString(map::GetMapProviderName(mapProvider))); - } - mapProvider_.SetSettingsVariable(generalSettings.map_provider()); - mapProvider_.SetMapFromValueFunction( - [](const std::string& text) -> std::string - { - for (map::MapProvider mapProvider : map::MapProviderIterator()) - { - const std::string mapProviderName = - map::GetMapProviderName(mapProvider); - - if (boost::iequals(text, mapProviderName)) - { - // Return map provider label - return mapProviderName; - } - } - - // Map provider label not found, return unknown - return "?"; - }); - mapProvider_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - mapProvider_.SetEditWidget(self_->ui->mapProviderComboBox); + SCWX_SETTINGS_COMBO_BOX(mapProvider_, + self_->ui->mapProviderComboBox, + map::MapProviderIterator(), + map::GetMapProviderName); mapProvider_.SetResetButton(self_->ui->resetMapProviderButton); mapboxApiKey_.SetSettingsVariable(generalSettings.mapbox_api_key()); @@ -604,70 +537,43 @@ void SettingsDialogImpl::SetupGeneralTab() mapTilerApiKey_.SetEditWidget(self_->ui->mapTilerApiKeyLineEdit); mapTilerApiKey_.SetResetButton(self_->ui->resetMapTilerApiKeyButton); - for (const auto& alertAction : types::AlertActionIterator()) - { - self_->ui->defaultAlertActionComboBox->addItem( - QString::fromStdString(types::GetAlertActionName(alertAction))); - } - defaultAlertAction_.SetSettingsVariable( generalSettings.default_alert_action()); - defaultAlertAction_.SetMapFromValueFunction( - SCWX_ENUM_MAP_FROM_VALUE(types::AlertAction, - types::AlertActionIterator(), - types::GetAlertActionName)); - defaultAlertAction_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - defaultAlertAction_.SetEditWidget(self_->ui->defaultAlertActionComboBox); + SCWX_SETTINGS_COMBO_BOX(defaultAlertAction_, + self_->ui->defaultAlertActionComboBox, + types::AlertActionIterator(), + types::GetAlertActionName); defaultAlertAction_.SetResetButton(self_->ui->resetDefaultAlertActionButton); - for (const auto& clockFormat : scwx::util::ClockFormatIterator()) - { - self_->ui->clockFormatComboBox->addItem( - QString::fromStdString(scwx::util::GetClockFormatName(clockFormat))); - } - clockFormat_.SetSettingsVariable(generalSettings.clock_format()); - clockFormat_.SetMapFromValueFunction( - SCWX_ENUM_MAP_FROM_VALUE(scwx::util::ClockFormat, - scwx::util::ClockFormatIterator(), - scwx::util::GetClockFormatName)); - clockFormat_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - clockFormat_.SetEditWidget(self_->ui->clockFormatComboBox); + SCWX_SETTINGS_COMBO_BOX(clockFormat_, + self_->ui->clockFormatComboBox, + scwx::util::ClockFormatIterator(), + scwx::util::GetClockFormatName); clockFormat_.SetResetButton(self_->ui->resetClockFormatButton); - for (const auto& timeZone : types::DefaultTimeZoneIterator()) - { - self_->ui->defaultTimeZoneComboBox->addItem( - QString::fromStdString(types::GetDefaultTimeZoneName(timeZone))); - } - defaultTimeZone_.SetSettingsVariable(generalSettings.default_time_zone()); - defaultTimeZone_.SetMapFromValueFunction( - SCWX_ENUM_MAP_FROM_VALUE(types::DefaultTimeZone, - types::DefaultTimeZoneIterator(), - types::GetDefaultTimeZoneName)); - defaultTimeZone_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - defaultTimeZone_.SetEditWidget(self_->ui->defaultTimeZoneComboBox); + SCWX_SETTINGS_COMBO_BOX(defaultTimeZone_, + self_->ui->defaultTimeZoneComboBox, + types::DefaultTimeZoneIterator(), + types::GetDefaultTimeZoneName); defaultTimeZone_.SetResetButton(self_->ui->resetDefaultTimeZoneButton); + positioningPlugin_.SetSettingsVariable(generalSettings.positioning_plugin()); + SCWX_SETTINGS_COMBO_BOX(positioningPlugin_, + self_->ui->positioningPluginComboBox, + types::PositioningPluginIterator(), + types::GetPositioningPluginName); + positioningPlugin_.SetResetButton(self_->ui->resetPositioningPluginButton); + + nmeaBaudRate_.SetSettingsVariable(generalSettings.nmea_baud_rate()); + nmeaBaudRate_.SetEditWidget(self_->ui->nmeaBaudRateSpinBox); + nmeaBaudRate_.SetResetButton(self_->ui->resetNmeaBaudRateButton); + + nmeaSource_.SetSettingsVariable(generalSettings.nmea_source()); + nmeaSource_.SetEditWidget(self_->ui->nmeaSourceLineEdit); + nmeaSource_.SetResetButton(self_->ui->resetNmeaSourceButton); + warningsProvider_.SetSettingsVariable(generalSettings.warnings_provider()); warningsProvider_.SetEditWidget(self_->ui->warningsProviderLineEdit); warningsProvider_.SetResetButton(self_->ui->resetWarningsProviderButton); @@ -991,27 +897,12 @@ void SettingsDialogImpl::SetupAudioTab() dialog->open(); }); - for (const auto& locationMethod : types::LocationMethodIterator()) - { - self_->ui->alertAudioLocationMethodComboBox->addItem( - QString::fromStdString(types::GetLocationMethodName(locationMethod))); - } - alertAudioLocationMethod_.SetSettingsVariable( audioSettings.alert_location_method()); - alertAudioLocationMethod_.SetMapFromValueFunction( - SCWX_ENUM_MAP_FROM_VALUE(types::LocationMethod, - types::LocationMethodIterator(), - types::GetLocationMethodName)); - alertAudioLocationMethod_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - alertAudioLocationMethod_.SetEditWidget( - self_->ui->alertAudioLocationMethodComboBox); + SCWX_SETTINGS_COMBO_BOX(alertAudioLocationMethod_, + self_->ui->alertAudioLocationMethodComboBox, + types::LocationMethodIterator(), + types::GetLocationMethodName); alertAudioLocationMethod_.SetResetButton( self_->ui->resetAlertAudioLocationMethodButton); @@ -1159,40 +1050,11 @@ void SettingsDialogImpl::SetupTextTab() hoverTextWrap_.SetEditWidget(self_->ui->hoverTextWrapSpinBox); hoverTextWrap_.SetResetButton(self_->ui->resetHoverTextWrapButton); - for (const auto& tooltipMethod : types::TooltipMethodIterator()) - { - self_->ui->tooltipMethodComboBox->addItem( - QString::fromStdString(types::GetTooltipMethodName(tooltipMethod))); - } - tooltipMethod_.SetSettingsVariable(textSettings.tooltip_method()); - tooltipMethod_.SetMapFromValueFunction( - [](const std::string& text) -> std::string - { - for (types::TooltipMethod tooltipMethod : - types::TooltipMethodIterator()) - { - const std::string tooltipMethodName = - types::GetTooltipMethodName(tooltipMethod); - - if (boost::iequals(text, tooltipMethodName)) - { - // Return tooltip method label - return tooltipMethodName; - } - } - - // Tooltip method label not found, return unknown - return "?"; - }); - tooltipMethod_.SetMapToValueFunction( - [](std::string text) -> std::string - { - // Convert label to lower case and return - boost::to_lower(text); - return text; - }); - tooltipMethod_.SetEditWidget(self_->ui->tooltipMethodComboBox); + SCWX_SETTINGS_COMBO_BOX(tooltipMethod_, + self_->ui->tooltipMethodComboBox, + types::TooltipMethodIterator(), + types::GetTooltipMethodName); tooltipMethod_.SetResetButton(self_->ui->resetTooltipMethodButton); placefileTextDropShadowEnabled_.SetSettingsVariable( diff --git a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui index bb3761f7..4364ba58 100644 --- a/scwx-qt/source/scwx/qt/ui/settings_dialog.ui +++ b/scwx-qt/source/scwx/qt/ui/settings_dialog.ui @@ -17,10 +17,10 @@ - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Raised + QFrame::Shadow::Raised @@ -38,7 +38,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -48,13 +48,13 @@ - QAbstractScrollArea::AdjustToContents + QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents - QListView::Adjust + QListView::ResizeMode::Adjust - QListView::ListMode + QListView::ViewMode::ListMode true @@ -137,14 +137,14 @@ 0 0 513 - 482 + 566 - QFrame::NoFrame + QFrame::Shape::NoFrame @@ -159,231 +159,7 @@ 0 - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Mapbox API Key - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Default Time Zone - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Clock Format - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - Grid Height - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - - - - - - - Warnings Provider - - - - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - QLineEdit::Password - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - - - - - - - - - - ... - - - - - - - Theme - - - - - - - MapTiler API Key - - - - - - - Map Provider - - - - - - - Default Alert Action - - - - - - - Grid Width - - - - - - - Default Radar Site - - - - - - - - - - ... - - - - :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg - - - - - - - - - - QLineEdit::Password - - - - + ... @@ -394,7 +170,32 @@ - + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + Clock Format + + + + + + + NMEA Source + + + + ... @@ -405,6 +206,275 @@ + + + + Mapbox API Key + + + + + + + Grid Height + + + + + + + ... + + + + + + + Warnings Provider + + + + + + + + + + Grid Width + + + + + + + + + + Default Alert Action + + + + + + + Default Time Zone + + + + + + + NMEA Baud Rate + + + + + + + + + + MapTiler API Key + + + + + + + + + + Theme + + + + + + + + + + Default Radar Site + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + QLineEdit::EchoMode::Password + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + Map Provider + + + + + + + QLineEdit::EchoMode::Password + + + + + + + Positioning Plugin + + + + + + + + + + 1 + + + 999999999 + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + + + + + ... + + + + :/res/icons/font-awesome-6/rotate-left-solid.svg:/res/icons/font-awesome-6/rotate-left-solid.svg + + + @@ -453,7 +523,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -491,15 +561,15 @@ 0 0 - 506 - 383 + 63 + 18 - Qt::Vertical + Qt::Orientation::Vertical @@ -523,10 +593,10 @@ - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Raised + QFrame::Shadow::Raised @@ -547,7 +617,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -769,7 +839,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -786,19 +856,19 @@ - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Plain + QFrame::Shadow::Plain - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Raised + QFrame::Shadow::Raised @@ -829,10 +899,10 @@ - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Raised + QFrame::Shadow::Raised @@ -850,7 +920,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -863,10 +933,10 @@ - QFrame::Panel + QFrame::Shape::Panel - QFrame::Plain + QFrame::Shadow::Plain @@ -875,7 +945,7 @@ Tornado Warning expires in 15 minutes - Qt::AlignCenter + Qt::AlignmentFlag::AlignCenter true @@ -944,7 +1014,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -974,10 +1044,10 @@ - QFrame::StyledPanel + QFrame::Shape::StyledPanel - QFrame::Raised + QFrame::Shadow::Raised @@ -1058,7 +1128,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -1080,10 +1150,10 @@ - Qt::Horizontal + Qt::Orientation::Horizontal - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Discard|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults + QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Discard|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::RestoreDefaults