File indexing completed on 2024-05-12 05:10:50
0001 /* 0002 SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at> 0003 SPDX-FileCopyrightText: 2012 Sérgio Martins <iamsergio@gmail.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0006 */ 0007 0008 #pragma once 0009 0010 #include "akonadi-calendar_export.h" 0011 0012 #include <Akonadi/ETMCalendar> 0013 #include <Akonadi/IncidenceChanger> 0014 #include <Akonadi/Item> 0015 0016 #include <Akonadi/EntityTreeModel> 0017 #include <KCalendarCore/Todo> 0018 0019 #include <KExtraColumnsProxyModel> 0020 0021 #include <memory> 0022 0023 class QMimeData; 0024 0025 namespace Akonadi 0026 { 0027 class TodoModelPrivate; 0028 0029 /** Expands an IncidenceTreeModel by additional columns for showing todos. */ 0030 class AKONADI_CALENDAR_EXPORT TodoModel : public KExtraColumnsProxyModel 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 /** This enum defines all columns this model provides */ 0036 enum { 0037 SummaryColumn = 0, 0038 RecurColumn, 0039 PriorityColumn, 0040 PercentColumn, 0041 StartDateColumn, 0042 DueDateColumn, 0043 CategoriesColumn, 0044 DescriptionColumn, 0045 CalendarColumn, 0046 CompletedDateColumn, 0047 ColumnCount // Just for iteration/column count purposes. Always keep at the end of enum. 0048 }; 0049 0050 /** This enum defines the user defined roles of the items in this model */ 0051 enum { 0052 TodoRole = Akonadi::EntityTreeModel::UserRole + 1, 0053 TodoPtrRole, 0054 IsRichTextRole, 0055 SummaryRole, 0056 RecurRole, 0057 PriorityRole, 0058 PercentRole, 0059 StartDateRole, 0060 DueDateRole, 0061 CategoriesRole, 0062 DescriptionRole, 0063 CalendarRole, 0064 }; 0065 0066 explicit TodoModel(QObject *parent = nullptr); 0067 0068 ~TodoModel() override; 0069 0070 [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0071 0072 void setSourceModel(QAbstractItemModel *sourceModel) override; 0073 0074 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override; 0075 QVariant extraColumnData(const QModelIndex &parent, int row, int extraColumn, int role = Qt::DisplayRole) const override; 0076 0077 [[nodiscard]] bool setData(const QModelIndex &index, const QVariant &value, int role) override; 0078 0079 [[nodiscard]] QVariant headerData(int section, Qt::Orientation, int role) const override; 0080 0081 AKONADI_CALENDAR_DECL_DEPRECATED_TEXT("Setting calendar is no longer necessary.") 0082 void setCalendar(const Akonadi::ETMCalendar::Ptr &calendar); 0083 0084 void setIncidenceChanger(Akonadi::IncidenceChanger *changer); 0085 0086 [[nodiscard]] QMimeData *mimeData(const QModelIndexList &indexes) const override; 0087 0088 [[nodiscard]] bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; 0089 0090 [[nodiscard]] QStringList mimeTypes() const override; 0091 0092 [[nodiscard]] Qt::DropActions supportedDropActions() const override; 0093 0094 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override; 0095 0096 [[nodiscard]] QHash<int, QByteArray> roleNames() const override; 0097 0098 Q_SIGNALS: 0099 /** Emitted when dropMimeData() rejected a drop 0100 * on the same item or any of its children. 0101 */ 0102 void dropOnSelfRejected(); 0103 0104 private: 0105 friend class TodoModelPrivate; 0106 std::unique_ptr<TodoModelPrivate> const d; 0107 }; 0108 } 0109