[Qt] Support initializing SettingsWidget by reference to cvar
This prevents a situation where one developer changes the name of a cvar but doesn't update calls to Config::FindCvar*
This commit is contained in:
parent
e990505609
commit
cca959e760
|
@ -8,7 +8,9 @@
|
||||||
#include "xenia/ui/qt/widgets/groupbox.h"
|
#include "xenia/ui/qt/widgets/groupbox.h"
|
||||||
#include "xenia/ui/qt/widgets/scroll_area.h"
|
#include "xenia/ui/qt/widgets/scroll_area.h"
|
||||||
|
|
||||||
DECLARE_bool(show_debug_tab)
|
DECLARE_bool(show_debug_tab);
|
||||||
|
DECLARE_bool(discord);
|
||||||
|
DECLARE_bool(use_game_icon);
|
||||||
|
|
||||||
namespace xe {
|
namespace xe {
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
@ -53,7 +55,7 @@ DECLARE_bool(show_debug_tab)
|
||||||
groupbox_layout->setContentsMargins(16, 16, 16, 16);
|
groupbox_layout->setContentsMargins(16, 16, 16, 16);
|
||||||
groupbox->setLayout(groupbox_layout);
|
groupbox->setLayout(groupbox_layout);
|
||||||
|
|
||||||
auto discord_presence_checkbox = new SettingsCheckBox("discord");
|
auto discord_presence_checkbox = new SettingsCheckBox(cvars::discord);
|
||||||
discord_presence_checkbox->setText("Discord Rich Presence");
|
discord_presence_checkbox->setText("Discord Rich Presence");
|
||||||
|
|
||||||
groupbox_layout->addWidget(discord_presence_checkbox);
|
groupbox_layout->addWidget(discord_presence_checkbox);
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* Xenia : Xbox 360 Emulator Research Project *
|
||||||
|
******************************************************************************
|
||||||
|
* Copyright 2020 Ben Vanik. All rights reserved. *
|
||||||
|
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "settings_checkbox.h"
|
||||||
|
|
||||||
|
namespace xe {
|
||||||
|
namespace ui {
|
||||||
|
namespace qt {
|
||||||
|
|
||||||
|
void SettingsCheckBox::Initialize() {
|
||||||
|
if (!cvar_) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setChecked(*cvar_->current_value());
|
||||||
|
|
||||||
|
connect(this, &SettingsCheckBox::stateChanged, [&](int state) {
|
||||||
|
if (state == Qt::Checked) {
|
||||||
|
UpdateValue(true);
|
||||||
|
} else if (state == Qt::Unchecked) {
|
||||||
|
UpdateValue(false);
|
||||||
|
} else {
|
||||||
|
XELOGW("PartiallyChecked state not supported for SettingsCheckBox");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace ui
|
||||||
|
} // namespace xe
|
|
@ -18,27 +18,23 @@ namespace xe {
|
||||||
namespace ui {
|
namespace ui {
|
||||||
namespace qt {
|
namespace qt {
|
||||||
|
|
||||||
class SettingsCheckBox : public SettingsWidget<bool, XCheckBox> {
|
using SettingsType = bool;
|
||||||
|
|
||||||
|
class SettingsCheckBox : public SettingsWidget<SettingsType, XCheckBox> {
|
||||||
public:
|
public:
|
||||||
explicit SettingsCheckBox(const std::string& config_name,
|
explicit SettingsCheckBox(const std::string& config_name,
|
||||||
QWidget* parent = nullptr)
|
QWidget* parent = nullptr)
|
||||||
: SettingsWidget(config_name, parent) {
|
: SettingsWidget(config_name, parent) {
|
||||||
if (!cvar_) {
|
Initialize();
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setChecked(*cvar_->current_value());
|
|
||||||
|
|
||||||
connect(this, &SettingsCheckBox::stateChanged, [&](int state) {
|
|
||||||
if (state == Qt::Checked) {
|
|
||||||
UpdateValue(true);
|
|
||||||
} else if (state == Qt::Unchecked) {
|
|
||||||
UpdateValue(false);
|
|
||||||
} else {
|
|
||||||
XELOGW("PartiallyChecked state not supported for SettingsCheckBox");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
explicit SettingsCheckBox(const SettingsType& config_var,
|
||||||
|
QWidget* parent = nullptr)
|
||||||
|
: SettingsWidget(config_var, parent) {
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Initialize();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace qt
|
} // namespace qt
|
||||||
|
|
|
@ -25,7 +25,14 @@ class SettingsWidget : public Widget {
|
||||||
SettingsWidget(const std::string& config_name, Args... args)
|
SettingsWidget(const std::string& config_name, Args... args)
|
||||||
: Widget(args...), cvar_(nullptr) {
|
: Widget(args...), cvar_(nullptr) {
|
||||||
cvar_ = dynamic_cast<cvar::ConfigVar<T>*>(
|
cvar_ = dynamic_cast<cvar::ConfigVar<T>*>(
|
||||||
Config::Instance().FindConfigVar(config_name));
|
Config::Instance().FindConfigVarByName(config_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename... Args>
|
||||||
|
SettingsWidget(const T& config_ref, Args... args)
|
||||||
|
: Widget(args...), cvar_(nullptr) {
|
||||||
|
cvar_ = dynamic_cast<cvar::ConfigVar<T>*>(
|
||||||
|
Config::Instance().FindConfigVar(config_ref));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateValue(T val) {
|
void UpdateValue(T val) {
|
||||||
|
|
Loading…
Reference in New Issue