mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:40:05 +00:00
Add hotkey settings page
This commit is contained in:
parent
589eff9882
commit
81f44add42
6 changed files with 299 additions and 35 deletions
|
|
@ -284,6 +284,10 @@ set(UI_UI source/scwx/qt/ui/about_dialog.ui
|
|||
source/scwx/qt/ui/radar_site_dialog.ui
|
||||
source/scwx/qt/ui/settings_dialog.ui
|
||||
source/scwx/qt/ui/update_dialog.ui)
|
||||
set(HDR_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.hpp
|
||||
source/scwx/qt/ui/settings/settings_page_widget.hpp)
|
||||
set(SRC_UI_SETTINGS source/scwx/qt/ui/settings/hotkey_settings_widget.cpp
|
||||
source/scwx/qt/ui/settings/settings_page_widget.cpp)
|
||||
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/map_layout_page.hpp
|
||||
|
|
@ -395,6 +399,8 @@ set(PROJECT_SOURCES ${HDR_MAIN}
|
|||
${HDR_UI}
|
||||
${SRC_UI}
|
||||
${UI_UI}
|
||||
${HDR_UI_SETTINGS}
|
||||
${SRC_UI_SETTINGS}
|
||||
${HDR_UI_SETUP}
|
||||
${SRC_UI_SETUP}
|
||||
${HDR_UTIL}
|
||||
|
|
@ -408,41 +414,43 @@ set(PROJECT_SOURCES ${HDR_MAIN}
|
|||
${CMAKE_FILES})
|
||||
set(EXECUTABLE_SOURCES ${SRC_EXE_MAIN})
|
||||
|
||||
source_group("Header Files\\main" FILES ${HDR_MAIN})
|
||||
source_group("Source Files\\main" FILES ${SRC_MAIN})
|
||||
source_group("Header Files\\config" FILES ${HDR_CONFIG})
|
||||
source_group("Source Files\\config" FILES ${SRC_CONFIG})
|
||||
source_group("Source Files\\external" FILES ${SRC_EXTERNAL})
|
||||
source_group("Header Files\\gl" FILES ${HDR_GL})
|
||||
source_group("Source Files\\gl" FILES ${SRC_GL})
|
||||
source_group("Header Files\\gl\\draw" FILES ${HDR_GL_DRAW})
|
||||
source_group("Source Files\\gl\\draw" FILES ${SRC_GL_DRAW})
|
||||
source_group("Header Files\\manager" FILES ${HDR_MANAGER})
|
||||
source_group("Source Files\\manager" FILES ${SRC_MANAGER})
|
||||
source_group("UI Files\\main" FILES ${UI_MAIN})
|
||||
source_group("Header Files\\map" FILES ${HDR_MAP})
|
||||
source_group("Source Files\\map" FILES ${SRC_MAP})
|
||||
source_group("Header Files\\model" FILES ${HDR_MODEL})
|
||||
source_group("Source Files\\model" FILES ${SRC_MODEL})
|
||||
source_group("Header Files\\request" FILES ${HDR_REQUEST})
|
||||
source_group("Source Files\\request" FILES ${SRC_REQUEST})
|
||||
source_group("Header Files\\settings" FILES ${HDR_SETTINGS})
|
||||
source_group("Source Files\\settings" FILES ${SRC_SETTINGS})
|
||||
source_group("Header Files\\types" FILES ${HDR_TYPES})
|
||||
source_group("Source Files\\types" FILES ${SRC_TYPES})
|
||||
source_group("Header Files\\ui" FILES ${HDR_UI})
|
||||
source_group("Source Files\\ui" FILES ${SRC_UI})
|
||||
source_group("Header Files\\ui\\setup" FILES ${HDR_UI_SETUP})
|
||||
source_group("Source Files\\ui\\setup" FILES ${SRC_UI_SETUP})
|
||||
source_group("UI Files\\ui" FILES ${UI_UI})
|
||||
source_group("Header Files\\util" FILES ${HDR_UTIL})
|
||||
source_group("Source Files\\util" FILES ${SRC_UTIL})
|
||||
source_group("Header Files\\view" FILES ${HDR_VIEW})
|
||||
source_group("Source Files\\view" FILES ${SRC_VIEW})
|
||||
source_group("OpenGL Shaders" FILES ${SHADER_FILES})
|
||||
source_group("Resources" FILES ${RESOURCE_FILES})
|
||||
source_group("Resources\\json" FILES ${JSON_FILES})
|
||||
source_group("I18N Files" FILES ${TS_FILES})
|
||||
source_group("Header Files\\main" FILES ${HDR_MAIN})
|
||||
source_group("Source Files\\main" FILES ${SRC_MAIN})
|
||||
source_group("Header Files\\config" FILES ${HDR_CONFIG})
|
||||
source_group("Source Files\\config" FILES ${SRC_CONFIG})
|
||||
source_group("Source Files\\external" FILES ${SRC_EXTERNAL})
|
||||
source_group("Header Files\\gl" FILES ${HDR_GL})
|
||||
source_group("Source Files\\gl" FILES ${SRC_GL})
|
||||
source_group("Header Files\\gl\\draw" FILES ${HDR_GL_DRAW})
|
||||
source_group("Source Files\\gl\\draw" FILES ${SRC_GL_DRAW})
|
||||
source_group("Header Files\\manager" FILES ${HDR_MANAGER})
|
||||
source_group("Source Files\\manager" FILES ${SRC_MANAGER})
|
||||
source_group("UI Files\\main" FILES ${UI_MAIN})
|
||||
source_group("Header Files\\map" FILES ${HDR_MAP})
|
||||
source_group("Source Files\\map" FILES ${SRC_MAP})
|
||||
source_group("Header Files\\model" FILES ${HDR_MODEL})
|
||||
source_group("Source Files\\model" FILES ${SRC_MODEL})
|
||||
source_group("Header Files\\request" FILES ${HDR_REQUEST})
|
||||
source_group("Source Files\\request" FILES ${SRC_REQUEST})
|
||||
source_group("Header Files\\settings" FILES ${HDR_SETTINGS})
|
||||
source_group("Source Files\\settings" FILES ${SRC_SETTINGS})
|
||||
source_group("Header Files\\types" FILES ${HDR_TYPES})
|
||||
source_group("Source Files\\types" FILES ${SRC_TYPES})
|
||||
source_group("Header Files\\ui" FILES ${HDR_UI})
|
||||
source_group("Source Files\\ui" FILES ${SRC_UI})
|
||||
source_group("Header Files\\ui\\settings" FILES ${HDR_UI_SETTINGS})
|
||||
source_group("Source Files\\ui\\settings" FILES ${SRC_UI_SETTINGS})
|
||||
source_group("Header Files\\ui\\setup" FILES ${HDR_UI_SETUP})
|
||||
source_group("Source Files\\ui\\setup" FILES ${SRC_UI_SETUP})
|
||||
source_group("UI Files\\ui" FILES ${UI_UI})
|
||||
source_group("Header Files\\util" FILES ${HDR_UTIL})
|
||||
source_group("Source Files\\util" FILES ${SRC_UTIL})
|
||||
source_group("Header Files\\view" FILES ${HDR_VIEW})
|
||||
source_group("Source Files\\view" FILES ${SRC_VIEW})
|
||||
source_group("OpenGL Shaders" FILES ${SHADER_FILES})
|
||||
source_group("Resources" FILES ${RESOURCE_FILES})
|
||||
source_group("Resources\\json" FILES ${JSON_FILES})
|
||||
source_group("I18N Files" FILES ${TS_FILES})
|
||||
|
||||
add_library(scwx-qt OBJECT ${PROJECT_SOURCES})
|
||||
set_property(TARGET scwx-qt PROPERTY AUTOMOC ON)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
#include <scwx/qt/ui/settings/hotkey_settings_widget.hpp>
|
||||
#include <scwx/qt/ui/hotkey_edit.hpp>
|
||||
#include <scwx/qt/settings/hotkey_settings.hpp>
|
||||
#include <scwx/qt/settings/settings_interface.hpp>
|
||||
#include <scwx/qt/types/hotkey_types.hpp>
|
||||
|
||||
#include <boost/unordered/unordered_flat_map.hpp>
|
||||
#include <QGridLayout>
|
||||
#include <QLabel>
|
||||
#include <QToolButton>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace qt
|
||||
{
|
||||
namespace ui
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ =
|
||||
"scwx::qt::ui::settings::hotkey_settings_widget";
|
||||
|
||||
class HotkeySettingsWidget::Impl
|
||||
{
|
||||
public:
|
||||
explicit Impl(HotkeySettingsWidget* self) :
|
||||
self_ {self}, layout_ {new QGridLayout(self)}
|
||||
{
|
||||
auto& hotkeySettings = settings::HotkeySettings::Instance();
|
||||
|
||||
layout_->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
int row = 0;
|
||||
|
||||
for (types::Hotkey hotkey : types::HotkeyIterator())
|
||||
{
|
||||
const std::string& labelText = types::GetHotkeyLongName(hotkey);
|
||||
|
||||
QLabel* label = new QLabel(QObject::tr(labelText.c_str()), self);
|
||||
HotkeyEdit* hotkeyEdit = new HotkeyEdit(self);
|
||||
QToolButton* resetButton = new QToolButton(self_);
|
||||
|
||||
resetButton->setIcon(
|
||||
QIcon {":/res/icons/font-awesome-6/rotate-left-solid.svg"});
|
||||
resetButton->setVisible(false);
|
||||
|
||||
layout_->addWidget(label, row, 0);
|
||||
layout_->addWidget(hotkeyEdit, row, 1);
|
||||
layout_->addWidget(resetButton, row, 2);
|
||||
|
||||
// Create settings interface
|
||||
auto result = hotkeys_.emplace(
|
||||
hotkey, settings::SettingsInterface<std::string> {});
|
||||
auto& pair = *result.first;
|
||||
auto& interface = pair.second;
|
||||
|
||||
// Add to settings list
|
||||
self_->AddSettingsInterface(&interface);
|
||||
|
||||
auto& hotkeyVariable = hotkeySettings.hotkey(hotkey);
|
||||
interface.SetSettingsVariable(hotkeyVariable);
|
||||
interface.SetEditWidget(hotkeyEdit);
|
||||
interface.SetResetButton(resetButton);
|
||||
|
||||
++row;
|
||||
}
|
||||
|
||||
QSpacerItem* spacer =
|
||||
new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
|
||||
layout_->addItem(spacer, row, 0);
|
||||
}
|
||||
~Impl() = default;
|
||||
|
||||
HotkeySettingsWidget* self_;
|
||||
QGridLayout* layout_;
|
||||
|
||||
boost::unordered_flat_map<types::Hotkey,
|
||||
settings::SettingsInterface<std::string>>
|
||||
hotkeys_ {};
|
||||
};
|
||||
|
||||
HotkeySettingsWidget::HotkeySettingsWidget(QWidget* parent) :
|
||||
SettingsPageWidget(parent), p {std::make_shared<Impl>(this)}
|
||||
{
|
||||
}
|
||||
|
||||
HotkeySettingsWidget::~HotkeySettingsWidget() = default;
|
||||
|
||||
} // namespace ui
|
||||
} // namespace qt
|
||||
} // namespace scwx
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include <scwx/qt/ui/settings/settings_page_widget.hpp>
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace qt
|
||||
{
|
||||
namespace ui
|
||||
{
|
||||
|
||||
class HotkeySettingsWidget : public SettingsPageWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit HotkeySettingsWidget(QWidget* parent = nullptr);
|
||||
~HotkeySettingsWidget();
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
std::shared_ptr<Impl> p;
|
||||
};
|
||||
|
||||
} // namespace ui
|
||||
} // namespace qt
|
||||
} // namespace scwx
|
||||
68
scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp
Normal file
68
scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.cpp
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#include <scwx/qt/ui/settings/settings_page_widget.hpp>
|
||||
#include <scwx/qt/settings/settings_interface_base.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace qt
|
||||
{
|
||||
namespace ui
|
||||
{
|
||||
|
||||
static const std::string logPrefix_ =
|
||||
"scwx::qt::ui::settings::settings_page_widget";
|
||||
|
||||
class SettingsPageWidget::Impl
|
||||
{
|
||||
public:
|
||||
explicit Impl() {}
|
||||
~Impl() = default;
|
||||
|
||||
std::vector<settings::SettingsInterfaceBase*> settings_;
|
||||
};
|
||||
|
||||
SettingsPageWidget::SettingsPageWidget(QWidget* parent) :
|
||||
QWidget(parent), p {std::make_shared<Impl>()}
|
||||
{
|
||||
}
|
||||
|
||||
SettingsPageWidget::~SettingsPageWidget() = default;
|
||||
|
||||
void SettingsPageWidget::AddSettingsInterface(
|
||||
settings::SettingsInterfaceBase* setting)
|
||||
{
|
||||
p->settings_.push_back(setting);
|
||||
}
|
||||
|
||||
bool SettingsPageWidget::CommitChanges()
|
||||
{
|
||||
bool committed = false;
|
||||
|
||||
for (auto& setting : p->settings_)
|
||||
{
|
||||
committed |= setting->Commit();
|
||||
}
|
||||
|
||||
return committed;
|
||||
}
|
||||
|
||||
void SettingsPageWidget::DiscardChanges()
|
||||
{
|
||||
for (auto& setting : p->settings_)
|
||||
{
|
||||
setting->Reset();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsPageWidget::ResetToDefault()
|
||||
{
|
||||
for (auto& setting : p->settings_)
|
||||
{
|
||||
setting->StageDefault();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ui
|
||||
} // namespace qt
|
||||
} // namespace scwx
|
||||
36
scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp
Normal file
36
scwx-qt/source/scwx/qt/ui/settings/settings_page_widget.hpp
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#pragma once
|
||||
|
||||
#include <scwx/qt/settings/settings_interface_base.hpp>
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
namespace scwx
|
||||
{
|
||||
namespace qt
|
||||
{
|
||||
namespace ui
|
||||
{
|
||||
|
||||
class SettingsPageWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SettingsPageWidget(QWidget* parent = nullptr);
|
||||
~SettingsPageWidget();
|
||||
|
||||
bool CommitChanges();
|
||||
void DiscardChanges();
|
||||
void ResetToDefault();
|
||||
|
||||
protected:
|
||||
void AddSettingsInterface(settings::SettingsInterfaceBase* setting);
|
||||
|
||||
private:
|
||||
class Impl;
|
||||
std::shared_ptr<Impl> p;
|
||||
};
|
||||
|
||||
} // namespace ui
|
||||
} // namespace qt
|
||||
} // namespace scwx
|
||||
|
|
@ -22,6 +22,7 @@
|
|||
#include <scwx/qt/types/time_types.hpp>
|
||||
#include <scwx/qt/ui/county_dialog.hpp>
|
||||
#include <scwx/qt/ui/radar_site_dialog.hpp>
|
||||
#include <scwx/qt/ui/settings/hotkey_settings_widget.hpp>
|
||||
#include <scwx/qt/util/color.hpp>
|
||||
#include <scwx/qt/util/file.hpp>
|
||||
#include <scwx/util/logger.hpp>
|
||||
|
|
@ -177,6 +178,7 @@ public:
|
|||
void SetupPalettesAlertsTab();
|
||||
void SetupAudioTab();
|
||||
void SetupTextTab();
|
||||
void SetupHotkeysTab();
|
||||
|
||||
void ShowColorDialog(QLineEdit* lineEdit, QFrame* frame = nullptr);
|
||||
void UpdateRadarDialogLocation(const std::string& id);
|
||||
|
|
@ -216,6 +218,9 @@ public:
|
|||
std::shared_ptr<manager::PositionManager> positionManager_ {
|
||||
manager::PositionManager::Instance()};
|
||||
|
||||
std::vector<SettingsPageWidget*> settingsPages_ {};
|
||||
HotkeySettingsWidget* hotkeySettingsWidget_ {};
|
||||
|
||||
settings::SettingsInterface<std::string> defaultRadarSite_ {};
|
||||
settings::SettingsInterface<std::int64_t> gridWidth_ {};
|
||||
settings::SettingsInterface<std::int64_t> gridHeight_ {};
|
||||
|
|
@ -289,6 +294,9 @@ SettingsDialog::SettingsDialog(QWidget* parent) :
|
|||
// Text
|
||||
p->SetupTextTab();
|
||||
|
||||
// Hotkeys
|
||||
p->SetupHotkeysTab();
|
||||
|
||||
p->ConnectSignals();
|
||||
}
|
||||
|
||||
|
|
@ -1171,6 +1179,16 @@ void SettingsDialogImpl::SetupTextTab()
|
|||
self_->ui->radarSiteHoverTextCheckBox);
|
||||
}
|
||||
|
||||
void SettingsDialogImpl::SetupHotkeysTab()
|
||||
{
|
||||
QVBoxLayout* layout = new QVBoxLayout(self_->ui->hotkeys);
|
||||
|
||||
hotkeySettingsWidget_ = new HotkeySettingsWidget(self_->ui->hotkeys);
|
||||
layout->addWidget(hotkeySettingsWidget_);
|
||||
|
||||
settingsPages_.push_back(hotkeySettingsWidget_);
|
||||
}
|
||||
|
||||
QImage SettingsDialogImpl::GenerateColorTableImage(
|
||||
std::shared_ptr<common::ColorTable> colorTable,
|
||||
std::uint16_t min,
|
||||
|
|
@ -1343,6 +1361,11 @@ void SettingsDialogImpl::ApplyChanges()
|
|||
committed |= setting->Commit();
|
||||
}
|
||||
|
||||
for (auto& page : settingsPages_)
|
||||
{
|
||||
committed |= page->CommitChanges();
|
||||
}
|
||||
|
||||
if (committed)
|
||||
{
|
||||
manager::SettingsManager::Instance().SaveSettings();
|
||||
|
|
@ -1357,6 +1380,11 @@ void SettingsDialogImpl::DiscardChanges()
|
|||
{
|
||||
setting->Reset();
|
||||
}
|
||||
|
||||
for (auto& page : settingsPages_)
|
||||
{
|
||||
page->DiscardChanges();
|
||||
}
|
||||
}
|
||||
|
||||
void SettingsDialogImpl::ResetToDefault()
|
||||
|
|
@ -1367,6 +1395,11 @@ void SettingsDialogImpl::ResetToDefault()
|
|||
{
|
||||
setting->StageDefault();
|
||||
}
|
||||
|
||||
for (auto& page : settingsPages_)
|
||||
{
|
||||
page->ResetToDefault();
|
||||
}
|
||||
}
|
||||
|
||||
std::string SettingsDialogImpl::RadarSiteLabel(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue