Eventviews

coloredtodoproxymodel.cpp
1/*
2 SPDX-FileCopyrightText: 2023 Kevin Ottens <ervin@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
5*/
6
7#include "coloredtodoproxymodel.h"
8
9#include <Akonadi/TodoModel>
10
11#include <KCalUtils/IncidenceFormatter>
12
13class ColoredTodoProxyModelPrivate
14{
15public:
16 ColoredTodoProxyModelPrivate(const EventViews::PrefsPtr &preferences)
17 : m_preferences(preferences)
18 {
19 }
20
21 EventViews::PrefsPtr m_preferences;
22};
23
24static bool isDueToday(const KCalendarCore::Todo::Ptr &todo)
25{
26 return !todo->isCompleted() && todo->dtDue().date() == QDate::currentDate();
27}
28
29ColoredTodoProxyModel::ColoredTodoProxyModel(const EventViews::PrefsPtr &preferences, QObject *parent)
30 : QIdentityProxyModel(parent)
31 , d(new ColoredTodoProxyModelPrivate(preferences))
32{
33}
34
35ColoredTodoProxyModel::~ColoredTodoProxyModel() = default;
36
37QVariant ColoredTodoProxyModel::data(const QModelIndex &index, int role) const
38{
39 if (role == Qt::BackgroundRole) {
40 const auto todo = QIdentityProxyModel::data(index, Akonadi::TodoModel::TodoPtrRole).value<KCalendarCore::Todo::Ptr>();
41 if (!todo) {
42 return {};
43 }
44
45 if (todo->isOverdue()) {
46 return QVariant(QBrush(d->m_preferences->todoOverdueColor()));
47 } else if (isDueToday(todo)) {
48 return QVariant(QBrush(d->m_preferences->todoDueTodayColor()));
49 } else {
50 return {};
51 }
52 }
53
54 if (role == Qt::ToolTipRole) {
55 const auto todo = QIdentityProxyModel::data(index, Akonadi::TodoModel::TodoPtrRole).value<KCalendarCore::Todo::Ptr>();
56 if (!todo) {
57 return {};
58 }
59 QString displayName;
60 const Akonadi::Item item = data(index, Akonadi::EntityTreeModel::ItemRole).value<Akonadi::Item>();
61 if (item.isValid()) {
62 const Akonadi::Collection col = Akonadi::EntityTreeModel::updatedCollection(this, item.storageCollectionId());
63 if (col.isValid()) {
65 }
66 }
67 return KCalUtils::IncidenceFormatter::toolTipStr(displayName, todo, QDate::currentDate(), true);
68 }
69
70 return QIdentityProxyModel::data(index, role);
71}
bool isValid() const
QString displayName() const
static Collection updatedCollection(const QAbstractItemModel *model, qint64 collectionId)
Collection::Id storageCollectionId() const
bool isValid() const
QSharedPointer< Todo > Ptr
AKONADI_CALENDAR_EXPORT KCalendarCore::Todo::Ptr todo(const Akonadi::Item &item)
AKONADI_CALENDAR_EXPORT QString displayName(Akonadi::ETMCalendar *calendar, const Akonadi::Collection &collection)
KCALUTILS_EXPORT QString toolTipStr(const QString &sourceName, const KCalendarCore::IncidenceBase::Ptr &incidence, QDate date=QDate(), bool richText=true)
const QList< QKeySequence > & preferences()
virtual QVariant data(const QModelIndex &index, int role) const const=0
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const const=0
QDate currentDate()
BackgroundRole
T value() const const
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Mar 14 2025 11:47:36 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.