[Qt] SettingsWidget stores IConfigVar* instead of ConfigVar<T>
This commit is contained in:
parent
90520e57e6
commit
8768796b05
|
@ -18,7 +18,12 @@ void SettingsCheckBox::Initialize() {
|
|||
return;
|
||||
}
|
||||
|
||||
setChecked(*cvar_->current_value());
|
||||
auto cvar = cvar_->as<bool>();
|
||||
if (!cvar) {
|
||||
return;
|
||||
}
|
||||
|
||||
setChecked(*cvar->current_value());
|
||||
|
||||
connect(this, &SettingsCheckBox::stateChanged, [this](int state) {
|
||||
if (state == Qt::Checked) {
|
||||
|
|
|
@ -18,11 +18,58 @@ namespace ui {
|
|||
namespace qt {
|
||||
|
||||
template <typename T>
|
||||
class SettingsComboBox : SettingsWidget<T, XComboBox> {
|
||||
static_assert(std::is_same_v<T, std::string> || std::is_same_v<T, int>,
|
||||
"Settings TextEdit must use std::string or int");
|
||||
class SettingsComboBox : public SettingsWidget<T, XComboBox> {
|
||||
using SettingsCvar = cvar::ConfigVar<T>;
|
||||
|
||||
public:
|
||||
SettingsComboBox(SettingsCvar* config_var = nullptr, QLabel* label = nullptr,
|
||||
QWidget* parent = nullptr)
|
||||
: SettingsWidget(config_var, label, parent) {}
|
||||
|
||||
void Initialize();
|
||||
};
|
||||
|
||||
template <>
|
||||
inline void SettingsComboBox<int>::Initialize() {
|
||||
if (!cvar_) {
|
||||
return;
|
||||
}
|
||||
if (!cvar_) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto cvar = cvar_->as<int>();
|
||||
if (!cvar) {
|
||||
return;
|
||||
}
|
||||
|
||||
setCurrentIndex(*cvar->current_value());
|
||||
|
||||
connect(this, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
[this](int index) { UpdateValue(index); });
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void SettingsComboBox<std::string>::Initialize() {
|
||||
if (!cvar_) {
|
||||
return;
|
||||
}
|
||||
if (!cvar_) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto cvar = cvar_->as<std::string>();
|
||||
if (!cvar) {
|
||||
return;
|
||||
}
|
||||
|
||||
setCurrentText(QString(*cvar->current_value()->c_str()));
|
||||
|
||||
connect(this, &QComboBox::currentTextChanged, [this](const QString& text) {
|
||||
UpdateValue(std::string(text.toUtf8()));
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace qt
|
||||
} // namespace ui
|
||||
} // namespace xe
|
||||
|
|
|
@ -41,7 +41,26 @@ SettingsCheckBox* SettingsGroupBox::CreateCheckBox(const QString& text,
|
|||
|
||||
SettingsComboBox<int>* SettingsGroupBox::CreateComboBox(const QString& text,
|
||||
cvar::ConfigVar<int>* target) {
|
||||
return nullptr;
|
||||
auto combobox_layout = new QVBoxLayout();
|
||||
combobox_layout->setContentsMargins(0, 0, 0, 0);
|
||||
combobox_layout->setSpacing(0);
|
||||
|
||||
auto widget_label = new QLabel();
|
||||
widget_label->setObjectName("subLabel");
|
||||
widget_label->setProperty("type", "warning");
|
||||
auto font = widget_label->font();
|
||||
font.setPointSizeF(kSubLabelSize);
|
||||
widget_label->setFont(font);
|
||||
widget_label->setVisible(false);
|
||||
|
||||
auto combobox = new SettingsComboBox<int>();
|
||||
combobox_layout->addWidget(combobox);
|
||||
|
||||
combobox_layout->addWidget(widget_label);
|
||||
|
||||
layout_->addLayout(combobox_layout);
|
||||
|
||||
return combobox;
|
||||
}
|
||||
|
||||
SettingsComboBox<std::string>* SettingsGroupBox::CreateComboBox(
|
||||
|
|
|
@ -28,7 +28,7 @@ class SettingsWidget : public Widget {
|
|||
|
||||
public:
|
||||
template <typename... Args>
|
||||
SettingsWidget(cvar::ConfigVar<T>* config_var, QLabel* label = nullptr,
|
||||
SettingsWidget(cvar::IConfigVar* config_var, QLabel* label = nullptr,
|
||||
Args... args)
|
||||
: Widget(args...), cvar_(config_var), label_(label) {
|
||||
// default config update function
|
||||
|
@ -46,8 +46,8 @@ class SettingsWidget : public Widget {
|
|||
}
|
||||
}
|
||||
|
||||
cvar::ConfigVar<T>* config_var() const { return cvar_; }
|
||||
void set_config_var(cvar::ConfigVar<T>* cvar) { cvar_ = cvar; }
|
||||
cvar::IConfigVar* config_var() const { return cvar_; }
|
||||
void set_config_var(cvar::IConfigVar* cvar) { cvar_ = cvar; }
|
||||
|
||||
void set_update_config_fn(
|
||||
const std::function<void(T, cvar::ConfigVar<T>&)>& fn) {
|
||||
|
@ -56,15 +56,18 @@ class SettingsWidget : public Widget {
|
|||
|
||||
void UpdateValue(T val) {
|
||||
if (cvar_) {
|
||||
update_config_fn_(val, *cvar_);
|
||||
SaveToConfig();
|
||||
auto cvar = cvar_->as<T>();
|
||||
if (cvar) {
|
||||
update_config_fn_(val, *cvar);
|
||||
SaveToConfig();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SaveToConfig() { Config::Instance().SaveConfig(); }
|
||||
|
||||
protected:
|
||||
cvar::ConfigVar<T>* cvar_;
|
||||
cvar::IConfigVar* cvar_;
|
||||
std::function<void(T, cvar::ConfigVar<T>&)> update_config_fn_;
|
||||
QLabel* label_;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue