File indexing completed on 2024-04-21 05:10:37
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 "abstractselectioncontroller.h" 0011 0012 #include <QAbstractItemModel> 0013 #include <QPointer> 0014 0015 class QModelIndex; 0016 class QPoint; 0017 0018 class KJob; 0019 0020 namespace Akregator 0021 { 0022 class ArticleListJob; 0023 class FilterUnreadProxyModel; 0024 0025 class SelectionController : public AbstractSelectionController 0026 { 0027 Q_OBJECT 0028 0029 public: 0030 explicit SelectionController(QObject *parent = nullptr); 0031 ~SelectionController() override; 0032 0033 // impl 0034 void setFeedSelector(QAbstractItemView *feedSelector) override; 0035 0036 // impl 0037 void setArticleLister(Akregator::ArticleLister *lister) override; 0038 0039 // impl 0040 [[nodiscard]] Akregator::Article currentArticle() const override; 0041 0042 // impl 0043 [[nodiscard]] QModelIndex currentArticleIndex() const override; 0044 0045 // impl 0046 [[nodiscard]] QList<Akregator::Article> selectedArticles() const override; 0047 0048 // impl 0049 void setSingleArticleDisplay(Akregator::SingleArticleDisplay *display) override; 0050 0051 // impl 0052 Akregator::TreeNode *selectedSubscription() const override; 0053 0054 // impl 0055 void setFeedList(const QSharedPointer<FeedList> &list) override; 0056 0057 // impl 0058 void setFolderExpansionHandler(Akregator::FolderExpansionHandler *handler) override; 0059 0060 public Q_SLOTS: 0061 0062 // impl 0063 void settingsChanged() override; 0064 0065 // impl 0066 void setFilters(const std::vector<QSharedPointer<const Akregator::Filters::AbstractMatcher>> &) override; 0067 0068 // impl 0069 void forceFilterUpdate() override; 0070 0071 private Q_SLOTS: 0072 0073 void subscriptionDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); 0074 void selectedSubscriptionChanged(const QModelIndex &index); 0075 void articleSelectionChanged(); 0076 void articleIndexDoubleClicked(const QModelIndex &index); 0077 void subscriptionContextMenuRequested(const QPoint &point); 0078 void articleHeadersAvailable(KJob *); 0079 0080 private: 0081 QSharedPointer<FeedList> m_feedList; 0082 QPointer<QAbstractItemView> m_feedSelector; 0083 Akregator::ArticleLister *m_articleLister = nullptr; 0084 Akregator::SingleArticleDisplay *m_singleDisplay = nullptr; 0085 Akregator::FilterUnreadProxyModel *const m_subscriptionModel; 0086 QAbstractItemModel *m_currentModel = nullptr; 0087 Akregator::FolderExpansionHandler *m_folderExpansionHandler = nullptr; 0088 Akregator::ArticleModel *m_articleModel = nullptr; 0089 QPointer<TreeNode> m_selectedSubscription; 0090 QPointer<ArticleListJob> m_listJob; 0091 }; 0092 } // namespace Akregator