diff --git a/dialogs/abstractdialog.cpp b/dialogs/abstractdialog.cpp index 31582bc..67c6374 100644 --- a/dialogs/abstractdialog.cpp +++ b/dialogs/abstractdialog.cpp @@ -6,12 +6,12 @@ #include #include -AbstractDialog::AbstractDialog(QWidget* parent) +AbstractDialog::AbstractDialog(QDialogButtonBox::StandardButtons buttons, QWidget* parent) : QDialog(parent) { setWindowTitle(tr("Dialog does what?...")); setModal(true); - m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + m_buttonBox = new QDialogButtonBox(buttons, this); connect(m_buttonBox, &QDialogButtonBox::accepted, this, &AbstractDialog::accept); connect(m_buttonBox, &QDialogButtonBox::rejected, this, &AbstractDialog::reject); diff --git a/dialogs/abstractdialog.h b/dialogs/abstractdialog.h index 66f2240..00f7b04 100644 --- a/dialogs/abstractdialog.h +++ b/dialogs/abstractdialog.h @@ -2,15 +2,15 @@ #define ABSTRACTDIALOG_H #include +#include class QGridLayout; -class QDialogButtonBox; class QVBoxLayout; class AbstractDialog : public QDialog { Q_OBJECT public: - AbstractDialog(QWidget* parent = nullptr); + AbstractDialog(QDialogButtonBox::StandardButtons buttons, QWidget* parent = nullptr); virtual void createContent() = 0; /// QDialog interface diff --git a/dialogs/edititemdialog.cpp b/dialogs/edititemdialog.cpp index 1311eac..f4020d6 100644 --- a/dialogs/edititemdialog.cpp +++ b/dialogs/edititemdialog.cpp @@ -1,11 +1,12 @@ #include "edititemdialog.h" +#include #include #include "../views/itemdetailmapper.h" EditItemDialog::EditItemDialog(QTableView* tableView, QWidget* parent) - : AbstractDialog(parent) + : AbstractDialog(QDialogButtonBox::Close, parent) , m_tableView(tableView) {} void EditItemDialog::createContent() { diff --git a/dialogs/newitemdialog.cpp b/dialogs/newitemdialog.cpp index c7ab6bb..3455f54 100644 --- a/dialogs/newitemdialog.cpp +++ b/dialogs/newitemdialog.cpp @@ -10,7 +10,7 @@ #include "model/metadata.h" NewItemDialog::NewItemDialog(QWidget* parent) - : AbstractDialog(parent) {} + : AbstractDialog(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, parent) {} void NewItemDialog::createContent() { if (m_contentContainer) { @@ -21,7 +21,9 @@ void NewItemDialog::createContent() { m_contentContainer = new QWidget(this); - // REFACTOR deduce label names and types from meta data & use a factory + // 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); @@ -63,6 +65,8 @@ void NewItemDialog::createContent() { void NewItemDialog::accept() { QHash 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()); diff --git a/views/itemdetailmapper.cpp b/views/itemdetailmapper.cpp index 4b5c7c8..c85045f 100644 --- a/views/itemdetailmapper.cpp +++ b/views/itemdetailmapper.cpp @@ -15,7 +15,14 @@ ItemDetailMapper::ItemDetailMapper(QWidget* parent) : QWidget{parent} { /// model mapping m_mapper = std::make_unique(this); - m_mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); + /// BUG: If multiple columns are changed not all changes are applied. + /// Multiple changes are set individually by calling setData(). + /// Probably due to a conflicting dataChanged signal for too many roles&columns the data of + /// the remaining columns is reset before setData is called. + /// And a manual submit would also create multiple undo steps anyway. + /// Workaround: ManualSubmit -> AutoSubmit + // m_mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); + m_mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit); /// model mapping buttons m_nextButton = new QPushButton(tr("Ne&xt"));