#include "commandform.h" #include #include #include #include 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 CommandForm::getData() const { AMap::const_iterator itr = args.begin(); AMap::const_iterator end = args.end(); QMap 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(editor)->text()); supportable = true; break; case 2: result.insert(itr.key(), static_cast(editor)->value()); supportable = true; break; } } return result; } QString CommandForm::getName() const { return name; }