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