mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Add unit settings to settings dialog
This commit is contained in:
parent
3bfcaede96
commit
a29256d77e
7 changed files with 224 additions and 5 deletions
|
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--><path d="M.2 468.9C2.7 493.1 23.1 512 48 512l96 0 320 0c26.5 0 48-21.5 48-48l0-96c0-26.5-21.5-48-48-48l-48 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-64 0 0 80c0 8.8-7.2 16-16 16s-16-7.2-16-16l0-80-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-64-80 0c-8.8 0-16-7.2-16-16s7.2-16 16-16l80 0 0-48c0-26.5-21.5-48-48-48L48 0C21.5 0 0 21.5 0 48L0 368l0 96c0 1.7 .1 3.3 .2 4.9z"/></svg>
|
||||||
|
After Width: | Height: | Size: 690 B |
|
|
@ -289,9 +289,11 @@ set(UI_UI source/scwx/qt/ui/about_dialog.ui
|
||||||
source/scwx/qt/ui/settings_dialog.ui
|
source/scwx/qt/ui/settings_dialog.ui
|
||||||
source/scwx/qt/ui/update_dialog.ui)
|
source/scwx/qt/ui/update_dialog.ui)
|
||||||
set(HDR_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.hpp
|
set(HDR_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.hpp
|
||||||
source/scwx/qt/ui/settings/settings_page_widget.hpp)
|
source/scwx/qt/ui/settings/settings_page_widget.hpp
|
||||||
|
source/scwx/qt/ui/settings/unit_settings_widget.hpp)
|
||||||
set(SRC_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.cpp
|
set(SRC_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.cpp
|
||||||
source/scwx/qt/ui/settings/settings_page_widget.cpp)
|
source/scwx/qt/ui/settings/settings_page_widget.cpp
|
||||||
|
source/scwx/qt/ui/settings/unit_settings_widget.cpp)
|
||||||
set(HDR_UI_SETUP source/scwx/qt/ui/setup/audio_codec_page.hpp
|
set(HDR_UI_SETUP source/scwx/qt/ui/setup/audio_codec_page.hpp
|
||||||
source/scwx/qt/ui/setup/finish_page.hpp
|
source/scwx/qt/ui/setup/finish_page.hpp
|
||||||
source/scwx/qt/ui/setup/map_layout_page.hpp
|
source/scwx/qt/ui/setup/map_layout_page.hpp
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
<file>res/icons/font-awesome-6/pause-solid.svg</file>
|
<file>res/icons/font-awesome-6/pause-solid.svg</file>
|
||||||
<file>res/icons/font-awesome-6/play-solid.svg</file>
|
<file>res/icons/font-awesome-6/play-solid.svg</file>
|
||||||
<file>res/icons/font-awesome-6/rotate-left-solid.svg</file>
|
<file>res/icons/font-awesome-6/rotate-left-solid.svg</file>
|
||||||
|
<file>res/icons/font-awesome-6/ruler-combined-solid.svg</file>
|
||||||
<file>res/icons/font-awesome-6/sliders-solid.svg</file>
|
<file>res/icons/font-awesome-6/sliders-solid.svg</file>
|
||||||
<file>res/icons/font-awesome-6/square-caret-down-regular.svg</file>
|
<file>res/icons/font-awesome-6/square-caret-down-regular.svg</file>
|
||||||
<file>res/icons/font-awesome-6/square-caret-right-regular.svg</file>
|
<file>res/icons/font-awesome-6/square-caret-right-regular.svg</file>
|
||||||
|
|
|
||||||
160
scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp
Normal file
160
scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.cpp
Normal file
|
|
@ -0,0 +1,160 @@
|
||||||
|
#include <scwx/qt/ui/settings/unit_settings_widget.hpp>
|
||||||
|
#include <scwx/qt/settings/settings_interface.hpp>
|
||||||
|
#include <scwx/qt/settings/unit_settings.hpp>
|
||||||
|
#include <scwx/qt/types/unit_types.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include <boost/unordered/unordered_flat_map.hpp>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QScrollArea>
|
||||||
|
#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
|
||||||
|
{
|
||||||
|
namespace ui
|
||||||
|
{
|
||||||
|
|
||||||
|
static const std::string logPrefix_ =
|
||||||
|
"scwx::qt::ui::settings::unit_settings_widget";
|
||||||
|
|
||||||
|
class UnitSettingsWidget::Impl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit Impl(UnitSettingsWidget* self)
|
||||||
|
{
|
||||||
|
auto& unitSettings = settings::UnitSettings::Instance();
|
||||||
|
|
||||||
|
gridLayout_ = new QGridLayout(self);
|
||||||
|
contents_ = new QWidget(self);
|
||||||
|
contents_->setLayout(gridLayout_);
|
||||||
|
|
||||||
|
scrollArea_ = new QScrollArea(self);
|
||||||
|
scrollArea_->setHorizontalScrollBarPolicy(
|
||||||
|
Qt::ScrollBarPolicy::ScrollBarAlwaysOff);
|
||||||
|
scrollArea_->setWidgetResizable(true);
|
||||||
|
scrollArea_->setWidget(contents_);
|
||||||
|
|
||||||
|
layout_ = new QVBoxLayout(self);
|
||||||
|
layout_->setContentsMargins(0, 0, 0, 0);
|
||||||
|
layout_->addWidget(scrollArea_);
|
||||||
|
|
||||||
|
self->setLayout(layout_);
|
||||||
|
|
||||||
|
int row = 0;
|
||||||
|
|
||||||
|
auto AddRow =
|
||||||
|
[&row, &self, this](
|
||||||
|
settings::SettingsInterface<std::string>& settingsInterface,
|
||||||
|
const std::string& labelName,
|
||||||
|
QComboBox* comboBox)
|
||||||
|
{
|
||||||
|
QLabel* label = new QLabel(QObject::tr(labelName.c_str()), self);
|
||||||
|
QToolButton* resetButton = new QToolButton(self);
|
||||||
|
|
||||||
|
resetButton->setIcon(
|
||||||
|
QIcon {":/res/icons/font-awesome-6/rotate-left-solid.svg"});
|
||||||
|
resetButton->setVisible(false);
|
||||||
|
|
||||||
|
settingsInterface.SetResetButton(resetButton);
|
||||||
|
|
||||||
|
gridLayout_->addWidget(label, row, 0);
|
||||||
|
gridLayout_->addWidget(comboBox, row, 1);
|
||||||
|
gridLayout_->addWidget(resetButton, row, 2);
|
||||||
|
|
||||||
|
// Add to settings list
|
||||||
|
self->AddSettingsInterface(&settingsInterface);
|
||||||
|
|
||||||
|
++row;
|
||||||
|
};
|
||||||
|
|
||||||
|
QComboBox* accumulationComboBox = new QComboBox(self);
|
||||||
|
accumulationComboBox->setSizePolicy(QSizePolicy::Expanding,
|
||||||
|
QSizePolicy::Preferred);
|
||||||
|
accumulationUnits_.SetSettingsVariable(unitSettings.accumulation_units());
|
||||||
|
SCWX_SETTINGS_COMBO_BOX(accumulationUnits_,
|
||||||
|
accumulationComboBox,
|
||||||
|
types::AccumulationUnitsIterator(),
|
||||||
|
types::GetAccumulationUnitsName);
|
||||||
|
AddRow(accumulationUnits_, "Accumulation", accumulationComboBox);
|
||||||
|
|
||||||
|
QComboBox* echoTopsComboBox = new QComboBox(self);
|
||||||
|
echoTopsComboBox->setSizePolicy(QSizePolicy::Expanding,
|
||||||
|
QSizePolicy::Preferred);
|
||||||
|
echoTopsUnits_.SetSettingsVariable(unitSettings.echo_tops_units());
|
||||||
|
SCWX_SETTINGS_COMBO_BOX(echoTopsUnits_,
|
||||||
|
echoTopsComboBox,
|
||||||
|
types::EchoTopsUnitsIterator(),
|
||||||
|
types::GetEchoTopsUnitsName);
|
||||||
|
AddRow(echoTopsUnits_, "Echo Tops", echoTopsComboBox);
|
||||||
|
|
||||||
|
QComboBox* speedComboBox = new QComboBox(self);
|
||||||
|
speedComboBox->setSizePolicy(QSizePolicy::Expanding,
|
||||||
|
QSizePolicy::Preferred);
|
||||||
|
speedUnits_.SetSettingsVariable(unitSettings.speed_units());
|
||||||
|
SCWX_SETTINGS_COMBO_BOX(speedUnits_,
|
||||||
|
speedComboBox,
|
||||||
|
types::SpeedUnitsIterator(),
|
||||||
|
types::GetSpeedUnitsName);
|
||||||
|
AddRow(speedUnits_, "Speed", speedComboBox);
|
||||||
|
|
||||||
|
QSpacerItem* spacer =
|
||||||
|
new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||||
|
gridLayout_->addItem(spacer, row, 0);
|
||||||
|
}
|
||||||
|
~Impl() = default;
|
||||||
|
|
||||||
|
QWidget* contents_;
|
||||||
|
QLayout* layout_;
|
||||||
|
QScrollArea* scrollArea_ {};
|
||||||
|
QGridLayout* gridLayout_ {};
|
||||||
|
|
||||||
|
settings::SettingsInterface<std::string> accumulationUnits_ {};
|
||||||
|
settings::SettingsInterface<std::string> echoTopsUnits_ {};
|
||||||
|
settings::SettingsInterface<std::string> speedUnits_ {};
|
||||||
|
};
|
||||||
|
|
||||||
|
UnitSettingsWidget::UnitSettingsWidget(QWidget* parent) :
|
||||||
|
SettingsPageWidget(parent), p {std::make_shared<Impl>(this)}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
UnitSettingsWidget::~UnitSettingsWidget() = default;
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
29
scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.hpp
Normal file
29
scwx-qt/source/scwx/qt/ui/settings/unit_settings_widget.hpp
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <scwx/qt/ui/settings/settings_page_widget.hpp>
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace ui
|
||||||
|
{
|
||||||
|
|
||||||
|
class UnitSettingsWidget : public SettingsPageWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit UnitSettingsWidget(QWidget* parent = nullptr);
|
||||||
|
~UnitSettingsWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Impl;
|
||||||
|
std::shared_ptr<Impl> p;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
#include <scwx/qt/ui/county_dialog.hpp>
|
#include <scwx/qt/ui/county_dialog.hpp>
|
||||||
#include <scwx/qt/ui/radar_site_dialog.hpp>
|
#include <scwx/qt/ui/radar_site_dialog.hpp>
|
||||||
#include <scwx/qt/ui/settings/hotkey_settings_widget.hpp>
|
#include <scwx/qt/ui/settings/hotkey_settings_widget.hpp>
|
||||||
|
#include <scwx/qt/ui/settings/unit_settings_widget.hpp>
|
||||||
#include <scwx/qt/util/color.hpp>
|
#include <scwx/qt/util/color.hpp>
|
||||||
#include <scwx/qt/util/file.hpp>
|
#include <scwx/qt/util/file.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
|
@ -178,6 +179,7 @@ public:
|
||||||
void SetupGeneralTab();
|
void SetupGeneralTab();
|
||||||
void SetupPalettesColorTablesTab();
|
void SetupPalettesColorTablesTab();
|
||||||
void SetupPalettesAlertsTab();
|
void SetupPalettesAlertsTab();
|
||||||
|
void SetupUnitsTab();
|
||||||
void SetupAudioTab();
|
void SetupAudioTab();
|
||||||
void SetupTextTab();
|
void SetupTextTab();
|
||||||
void SetupHotkeysTab();
|
void SetupHotkeysTab();
|
||||||
|
|
@ -222,6 +224,7 @@ public:
|
||||||
|
|
||||||
std::vector<SettingsPageWidget*> settingsPages_ {};
|
std::vector<SettingsPageWidget*> settingsPages_ {};
|
||||||
HotkeySettingsWidget* hotkeySettingsWidget_ {};
|
HotkeySettingsWidget* hotkeySettingsWidget_ {};
|
||||||
|
UnitSettingsWidget* unitSettingsWidget_ {};
|
||||||
|
|
||||||
settings::SettingsInterface<std::string> defaultRadarSite_ {};
|
settings::SettingsInterface<std::string> defaultRadarSite_ {};
|
||||||
settings::SettingsInterface<std::int64_t> gridWidth_ {};
|
settings::SettingsInterface<std::int64_t> gridWidth_ {};
|
||||||
|
|
@ -292,6 +295,9 @@ SettingsDialog::SettingsDialog(QWidget* parent) :
|
||||||
// Palettes > Alerts
|
// Palettes > Alerts
|
||||||
p->SetupPalettesAlertsTab();
|
p->SetupPalettesAlertsTab();
|
||||||
|
|
||||||
|
// Units
|
||||||
|
p->SetupUnitsTab();
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
p->SetupAudioTab();
|
p->SetupAudioTab();
|
||||||
|
|
||||||
|
|
@ -897,6 +903,16 @@ void SettingsDialogImpl::SetupPalettesAlertsTab()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsDialogImpl::SetupUnitsTab()
|
||||||
|
{
|
||||||
|
QVBoxLayout* layout = new QVBoxLayout(self_->ui->units);
|
||||||
|
|
||||||
|
unitSettingsWidget_ = new UnitSettingsWidget(self_->ui->units);
|
||||||
|
layout->addWidget(unitSettingsWidget_);
|
||||||
|
|
||||||
|
settingsPages_.push_back(unitSettingsWidget_);
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsDialogImpl::SetupAudioTab()
|
void SettingsDialogImpl::SetupAudioTab()
|
||||||
{
|
{
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,15 @@
|
||||||
<normaloff>:/res/icons/font-awesome-6/palette-solid.svg</normaloff>:/res/icons/font-awesome-6/palette-solid.svg</iconset>
|
<normaloff>:/res/icons/font-awesome-6/palette-solid.svg</normaloff>:/res/icons/font-awesome-6/palette-solid.svg</iconset>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Units</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../../scwx-qt.qrc">
|
||||||
|
<normaloff>:/res/icons/font-awesome-6/ruler-combined-solid.svg</normaloff>:/res/icons/font-awesome-6/ruler-combined-solid.svg</iconset>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Audio</string>
|
<string>Audio</string>
|
||||||
|
|
@ -482,8 +491,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>63</width>
|
<width>506</width>
|
||||||
<height>18</height>
|
<height>383</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
|
|
@ -554,7 +563,8 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="page">
|
<widget class="QWidget" name="units"/>
|
||||||
|
<widget class="QWidget" name="audio">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="alertAudioGroupBox">
|
<widget class="QGroupBox" name="alertAudioGroupBox">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue