File indexing completed on 2024-05-26 04:55:12
0001 /** 0002 * SPDX-FileCopyrightText: 2021-2023 Bart De Vries <bart@mogwai.be> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QItemSelection> 0010 #include <QQmlEngine> 0011 #include <QSortFilterProxyModel> 0012 #include <QString> 0013 0014 #include "models/episodemodel.h" 0015 0016 class Entry; 0017 0018 class AbstractEpisodeProxyModel : public QSortFilterProxyModel 0019 { 0020 Q_OBJECT 0021 QML_ELEMENT 0022 QML_UNCREATABLE("") 0023 0024 public: 0025 enum FilterType { 0026 NoFilter, 0027 ReadFilter, 0028 NotReadFilter, 0029 NewFilter, 0030 NotNewFilter, 0031 FavoriteFilter, 0032 NotFavoriteFilter, 0033 }; 0034 Q_ENUM(FilterType) 0035 0036 enum SearchFlag { 0037 TitleFlag = 0x01, 0038 ContentFlag = 0x02, 0039 FeedNameFlag = 0x04, 0040 }; 0041 Q_ENUM(SearchFlag) 0042 Q_DECLARE_FLAGS(SearchFlags, SearchFlag) 0043 Q_FLAGS(SearchFlags) 0044 0045 enum SortType { 0046 DateDescending, 0047 DateAscending, 0048 }; 0049 Q_ENUM(SortType) 0050 0051 Q_PROPERTY(FilterType filterType READ filterType WRITE setFilterType NOTIFY filterTypeChanged) 0052 Q_PROPERTY(QString filterName READ filterName NOTIFY filterTypeChanged) 0053 Q_PROPERTY(QString searchFilter READ searchFilter WRITE setSearchFilter NOTIFY searchFilterChanged) 0054 Q_PROPERTY(SearchFlags searchFlags READ searchFlags WRITE setSearchFlags NOTIFY searchFlagsChanged) 0055 Q_PROPERTY(SortType sortType READ sortType WRITE setSortType NOTIFY sortTypeChanged) 0056 0057 explicit AbstractEpisodeProxyModel(QObject *parent = nullptr); 0058 0059 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; 0060 0061 FilterType filterType() const; 0062 QString filterName() const; 0063 QString searchFilter() const; 0064 SearchFlags searchFlags() const; 0065 SortType sortType() const; 0066 0067 void setFilterType(FilterType type); 0068 void setSearchFilter(const QString &searchString); 0069 void setSearchFlags(SearchFlags searchFlags); 0070 void setSortType(SortType type); 0071 0072 Q_INVOKABLE static QString getFilterName(FilterType type); 0073 Q_INVOKABLE static QString getSearchFlagName(SearchFlag flag); 0074 Q_INVOKABLE static QString getSortName(SortType type); 0075 Q_INVOKABLE static QString getSortIconName(SortType type); 0076 0077 Q_INVOKABLE QItemSelection createSelection(int rowa, int rowb); 0078 0079 Q_SIGNALS: 0080 void filterTypeChanged(); 0081 void searchFilterChanged(); 0082 void searchFlagsChanged(); 0083 void sortTypeChanged(); 0084 0085 protected: 0086 FilterType m_currentFilter = FilterType::NoFilter; 0087 QString m_searchFilter; 0088 SearchFlags m_searchFlags; 0089 SortType m_currentSort = SortType::DateDescending; 0090 }; 0091 0092 Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractEpisodeProxyModel::SearchFlags) 0093 Q_DECLARE_METATYPE(AbstractEpisodeProxyModel::SortType)