109 lines
3.4 KiB
C++
109 lines
3.4 KiB
C++
#include "newitemdialog.h"
|
|
|
|
#include <QComboBox>
|
|
#include <QGridLayout>
|
|
#include <QJsonArray>
|
|
#include <QJsonObject>
|
|
#include <QLabel>
|
|
#include <QLineEdit>
|
|
#include <QSpinBox>
|
|
#include <QStringListModel>
|
|
|
|
#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<QLineEdit*>(m_controlWidgets[i]);
|
|
itemValues.insert(role, lineEdit->text());
|
|
} else if (TYPE_ROLES.contains(role)) {
|
|
QComboBox* comboBox = dynamic_cast<QComboBox*>(m_controlWidgets[i]);
|
|
itemValues.insert(role, comboBox->currentText());
|
|
} else if (INT_ROLES.contains(role)) {
|
|
QSpinBox* spinBox = dynamic_cast<QSpinBox*>(m_controlWidgets[i]);
|
|
itemValues.insert(role, spinBox->value());
|
|
} else if (DOUBLE_ROLES.contains(role)) {
|
|
QDoubleSpinBox* doubleSpinBox = dynamic_cast<QDoubleSpinBox*>(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<QLineEdit*>(m_controlWidgets[i]);
|
|
lineEdit->clear();
|
|
} else if (TYPE_ROLES.contains(role)) {
|
|
QComboBox* comboBox = dynamic_cast<QComboBox*>(m_controlWidgets[i]);
|
|
comboBox->setCurrentText("");
|
|
} else if (INT_ROLES.contains(role)) {
|
|
QSpinBox* spinBox = dynamic_cast<QSpinBox*>(m_controlWidgets[i]);
|
|
spinBox->setValue(0);
|
|
} else if (DOUBLE_ROLES.contains(role)) {
|
|
QDoubleSpinBox* doubleSpinBox = dynamic_cast<QDoubleSpinBox*>(m_controlWidgets[i]);
|
|
doubleSpinBox->setValue(0.0);
|
|
} else {
|
|
qCritical() << "Could not reset content for control widget in column:" << i << "!";
|
|
}
|
|
}
|
|
}
|