23 #include "gamecvaredit.h"
28 #include <QHBoxLayout>
40 virtual bool externalLabel()
const {
return true; }
41 virtual void setValue(
const QVariant &value) = 0;
42 virtual QVariant value()
const = 0;
43 virtual QWidget *widget()
const = 0;
46 class BoolEdit final :
public Edit
49 BoolEdit(
const GameCVar &cvar, QWidget *parent)
50 : edit(new QCheckBox(parent))
52 edit->setText(cvar.
name());
53 edit->setChecked(cvar.
value().toBool());
56 bool externalLabel()
const override {
return false; }
58 void setValue(
const QVariant &value)
override
60 edit->setChecked(value.toBool());
63 QVariant value()
const override
65 return edit->isChecked();
68 QWidget *widget()
const override
74 std::unique_ptr<QCheckBox> edit;
77 class IntEdit final :
public Edit
80 IntEdit(
const GameCVar &cvar, QWidget *parent)
81 : edit(new QSpinBox(parent))
83 edit->setMaximum(INT_MAX);
84 edit->setMinimum(INT_MIN);
85 edit->setCorrectionMode(QAbstractSpinBox::CorrectToNearestValue);
86 edit->setValue(cvar.
value().toInt());
89 void setValue(
const QVariant &value)
override
91 edit->setValue(value.toInt());
94 QVariant value()
const override
99 QWidget *widget()
const override
105 std::unique_ptr<QSpinBox> edit;
108 class StringEdit final :
public Edit
111 StringEdit(
const GameCVar &cvar, QWidget *parent)
112 : edit(new QLineEdit(parent))
114 edit->setText(cvar.
value().toString());
117 void setValue(
const QVariant &value)
override
119 edit->setText(value.toString());
122 QVariant value()
const override
127 QWidget *widget()
const override
133 std::unique_ptr<QLineEdit> edit;
140 std::unique_ptr<Edit> edit;
149 auto layout =
new QHBoxLayout(
this);
150 layout->setContentsMargins(0, 0, 0, 0);
152 switch (cvar.value().type())
154 case QMetaType::Bool:
155 d->edit.reset(
new BoolEdit(cvar,
this));
158 case QMetaType::UInt:
159 case QMetaType::LongLong:
160 case QMetaType::ULongLong:
161 d->edit.reset(
new IntEdit(cvar,
this));
164 d->edit.reset(
new StringEdit(cvar,
this));
167 layout->addWidget(d->edit->widget());
173 cvar.setValue(value());
179 return d->edit->externalLabel();
182 void GameCVarEdit::setValue(
const QVariant &value)
184 d->edit->setValue(value);
187 QVariant GameCVarEdit::value()
const
189 return d->edit->value();