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