From 4428d4b083967ea2418735e39fbf4d93903b50da Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 12 Mar 2020 20:30:31 +0200 Subject: [PATCH] support setData function for layouts model --initial support for this --- app/settings/delegates/checkboxdelegate.cpp | 2 +- app/settings/models/layoutsmodel.cpp | 85 +++++++++++++++++++++ app/settings/models/layoutsmodel.h | 1 + app/settings/settingsdialog.cpp | 4 +- 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/app/settings/delegates/checkboxdelegate.cpp b/app/settings/delegates/checkboxdelegate.cpp index eb9b1ea9c..5df4f77ab 100644 --- a/app/settings/delegates/checkboxdelegate.cpp +++ b/app/settings/delegates/checkboxdelegate.cpp @@ -139,7 +139,7 @@ bool CheckBoxDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, con } const QChar CheckMark{0x2714}; - return model->setData(index, value == CheckMark ? QString("") : CheckMark, Qt::DisplayRole); + return model->setData(index, value == CheckMark ? false : true, Qt::DisplayRole); } } diff --git a/app/settings/models/layoutsmodel.cpp b/app/settings/models/layoutsmodel.cpp index 8d2cc5821..f08bc24c8 100644 --- a/app/settings/models/layoutsmodel.cpp +++ b/app/settings/models/layoutsmodel.cpp @@ -275,6 +275,91 @@ QVariant Layouts::data(const QModelIndex &index, int role) const return QVariant{}; } +bool Layouts::setData(const QModelIndex &index, const QVariant &value, int role) +{ + const int row = index.row(); + const int column = index.column(); + + if (!m_layoutsTable.rowExists(row) || column<0 || column >= SHAREDCOLUMN) { + return false; + } + + QVector roles; + roles << role; + + //! common roles for all row cells + if (role == LAYOUTISLOCKEDROLE) { + m_layoutsTable[row].isLocked = value.toBool(); + emit dataChanged(this->index(row,0), this->index(row,SHAREDCOLUMN), roles); + return true; + } + + //! specific roles to each independent cell + switch (column) { + case IDCOLUMN: + if (role == Qt::DisplayRole) { + m_layoutsTable[row].id = value.toString(); + emit dataChanged(index, index, roles); + return true; + } + break; + case HIDDENTEXTCOLUMN: + return true; + break; + case BACKGROUNDCOLUMN: + if (role == Qt::BackgroundRole) { + QString back = value.toString(); + + if (back.startsWith("/")) { + m_layoutsTable[row].background = back; + } else { + m_layoutsTable[row].background = QString(); + m_layoutsTable[row].color = back; + } + emit dataChanged(index, index, roles); + return true; + } + break; + case NAMECOLUMN: + if (role == Qt::DisplayRole) { + m_layoutsTable[row].name = value.toString(); + emit dataChanged(index, index, roles); + return true; + } + break; + case MENUCOLUMN: + if (role == Qt::DisplayRole) { + m_layoutsTable[row].isShownInMenu = value.toBool(); + emit dataChanged(index, index, roles); + return true; + } + break; + case BORDERSCOLUMN: + if (role == Qt::DisplayRole) { + m_layoutsTable[row].hasDisabledBorders = value.toBool(); + emit dataChanged(index, index, roles); + return true; + } + break; + case ACTIVITYCOLUMN: + if (role == Qt::UserRole) { + m_layoutsTable[row].activities = value.toStringList(); + emit dataChanged(index, index, roles); + return true; + } + break; + case SHAREDCOLUMN: + if (role == Qt::UserRole) { + m_layoutsTable[row].shares = value.toStringList(); + emit dataChanged(index, index, roles); + return true; + } + break; + }; + + return false; +} + const Data::Layout &Layouts::at(const int &row) { return m_layoutsTable[row]; diff --git a/app/settings/models/layoutsmodel.h b/app/settings/models/layoutsmodel.h index 9f74e1693..66d0a47ab 100644 --- a/app/settings/models/layoutsmodel.h +++ b/app/settings/models/layoutsmodel.h @@ -78,6 +78,7 @@ public: Qt::ItemFlags flags(const QModelIndex &index) const override; const Data::Layout &at(const int &row); + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; void appendLayout(const Settings::Data::Layout &layout); diff --git a/app/settings/settingsdialog.cpp b/app/settings/settingsdialog.cpp index 912154171..c900b9083 100644 --- a/app/settings/settingsdialog.cpp +++ b/app/settings/settingsdialog.cpp @@ -527,9 +527,9 @@ void SettingsDialog::on_lockedButton_clicked() return; } - bool lockedModel = m_model->data(m_model->index(row, NAMECOLUMN), Qt::UserRole).toBool(); + bool lockedModel = m_model->data(m_model->index(row, NAMECOLUMN), Settings::Model::Layouts::LAYOUTISLOCKEDROLE).toBool(); - m_model->setData(m_model->index(row, NAMECOLUMN), QVariant(!lockedModel), Qt::UserRole); + m_model->setData(m_model->index(row, NAMECOLUMN), !lockedModel, Settings::Model::Layouts::LAYOUTISLOCKEDROLE); updatePerLayoutButtonsState(); updateApplyButtonsState();