105 lines
2.8 KiB
C++
105 lines
2.8 KiB
C++
|
#include "commandform.h"
|
||
|
|
||
|
#include <QtWidgets/QLabel>
|
||
|
#include <QtWidgets/QLineEdit>
|
||
|
#include <QtWidgets/QSpinBox>
|
||
|
#include <QtWidgets/QPushButton>
|
||
|
|
||
|
CommandForm::CommandForm(const QString& commandName, const AMap& p_args, QWidget* parent):
|
||
|
QDialog(parent),
|
||
|
args(p_args),
|
||
|
editors(),
|
||
|
name(commandName)
|
||
|
{
|
||
|
QVBoxLayout* mainLayout = new QVBoxLayout(this);
|
||
|
QHBoxLayout* buttonsLayout = new QHBoxLayout();
|
||
|
QFormLayout* formLayout = new QFormLayout();
|
||
|
|
||
|
mainLayout->addWidget(new QLabel(name, this));
|
||
|
mainLayout->addLayout(formLayout);
|
||
|
mainLayout->addStretch();
|
||
|
mainLayout->addLayout(buttonsLayout);
|
||
|
|
||
|
setLayout(mainLayout);
|
||
|
createForm(formLayout);
|
||
|
createButtons(buttonsLayout);
|
||
|
}
|
||
|
|
||
|
void CommandForm::createButtons(QHBoxLayout* layout)
|
||
|
{
|
||
|
layout->addStretch();
|
||
|
|
||
|
QPushButton* accept = new QPushButton(QIcon::fromTheme("dialog-ok"), tr("OK"), this);
|
||
|
QPushButton* reject = new QPushButton(QIcon::fromTheme("dialog-cancel"), tr("Cancel"), this);
|
||
|
|
||
|
connect(accept, SIGNAL(clicked()), SLOT(accept()));
|
||
|
connect(reject, SIGNAL(clicked()), SLOT(reject()));
|
||
|
|
||
|
layout->addWidget(accept);
|
||
|
layout->addWidget(reject);
|
||
|
}
|
||
|
|
||
|
void CommandForm::createForm(QFormLayout* layout)
|
||
|
{
|
||
|
AMap::const_iterator itr = args.begin();
|
||
|
AMap::const_iterator end = args.end();
|
||
|
|
||
|
for (; itr != end; ++itr) {
|
||
|
bool supportable = false;
|
||
|
QWidget* editor;
|
||
|
|
||
|
switch (itr.value()) {
|
||
|
case 0:
|
||
|
editor = new QLineEdit(this);
|
||
|
supportable = true;
|
||
|
break;
|
||
|
case 2:
|
||
|
QSpinBox* spbox = new QSpinBox(this);
|
||
|
spbox->setMaximum(UINT16_MAX); //TODO what the hell is wrong with this shit?
|
||
|
editor = spbox;
|
||
|
supportable = true;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (supportable) {
|
||
|
layout->addRow(tr(itr.key().toStdString().c_str()), editor);
|
||
|
editors.insert(itr.key(), editor);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
QMap<QString, QVariant> CommandForm::getData() const
|
||
|
{
|
||
|
AMap::const_iterator itr = args.begin();
|
||
|
AMap::const_iterator end = args.end();
|
||
|
|
||
|
QMap<QString, QVariant> result;
|
||
|
|
||
|
for (; itr != end; ++itr) {
|
||
|
bool supportable = false;
|
||
|
QWidget* editor = editors.find(itr.key()).value();
|
||
|
|
||
|
switch (itr.value()) {
|
||
|
case 0:
|
||
|
result.insert(itr.key(), static_cast<QLineEdit*>(editor)->text());
|
||
|
supportable = true;
|
||
|
break;
|
||
|
case 2:
|
||
|
result.insert(itr.key(), static_cast<QSpinBox*>(editor)->value());
|
||
|
supportable = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
QString CommandForm::getName() const
|
||
|
{
|
||
|
return name;
|
||
|
}
|
||
|
|
||
|
|
||
|
|