1 // SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com> 2 // SPDX-License-Identifier: LGPL-2.1-or-later 3 4 #pragma once 5 6 #include <KCalendarCore/Calendar> 7 #include <QAbstractListModel> 8 #include <QDebug> 9 /** 10 * 11 */ 12 class AttendeeStatusModel : public QAbstractListModel 13 { 14 Q_OBJECT 15 16 public: 17 enum Roles { 18 DisplayNameRole = Qt::UserRole + 1, 19 ValueRole, 20 }; 21 Q_ENUM(Roles); 22 23 AttendeeStatusModel(QObject *parent = nullptr); 24 ~AttendeeStatusModel() override = default; 25 26 QVariant data(const QModelIndex &idx, int role) const override; 27 QHash<int, QByteArray> roleNames() const override; 28 int rowCount(const QModelIndex &parent = {}) const override; 29 30 private: 31 QHash<int, QString> m_status; 32 }; 33 34 class AttendeesModel : public QAbstractListModel 35 { 36 Q_OBJECT 37 Q_PROPERTY(KCalendarCore::Incidence::Ptr incidencePtr READ incidencePtr WRITE setIncidencePtr NOTIFY incidencePtrChanged) 38 Q_PROPERTY(KCalendarCore::Attendee::List attendees READ attendees NOTIFY attendeesChanged) 39 Q_PROPERTY(AttendeeStatusModel *attendeeStatusModel READ attendeeStatusModel NOTIFY attendeeStatusModelChanged) 40 Q_PROPERTY(QList<qint64> attendeesAkonadiIds READ attendeesAkonadiIds NOTIFY attendeesAkonadiIdsChanged) 41 42 public: 43 enum Roles { 44 CuTypeRole = Qt::UserRole + 1, 45 DelegateRole, 46 DelegatorRole, 47 EmailRole, 48 FullNameRole, 49 IsNullRole, 50 NameRole, 51 RoleRole, 52 RSVPRole, 53 StatusRole, 54 UidRole 55 }; 56 Q_ENUM(Roles); 57 58 explicit AttendeesModel(QObject *parent = nullptr, KCalendarCore::Incidence::Ptr incidencePtr = nullptr); 59 ~AttendeesModel() override = default; 60 61 KCalendarCore::Incidence::Ptr incidencePtr() const; 62 void setIncidencePtr(const KCalendarCore::Incidence::Ptr incidence); 63 KCalendarCore::Attendee::List attendees() const; 64 void updateAkonadiContactIds(); 65 AttendeeStatusModel *attendeeStatusModel(); 66 QList<qint64> attendeesAkonadiIds() const; 67 68 QVariant data(const QModelIndex &idx, int role) const override; 69 bool setData(const QModelIndex &idx, const QVariant &value, int role) override; 70 QHash<int, QByteArray> roleNames() const override; 71 int rowCount(const QModelIndex &parent = {}) const override; 72 73 Q_INVOKABLE void addAttendee(qint64 itemId = qint64(), const QString &email = QString()); 74 Q_INVOKABLE void deleteAttendee(int row); 75 Q_INVOKABLE void deleteAttendeeFromAkonadiId(qint64 itemId); 76 77 Q_SIGNALS: 78 void incidencePtrChanged(); 79 void attendeesChanged(); 80 void attendeeStatusModelChanged(); 81 void attendeesAkonadiIdsChanged(); 82 83 private: 84 KCalendarCore::Incidence::Ptr m_incidence; 85 AttendeeStatusModel m_attendeeStatusModel; 86 QList<qint64> m_attendeesAkonadiIds; 87 QVariantMap m_dataRoles; 88 }; 89