File indexing completed on 2024-05-12 17:08:53
0001 /* 0002 SPDX-FileCopyrightText: 2013 Mark Gaiser <markg85@gmail.com> 0003 SPDX-FileCopyrightText: 2016 Martin Klapetek <mklapetek@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <QAbstractItemModel> 0011 #include <QPointer> 0012 0013 #include "daydata.h" 0014 #include "eventpluginsmanager.h" 0015 #include <CalendarEvents/CalendarEventsPlugin> 0016 0017 class DaysModelPrivate; 0018 0019 class DaysModel : public QAbstractItemModel 0020 { 0021 Q_OBJECT 0022 0023 public: 0024 enum Roles { 0025 isCurrent = Qt::UserRole + 1, 0026 // containsHolidayItems, 0027 containsEventItems, 0028 containsMajorEventItems, 0029 containsMinorEventItems, 0030 // containsTodoItems, 0031 // containsJournalItems, 0032 dayNumber, 0033 monthNumber, 0034 yearNumber, 0035 Events, 0036 EventColor, 0037 EventCount, 0038 AlternateDayNumber, /**< The day number from the alternate calendar system @since 5.26 */ 0039 AlternateMonthNumber, /**< The month number from the alternate calendar system @since 5.26 */ 0040 AlternateYearNumber, /**< The year number from the alternate calendar system @since 5.26 */ 0041 SubLabel, /**< The label that is displayed in the tooltip or beside the full date @since 5.26 */ 0042 SubDayLabel, /**< The label that is displayed under the day number @since 5.26 */ 0043 SubMonthLabel, /**< The label that is displayed under the month number @since 5.26 */ 0044 SubYearLabel, /**< The label that is displayed under the year number @since 5.26 */ 0045 }; 0046 0047 explicit DaysModel(QObject *parent = nullptr); 0048 ~DaysModel() override; 0049 0050 void setSourceData(QList<DayData> *data); 0051 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0052 int columnCount(const QModelIndex &parent) const override; 0053 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 0054 QModelIndex parent(const QModelIndex &index) const override; 0055 0056 QVariant data(const QModelIndex &index, int role) const override; 0057 0058 Q_INVOKABLE void setPluginsManager(QObject *manager); 0059 0060 Q_INVOKABLE QList<QObject *> eventsForDate(const QDate &date); 0061 0062 QHash<int, QByteArray> roleNames() const override; 0063 0064 Q_SIGNALS: 0065 void agendaUpdated(const QDate &updatedDate); 0066 0067 public Q_SLOTS: 0068 void update(); 0069 0070 private Q_SLOTS: 0071 void onDataReady(const QMultiHash<QDate, CalendarEvents::EventData> &data); 0072 void onEventModified(const CalendarEvents::EventData &data); 0073 void onEventRemoved(const QString &uid); 0074 void onAlternateDateReady(const QHash<QDate, QDate> &data); 0075 void onSubLabelReady(const QHash<QDate, CalendarEvents::CalendarEventsPlugin::SubLabel> &data); 0076 0077 private: 0078 DaysModelPrivate *const d; 0079 0080 QModelIndex indexForDate(const QDate &date); 0081 bool hasMajorEventAtDate(const QDate &date) const; 0082 bool hasMinorEventAtDate(const QDate &date) const; 0083 };