File indexing completed on 2024-06-23 04:42:35
0001 // SPDX-FileCopyrightText: 2021 Claudio Cambra <claudio.cambra@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #pragma once 0005 0006 #include <KCalendarCore/Calendar> 0007 #include <QAbstractListModel> 0008 #include <QDebug> 0009 /** 0010 * 0011 */ 0012 class AttendeeStatusModel : public QAbstractListModel 0013 { 0014 Q_OBJECT 0015 0016 public: 0017 enum Roles { 0018 DisplayNameRole = Qt::UserRole + 1, 0019 ValueRole, 0020 }; 0021 Q_ENUM(Roles); 0022 0023 explicit AttendeeStatusModel(QObject *parent = nullptr); 0024 ~AttendeeStatusModel() override = default; 0025 0026 QVariant data(const QModelIndex &idx, int role) const override; 0027 QHash<int, QByteArray> roleNames() const override; 0028 int rowCount(const QModelIndex &parent = {}) const override; 0029 0030 private: 0031 QHash<int, QString> m_status; 0032 }; 0033 0034 class AttendeesModel : public QAbstractListModel 0035 { 0036 Q_OBJECT 0037 Q_PROPERTY(KCalendarCore::Incidence::Ptr incidencePtr READ incidencePtr WRITE setIncidencePtr NOTIFY incidencePtrChanged) 0038 Q_PROPERTY(KCalendarCore::Attendee::List attendees READ attendees NOTIFY attendeesChanged) 0039 Q_PROPERTY(AttendeeStatusModel *attendeeStatusModel READ attendeeStatusModel NOTIFY attendeeStatusModelChanged) 0040 Q_PROPERTY(QList<qint64> attendeesAkonadiIds READ attendeesAkonadiIds NOTIFY attendeesAkonadiIdsChanged) 0041 0042 public: 0043 enum Roles { 0044 CuTypeRole = Qt::UserRole + 1, 0045 DelegateRole, 0046 DelegatorRole, 0047 EmailRole, 0048 FullNameRole, 0049 IsNullRole, 0050 NameRole, 0051 RoleRole, 0052 RSVPRole, 0053 StatusRole, 0054 UidRole 0055 }; 0056 Q_ENUM(Roles); 0057 0058 explicit AttendeesModel(QObject *parent = nullptr, KCalendarCore::Incidence::Ptr incidencePtr = nullptr); 0059 ~AttendeesModel() override = default; 0060 0061 KCalendarCore::Incidence::Ptr incidencePtr() const; 0062 void setIncidencePtr(const KCalendarCore::Incidence::Ptr incidence); 0063 KCalendarCore::Attendee::List attendees() const; 0064 void updateAkonadiContactIds(); 0065 AttendeeStatusModel *attendeeStatusModel(); 0066 QList<qint64> attendeesAkonadiIds() const; 0067 0068 QVariant data(const QModelIndex &idx, int role) const override; 0069 bool setData(const QModelIndex &idx, const QVariant &value, int role) override; 0070 QHash<int, QByteArray> roleNames() const override; 0071 int rowCount(const QModelIndex &parent = {}) const override; 0072 0073 Q_INVOKABLE void addAttendee(qint64 itemId = qint64(), const QString &email = QString()); 0074 Q_INVOKABLE void deleteAttendee(int row); 0075 Q_INVOKABLE void deleteAttendeeFromAkonadiId(qint64 itemId); 0076 0077 Q_SIGNALS: 0078 void incidencePtrChanged(); 0079 void attendeesChanged(); 0080 void attendeeStatusModelChanged(); 0081 void attendeesAkonadiIdsChanged(); 0082 0083 private: 0084 KCalendarCore::Incidence::Ptr m_incidence; 0085 AttendeeStatusModel m_attendeeStatusModel; 0086 QList<qint64> m_attendeesAkonadiIds; 0087 QVariantMap m_dataRoles; 0088 };