From bbc8fcaefa1cc4c8dafb4d1453990154c7b00d3c Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 5 Aug 2018 12:21:13 +0200 Subject: A calendar filter --- framework/src/entitymodel.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'framework/src/entitymodel.cpp') diff --git a/framework/src/entitymodel.cpp b/framework/src/entitymodel.cpp index 5a79fdf2..e2a4ea2d 100644 --- a/framework/src/entitymodel.cpp +++ b/framework/src/entitymodel.cpp @@ -36,7 +36,7 @@ EntityModel::~EntityModel() } -QHash< int, QByteArray > EntityModel::roleNames() const +QHash EntityModel::roleNames() const { return mRoleNames; } @@ -152,3 +152,48 @@ QVariantMap EntityModel::data(int row) const } return map; } + + +CheckableEntityModel::CheckableEntityModel(QObject *parent) : EntityModel(parent) +{ +} + +CheckableEntityModel::~CheckableEntityModel() +{ + +} + +QHash CheckableEntityModel::roleNames() const +{ + auto roleNames = EntityModel::roleNames(); + roleNames.insert(Qt::CheckStateRole, "checked"); + return roleNames; +} + +QVariant CheckableEntityModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::CheckStateRole) { + const auto identifier = EntityModel::data(index, Qt::UserRole + 1).toByteArray(); + return mCheckedEntities.contains(identifier); + } + return EntityModel::data(index, role); +} + +bool CheckableEntityModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (role == Qt::CheckStateRole) { + const auto identifier = EntityModel::data(index, Qt::UserRole + 1).toByteArray(); + if (value.toBool()) { + mCheckedEntities.insert(identifier); + } else { + mCheckedEntities.remove(identifier); + } + emit checkedEntitiesChanged(); + } + return EntityModel::setData(index, value, role); +} + +QSet CheckableEntityModel::checkedEntities() const +{ + return mCheckedEntities; +} -- cgit v1.2.3