File indexing completed on 2024-04-28 05:10:59

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 #include "article.h"
0010 #include "articlematcher.h"
0011 
0012 #include <QObject>
0013 
0014 #include <vector>
0015 
0016 class QAbstractItemView;
0017 class QItemSelectionModel;
0018 class QPoint;
0019 class QModelIndex;
0020 
0021 namespace Akregator
0022 {
0023 class ArticleModel;
0024 class FeedList;
0025 class FolderExpansionHandler;
0026 class SubscriptionListModel;
0027 class TreeNode;
0028 
0029 namespace Filters
0030 {
0031 class AbstractMatcher;
0032 }
0033 
0034 class ArticleLister
0035 {
0036 public:
0037     virtual ~ArticleLister() = default;
0038 
0039     virtual void setArticleModel(Akregator::ArticleModel *model) = 0;
0040 
0041     virtual QItemSelectionModel *articleSelectionModel() const = 0;
0042 
0043     virtual void setIsAggregation(bool isAggregation) = 0;
0044 
0045     virtual void setFilters(const std::vector<QSharedPointer<const Filters::AbstractMatcher>> &) = 0;
0046 
0047     virtual void forceFilterUpdate() = 0;
0048 
0049     virtual QPoint scrollBarPositions() const = 0;
0050 
0051     virtual void setScrollBarPositions(const QPoint &p) = 0;
0052 
0053     virtual const QAbstractItemView *itemView() const = 0;
0054 
0055     virtual QAbstractItemView *itemView() = 0;
0056 };
0057 
0058 class SingleArticleDisplay
0059 {
0060 public:
0061     virtual ~SingleArticleDisplay() = default;
0062 
0063     virtual void showArticle(const Akregator::Article &article) = 0;
0064 };
0065 
0066 class AbstractSelectionController : public QObject
0067 {
0068     Q_OBJECT
0069 
0070 public:
0071     explicit AbstractSelectionController(QObject *parent = nullptr);
0072     ~AbstractSelectionController() override;
0073 
0074     virtual void setFeedList(const QSharedPointer<FeedList> &list) = 0;
0075 
0076     virtual void setFeedSelector(QAbstractItemView *feedSelector) = 0;
0077 
0078     virtual void setArticleLister(Akregator::ArticleLister *lister) = 0;
0079 
0080     virtual void setFolderExpansionHandler(Akregator::FolderExpansionHandler *handler) = 0;
0081 
0082     virtual void setSingleArticleDisplay(Akregator::SingleArticleDisplay *display) = 0;
0083 
0084     virtual Akregator::Article currentArticle() const = 0;
0085 
0086     virtual QModelIndex currentArticleIndex() const = 0;
0087 
0088     virtual QList<Akregator::Article> selectedArticles() const = 0;
0089 
0090     virtual Akregator::TreeNode *selectedSubscription() const = 0;
0091 
0092 public Q_SLOTS:
0093 
0094     virtual void settingsChanged() = 0;
0095 
0096     virtual void setFilters(const std::vector<QSharedPointer<const Akregator::Filters::AbstractMatcher>> &) = 0;
0097 
0098     virtual void forceFilterUpdate() = 0;
0099 
0100 Q_SIGNALS:
0101     void currentSubscriptionChanged(Akregator::TreeNode *node);
0102 
0103     void currentArticleChanged(const Akregator::Article &);
0104 
0105     void articleDoubleClicked(const Akregator::Article &);
0106 };
0107 } // namespace Akregator