#include "newitemdialog.h" #include #include #include #include #include #include #include #include #include "../widgethelper.h" #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); m_layout = new QGridLayout(); for (int i = 0; i < USER_FACING_ROLES.size(); ++i) { setupWidgetPairForColumn(i); } m_contentContainer->setLayout(m_layout); m_outerLayout->insertWidget(0, m_contentContainer); } void NewItemDialog::accept() { addItemToModel(); resetContent(); AbstractDialog::accept(); } void NewItemDialog::setupWidgetPairForColumn(const int column) { // REFACTOR consolidate NewItemDialog::setupWidgetPairForColumn(...) // with ItemDetailMapper::setupWidgetPairForColumn(...) const UserRoles role = GET_ROLE_FOR_COLUMN(column); QWidget* control = WidgetHelper::createControlWidget(role, this); const QString string = QString("&%1").arg(GET_HEADER_FOR_COLUMN(column)); QLabel* label = new QLabel(string); label->setBuddy(control); m_layout->addWidget(label, column, 0); m_layout->addWidget(control, column, 1); m_controlWidgets.append(control); } void NewItemDialog::addItemToModel() { ModelItemValues itemValues; for (int i = 0; i < m_controlWidgets.size(); ++i) { const UserRoles role = GET_ROLE_FOR_COLUMN(i); if (STRING_ROLES.contains(role)) { QLineEdit* lineEdit = dynamic_cast(m_controlWidgets[i]); itemValues.insert(role, lineEdit->text()); } else if (TYPE_ROLES.contains(role)) { QComboBox* comboBox = dynamic_cast(m_controlWidgets[i]); itemValues.insert(role, comboBox->currentText()); } else if (INT_ROLES.contains(role)) { QSpinBox* spinBox = dynamic_cast(m_controlWidgets[i]); itemValues.insert(role, spinBox->value()); } else if (DOUBLE_ROLES.contains(role)) { QDoubleSpinBox* doubleSpinBox = dynamic_cast(m_controlWidgets[i]); itemValues.insert(role, doubleSpinBox->value()); } else { qCritical() << "Could not reset content for control widget in column:" << i << "!"; } } const QByteArray jsonDoc = JsonParser::itemValuesListToJson({itemValues}, ITEMS_KEY_STRING); emit addItems(jsonDoc); } void NewItemDialog::resetContent() { for (int i = 0; i < m_controlWidgets.size(); ++i) { const UserRoles role = GET_ROLE_FOR_COLUMN(i); if (STRING_ROLES.contains(role)) { QLineEdit* lineEdit = dynamic_cast(m_controlWidgets[i]); lineEdit->clear(); } else if (TYPE_ROLES.contains(role)) { QComboBox* comboBox = dynamic_cast(m_controlWidgets[i]); comboBox->setCurrentText(""); } else if (INT_ROLES.contains(role)) { QSpinBox* spinBox = dynamic_cast(m_controlWidgets[i]); spinBox->setValue(0); } else if (DOUBLE_ROLES.contains(role)) { QDoubleSpinBox* doubleSpinBox = dynamic_cast(m_controlWidgets[i]); doubleSpinBox->setValue(0.0); } else { qCritical() << "Could not reset content for control widget in column:" << i << "!"; } } }