File indexing completed on 2024-04-21 05:10:34
0001 /* 0002 This file is part of Akregator. 0003 0004 SPDX-FileCopyrightText: 2007 Frank Osterfeld <osterfeld@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0007 */ 0008 #pragma once 0009 0010 #include <QAbstractTableModel> 0011 0012 #include "akregatorpart_export.h" 0013 #include "article.h" 0014 0015 #include <QSharedPointer> 0016 #include <vector> 0017 0018 namespace Akregator 0019 { 0020 class TreeNode; 0021 0022 namespace Filters 0023 { 0024 class AbstractMatcher; 0025 } 0026 0027 class AKREGATORPART_EXPORT ArticleModel : public QAbstractTableModel 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 enum Column { ItemTitleColumn = 0, FeedTitleColumn, AuthorColumn, DateColumn, DescriptionColumn, ContentColumn, ColumnCount }; 0033 0034 enum Role { SortRole = Qt::UserRole, LinkRole, GuidRole, ItemIdRole, FeedIdRole, StatusRole, IsImportantRole, IsDeletedRole }; 0035 0036 explicit ArticleModel(const QList<Article> &articles, QObject *parent = nullptr); 0037 ~ArticleModel() override; 0038 0039 [[nodiscard]] int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0040 0041 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0042 0043 [[nodiscard]] QVariant headerData(int section, Qt::Orientation, int role) const override; 0044 0045 [[nodiscard]] QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0046 0047 [[nodiscard]] bool rowMatches(int row, const QSharedPointer<const Akregator::Filters::AbstractMatcher> &matcher) const; 0048 0049 [[nodiscard]] Article article(int row) const; 0050 0051 [[nodiscard]] QStringList mimeTypes() const override; 0052 0053 QMimeData *mimeData(const QModelIndexList &indexes) const override; 0054 0055 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &idx) const override; 0056 0057 public Q_SLOTS: 0058 0059 void articlesAdded(Akregator::TreeNode *, const QList<Akregator::Article> &); 0060 void articlesUpdated(Akregator::TreeNode *, const QList<Akregator::Article> &); 0061 void articlesRemoved(Akregator::TreeNode *, const QList<Akregator::Article> &); 0062 void clear(); 0063 0064 private: 0065 ArticleModel(const ArticleModel &); 0066 ArticleModel &operator=(const ArticleModel &); 0067 0068 QList<Article> m_articles; 0069 QList<QString> m_titleCache; 0070 }; 0071 } // namespace Akregator