Add NMEA to settings dialog

This commit is contained in:
Dan Paulat 2024-05-05 02:15:21 -05:00
parent b7a258d143
commit 8270153957
4 changed files with 412 additions and 475 deletions

View file

@ -4,6 +4,41 @@
#include <QWidget>
#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

View file

@ -12,36 +12,6 @@
#include <QToolButton>
#include <QVBoxLayout>
#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

View file

@ -96,24 +96,6 @@ static const std::unordered_map<std::string, ColorTableConversions>
{"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<std::string> defaultAlertAction_ {};
settings::SettingsInterface<std::string> clockFormat_ {};
settings::SettingsInterface<std::string> defaultTimeZone_ {};
settings::SettingsInterface<std::string> positioningPlugin_ {};
settings::SettingsInterface<std::int64_t> nmeaBaudRate_ {};
settings::SettingsInterface<std::string> nmeaSource_ {};
settings::SettingsInterface<std::string> theme_ {};
settings::SettingsInterface<std::string> warningsProvider_ {};
settings::SettingsInterface<bool> 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(

View file

@ -17,10 +17,10 @@
<item row="0" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
@ -38,7 +38,7 @@
<item>
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
@ -48,13 +48,13 @@
</sizepolicy>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
<enum>QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents</enum>
</property>
<property name="resizeMode">
<enum>QListView::Adjust</enum>
<enum>QListView::ResizeMode::Adjust</enum>
</property>
<property name="viewMode">
<enum>QListView::ListMode</enum>
<enum>QListView::ViewMode::ListMode</enum>
</property>
<property name="uniformItemSizes">
<bool>true</bool>
@ -137,14 +137,14 @@
<x>0</x>
<y>0</y>
<width>513</width>
<height>482</height>
<height>566</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
<enum>QFrame::Shape::NoFrame</enum>
</property>
<layout class="QGridLayout" name="gridLayout_4">
<property name="leftMargin">
@ -159,231 +159,7 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="8" column="2">
<widget class="QComboBox" name="defaultAlertActionComboBox"/>
</item>
<item row="6" column="4">
<widget class="QToolButton" name="resetMapboxApiKeyButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Mapbox API Key</string>
</property>
</widget>
</item>
<item row="9" column="4">
<widget class="QToolButton" name="resetClockFormatButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Default Time Zone</string>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QToolButton" name="resetDefaultAlertActionButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Clock Format</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QToolButton" name="resetGridWidthButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QToolButton" name="resetRadarSiteButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Grid Height</string>
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QToolButton" name="resetGridHeightButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="11" column="2">
<widget class="QLineEdit" name="warningsProviderLineEdit"/>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="themeComboBox"/>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Warnings Provider</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="gridWidthSpinBox"/>
</item>
<item row="5" column="4">
<widget class="QToolButton" name="resetMapProviderButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QLineEdit" name="mapboxApiKeyLineEdit">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QToolButton" name="resetThemeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QSpinBox" name="gridHeightSpinBox"/>
</item>
<item row="9" column="2">
<widget class="QComboBox" name="clockFormatComboBox"/>
</item>
<item row="10" column="2">
<widget class="QComboBox" name="defaultTimeZoneComboBox"/>
</item>
<item row="1" column="3">
<widget class="QToolButton" name="radarSiteSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Theme</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>MapTiler API Key</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Map Provider</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="defaultAlertActionLabel">
<property name="text">
<string>Default Alert Action</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Grid Width</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Default Radar Site</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QComboBox" name="mapProviderComboBox"/>
</item>
<item row="7" column="4">
<widget class="QToolButton" name="resetMapTilerApiKeyButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="radarSiteComboBox"/>
</item>
<item row="7" column="2">
<widget class="QLineEdit" name="mapTilerApiKeyLineEdit">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
<item row="10" column="4">
<item row="4" column="4">
<widget class="QToolButton" name="resetDefaultTimeZoneButton">
<property name="text">
<string>...</string>
@ -394,7 +170,32 @@
</property>
</widget>
</item>
<item row="11" column="4">
<item row="9" column="4">
<widget class="QToolButton" name="resetMapboxApiKeyButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_20">
<property name="text">
<string>Clock Format</string>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>NMEA Source</string>
</property>
</widget>
</item>
<item row="18" column="4">
<widget class="QToolButton" name="resetWarningsProviderButton">
<property name="text">
<string>...</string>
@ -405,6 +206,275 @@
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Mapbox API Key</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Grid Height</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QToolButton" name="radarSiteSelectButton">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item row="18" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string>Warnings Provider</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="clockFormatComboBox"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Grid Width</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QComboBox" name="radarSiteComboBox"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="defaultAlertActionLabel">
<property name="text">
<string>Default Alert Action</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Default Time Zone</string>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_24">
<property name="text">
<string>NMEA Baud Rate</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QComboBox" name="defaultAlertActionComboBox"/>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>MapTiler API Key</string>
</property>
</widget>
</item>
<item row="15" column="2">
<widget class="QComboBox" name="themeComboBox"/>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Theme</string>
</property>
</widget>
</item>
<item row="11" column="2">
<widget class="QComboBox" name="positioningPluginComboBox"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Default Radar Site</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QToolButton" name="resetClockFormatButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="6" column="2">
<widget class="QSpinBox" name="gridHeightSpinBox"/>
</item>
<item row="3" column="4">
<widget class="QToolButton" name="resetRadarSiteButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QComboBox" name="defaultTimeZoneComboBox"/>
</item>
<item row="10" column="4">
<widget class="QToolButton" name="resetMapTilerApiKeyButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="18" column="2">
<widget class="QLineEdit" name="warningsProviderLineEdit"/>
</item>
<item row="6" column="4">
<widget class="QToolButton" name="resetGridHeightButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="15" column="4">
<widget class="QToolButton" name="resetThemeButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="9" column="2">
<widget class="QLineEdit" name="mapboxApiKeyLineEdit">
<property name="echoMode">
<enum>QLineEdit::EchoMode::Password</enum>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QComboBox" name="mapProviderComboBox"/>
</item>
<item row="2" column="4">
<widget class="QToolButton" name="resetDefaultAlertActionButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="gridWidthSpinBox"/>
</item>
<item row="5" column="4">
<widget class="QToolButton" name="resetGridWidthButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="8" column="4">
<widget class="QToolButton" name="resetMapProviderButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Map Provider</string>
</property>
</widget>
</item>
<item row="10" column="2">
<widget class="QLineEdit" name="mapTilerApiKeyLineEdit">
<property name="echoMode">
<enum>QLineEdit::EchoMode::Password</enum>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Positioning Plugin</string>
</property>
</widget>
</item>
<item row="14" column="2">
<widget class="QLineEdit" name="nmeaSourceLineEdit"/>
</item>
<item row="13" column="2">
<widget class="QSpinBox" name="nmeaBaudRateSpinBox">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item row="11" column="4">
<widget class="QToolButton" name="resetPositioningPluginButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="13" column="4">
<widget class="QToolButton" name="resetNmeaBaudRateButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
<item row="14" column="4">
<widget class="QToolButton" name="resetNmeaSourceButton">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../../../../scwx-qt.qrc">
<normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</normaloff>:/res/icons/font-awesome-6/rotate-left-solid.svg</iconset>
</property>
</widget>
</item>
</layout>
</widget>
</item>
@ -453,7 +523,7 @@
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -491,15 +561,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>506</width>
<height>383</height>
<width>63</width>
<height>18</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -523,10 +593,10 @@
<item>
<widget class="QFrame" name="alertsFrame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<property name="leftMargin">
@ -547,7 +617,7 @@
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -769,7 +839,7 @@
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -786,19 +856,19 @@
<item>
<widget class="QFrame" name="frame_4">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
<enum>QFrame::Shadow::Plain</enum>
</property>
<layout class="QGridLayout" name="gridLayout_8" columnstretch="2,3">
<item row="0" column="0">
<widget class="QFrame" name="frame_5">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin">
@ -829,10 +899,10 @@
<item row="0" column="1">
<widget class="QFrame" name="frame_6">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_6">
<property name="leftMargin">
@ -850,7 +920,7 @@
<item row="8" column="0">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -863,10 +933,10 @@
<item row="7" column="0" colspan="5">
<widget class="QFrame" name="frame_7">
<property name="frameShape">
<enum>QFrame::Panel</enum>
<enum>QFrame::Shape::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
<enum>QFrame::Shadow::Plain</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
@ -875,7 +945,7 @@
<string>Tornado Warning expires in 15 minutes</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
<property name="wordWrap">
<bool>true</bool>
@ -944,7 +1014,7 @@
<item row="6" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -974,10 +1044,10 @@
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
<enum>QFrame::Shape::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<enum>QFrame::Shadow::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
@ -1058,7 +1128,7 @@
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -1080,10 +1150,10 @@
<item row="1" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Discard|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults</set>
<set>QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Discard|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::RestoreDefaults</set>
</property>
</widget>
</item>