File indexing completed on 2024-05-12 09:14:53
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Sandro Knauß <knauss@kolabsys.com> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <KCalendarCore/Attendee> 0010 0011 #include <QAbstractTableModel> 0012 #include <QModelIndex> 0013 #include <QSortFilterProxyModel> 0014 0015 namespace IncidenceEditorNG 0016 { 0017 class AttendeeTableModel : public QAbstractTableModel 0018 { 0019 Q_OBJECT 0020 0021 public: 0022 enum Roles { AttendeeRole = Qt::UserRole }; 0023 0024 enum Columns { CuType, Role, FullName, Name, Email, Available, Status, Response }; 0025 0026 enum AvailableStatus { Unknown, Free, Accepted, Busy, Tentative }; 0027 0028 explicit AttendeeTableModel(QObject *parent = nullptr); 0029 0030 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0031 [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0032 [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0033 [[nodiscard]] QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; 0034 0035 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override; 0036 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 0037 0038 bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; 0039 bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override; 0040 0041 bool insertAttendee(int position, const KCalendarCore::Attendee &attendee); 0042 0043 void setAttendees(const KCalendarCore::Attendee::List &resources); 0044 [[nodiscard]] KCalendarCore::Attendee::List attendees() const; 0045 0046 void setKeepEmpty(bool keepEmpty); 0047 [[nodiscard]] bool keepEmpty() const; 0048 0049 void setRemoveEmptyLines(bool removeEmptyLines); 0050 [[nodiscard]] bool removeEmptyLines() const; 0051 0052 private: 0053 void addEmptyAttendee(); 0054 0055 KCalendarCore::Attendee::List mAttendeeList; 0056 std::vector<AvailableStatus> mAttendeeAvailable; 0057 bool mKeepEmpty = false; 0058 bool mRemoveEmptyLines = false; 0059 }; 0060 0061 class ResourceFilterProxyModel : public QSortFilterProxyModel 0062 { 0063 Q_OBJECT 0064 public: 0065 explicit ResourceFilterProxyModel(QObject *parent = nullptr); 0066 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; 0067 }; 0068 0069 class AttendeeFilterProxyModel : public QSortFilterProxyModel 0070 { 0071 Q_OBJECT 0072 public: 0073 explicit AttendeeFilterProxyModel(QObject *parent = nullptr); 0074 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; 0075 }; 0076 }