diff --git a/model/metadata.h b/model/metadata.h index d847b9d..8acc286 100644 --- a/model/metadata.h +++ b/model/metadata.h @@ -28,11 +28,11 @@ static UserRoles DEFAULT_ROLE = NameRole; static QList USER_FACING_ROLES = {NameRole, DescriptionRole, InfoRole, TypeRole, AmountRole, FactorRole}; static QHash ROLE_NAMES = { - {NameRole, "name"}, {DescriptionRole, "description"}, - {InfoRole, "info"}, {TypeRole, "type"}, - {AmountRole, "amount"}, {FactorRole, "factor"}, - {ToStringRole, "ToString"}, {IdRole, "id"}, - {Qt::DisplayRole, "display"}}; + {NameRole, "name"}, {DescriptionRole, "description"}, + {InfoRole, "info"}, {TypeRole, "type"}, + {AmountRole, "amount"}, {FactorRole, "factor"}, + {ToStringRole, "ToString"}, {IdRole, "id"}, + {Qt::DisplayRole, "display"}, {Qt::EditRole, "edit"}}; static QList STRING_ROLES = {NameRole, DescriptionRole, InfoRole, IdRole}; static QList INT_ROLES = {AmountRole}; diff --git a/model/tablemodel.cpp b/model/tablemodel.cpp index cc703ef..66672b9 100644 --- a/model/tablemodel.cpp +++ b/model/tablemodel.cpp @@ -104,10 +104,9 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation, int ro } bool TableModel::setData(const QModelIndex& index, const QVariant& value, int role) { - if (role == Qt::EditRole && checkIndex(index)) { - const int column = index.column(); - const int roleForColumn = GET_ROLE_FOR_COLUMN(column); - return setItemData(index, {{roleForColumn, value}}); + if (checkIndex(index)) { + const int adjustedRole = getAppropriateRoleForIndex(index, role); + return setItemData(index, {{adjustedRole, value}}); } return false; } @@ -329,6 +328,25 @@ bool TableModel::isEmptyValueEqualToZero(const int role) const { } } +int TableModel::getAppropriateRoleForIndex(const QModelIndex& index, const int role) const { + /// cases: + /// 1. Qt::DisplayRole, Qt::EditRole + /// -> get role for column + /// 2. other roles + /// -> use role as given + const int column = index.column(); + const int roleForColumn = GET_ROLE_FOR_COLUMN(column); + switch (role) { + case Qt::DisplayRole: + case Qt::EditRole: + return roleForColumn; + break; + default: + return role; + break; + } +} + QModelIndex TableModel::searchItemIndex(const ModelItemValues givenItemValues) const { // iterate over indexes to search item : see searchItem(...); // for (const shared_ptr& item : m_items) { diff --git a/model/tablemodel.h b/model/tablemodel.h index a7d2089..8f3c871 100644 --- a/model/tablemodel.h +++ b/model/tablemodel.h @@ -71,6 +71,7 @@ class TableModel : public QAbstractTableModel { QMap onlyChangedValues(const QModelIndex& index, const QMap& roleValueMap) const; bool isEmptyValueEqualToZero(const int role) const; + int getAppropriateRoleForIndex(const QModelIndex& index, const int role) const; QModelIndex searchItemIndex(const ModelItemValues givenItemValues) const; bool isItemEqualToItemValues(const QModelIndex& itemIndex, const ModelItemValues givenItemValues) const;