#include "newitemdialog.h" #include #include #include #include #include #include #include "formats/jsonparser.h" #include "model/metadata.h" NewItemDialog::NewItemDialog(QWidget* parent) : AbstractDialog(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, parent) {} void NewItemDialog::createContent() { if (m_contentContainer) { delete m_contentContainer; } setWindowTitle(tr("New item...")); m_contentContainer = new QWidget(this); // REFACTOR use a data structure for input widgets which can be iterated through // using a factory which iterates through the roles from metadata.h // and create the input widgets based on the data type of this role m_nameLabel = new QLabel("&Name"); m_nameEdit = new QLineEdit(); m_nameLabel->setBuddy(m_nameEdit); m_descriptionLabel = new QLabel("&Description"); m_descriptionEdit = new QLineEdit(); m_descriptionLabel->setBuddy(m_descriptionEdit); m_infoLabel = new QLabel("&Info"); m_infoEdit = new QLineEdit(); m_infoLabel->setBuddy(m_infoEdit); m_amountLabel = new QLabel("&Amount"); m_amountBox = new QSpinBox(); m_amountBox->setMaximum(1000); m_amountLabel->setBuddy(m_amountBox); m_factorLabel = new QLabel("&Factor"); m_factorBox = new QDoubleSpinBox(); m_factorBox->setMaximum(1000); m_factorLabel->setBuddy(m_factorBox); QGridLayout* layout = new QGridLayout(); layout->addWidget(m_nameLabel, 0, 0, 1, 1); layout->addWidget(m_nameEdit, 0, 1, 1, 1); layout->addWidget(m_descriptionLabel, 1, 0, 1, 1); layout->addWidget(m_descriptionEdit, 1, 1, 1, 1); layout->addWidget(m_infoLabel, 2, 0, 1, 1); layout->addWidget(m_infoEdit, 2, 1, 1, 1); layout->addWidget(m_amountLabel, 3, 0, 1, 1); layout->addWidget(m_amountBox, 3, 1, 1, 1); layout->addWidget(m_factorLabel, 4, 0, 1, 1); layout->addWidget(m_factorBox, 4, 1, 1, 1); m_contentContainer->setLayout(layout); m_outerLayout->insertWidget(0, m_contentContainer); } void NewItemDialog::accept() { ModelItemValues itemValues; // TODO (after refactoring data structure for input widgets) use iteration through the relevant // roles and their input widgets itemValues.insert(NameRole, m_nameEdit->text()); itemValues.insert(DescriptionRole, m_descriptionEdit->text()); itemValues.insert(InfoRole, m_infoEdit->text()); itemValues.insert(AmountRole, m_amountBox->value()); itemValues.insert(FactorRole, m_factorBox->value()); const QByteArray jsonDoc = JsonParser::itemValuesListToJson({itemValues}, ITEMS_KEY_STRING); emit addItems(jsonDoc); // resetContent(); AbstractDialog::accept(); }