23 #include "gamecvaredit.h"
28 #include <QHBoxLayout>
40 virtual ~Edit() =
default;
41 virtual bool externalLabel()
const {
return true; }
42 virtual void setValue(
const QVariant &value) = 0;
43 virtual QVariant value()
const = 0;
44 virtual QWidget *widget()
const = 0;
47 class BoolEdit final :
public Edit
50 BoolEdit(
const GameCVar &cvar, QWidget *parent)
51 : edit(new QCheckBox(parent))
53 edit->setText(cvar.
name());
54 edit->setChecked(cvar.
value().toBool());
57 bool externalLabel()
const override {
return false; }
59 void setValue(
const QVariant &value)
override
61 edit->setChecked(value.toBool());
64 QVariant value()
const override
66 return edit->isChecked();
69 QWidget *widget()
const override
75 std::unique_ptr<QCheckBox> edit;
78 class IntEdit final :
public Edit
81 IntEdit(
const GameCVar &cvar, QWidget *parent)
82 : edit(new QSpinBox(parent))
84 edit->setMaximum(INT_MAX);
85 edit->setMinimum(INT_MIN);
86 edit->setCorrectionMode(QAbstractSpinBox::CorrectToNearestValue);
87 edit->setValue(cvar.
value().toInt());
90 void setValue(
const QVariant &value)
override
92 edit->setValue(value.toInt());
95 QVariant value()
const override
100 QWidget *widget()
const override
106 std::unique_ptr<QSpinBox> edit;
109 class StringEdit final :
public Edit
112 StringEdit(
const GameCVar &cvar, QWidget *parent)
113 : edit(new QLineEdit(parent))
115 edit->setText(cvar.
value().toString());
118 void setValue(
const QVariant &value)
override
120 edit->setText(value.toString());
123 QVariant value()
const override
128 QWidget *widget()
const override
134 std::unique_ptr<QLineEdit> edit;
141 std::unique_ptr<Edit> edit;
150 auto layout =
new QHBoxLayout(
this);
151 layout->setContentsMargins(0, 0, 0, 0);
153 switch (cvar.value().type())
155 case QMetaType::Bool:
156 d->edit.reset(
new BoolEdit(cvar,
this));
159 case QMetaType::UInt:
160 case QMetaType::LongLong:
161 case QMetaType::ULongLong:
162 d->edit.reset(
new IntEdit(cvar,
this));
165 d->edit.reset(
new StringEdit(cvar,
this));
168 layout->addWidget(d->edit->widget());
174 cvar.setValue(value());
180 return d->edit->externalLabel();
183 void GameCVarEdit::setValue(
const QVariant &value)
185 d->edit->setValue(value);
188 QVariant GameCVarEdit::value()
const
190 return d->edit->value();