File indexing completed on 2024-06-09 05:30:58
0001 /* 0002 SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include "forwardingmodel.h" 0010 0011 #include <KFilePlacesModel> 0012 #include <PlasmaActivities/Stats/ResultModel> 0013 #include <QQmlParserStatus> 0014 #include <QSortFilterProxyModel> 0015 0016 class QModelIndex; 0017 class KFileItem; 0018 0019 class GroupSortProxy : public QSortFilterProxyModel 0020 { 0021 Q_OBJECT 0022 0023 public: 0024 explicit GroupSortProxy(AbstractModel *parentModel, QAbstractItemModel *sourceModel); 0025 ~GroupSortProxy() override; 0026 0027 protected: 0028 bool lessThan(const QModelIndex &left, const QModelIndex &right) const override; 0029 }; 0030 0031 class InvalidAppsFilterProxy : public QSortFilterProxyModel 0032 { 0033 Q_OBJECT 0034 0035 public: 0036 explicit InvalidAppsFilterProxy(AbstractModel *parentModel, QAbstractItemModel *sourceModel); 0037 ~InvalidAppsFilterProxy() override; 0038 0039 protected: 0040 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; 0041 bool lessThan(const QModelIndex &left, const QModelIndex &right) const override; 0042 0043 private Q_SLOTS: 0044 void connectNewFavoritesModel(); 0045 0046 private: 0047 QPointer<AbstractModel> m_parentModel; 0048 }; 0049 0050 class RecentUsageModel : public ForwardingModel, public QQmlParserStatus 0051 { 0052 Q_OBJECT 0053 Q_INTERFACES(QQmlParserStatus) 0054 0055 Q_PROPERTY(int ordering READ ordering WRITE setOrdering NOTIFY orderingChanged) 0056 Q_PROPERTY(IncludeUsage shownItems READ shownItems WRITE setShownItems NOTIFY shownItemsChanged) 0057 0058 public: 0059 enum IncludeUsage { 0060 AppsAndDocs, 0061 OnlyApps, 0062 OnlyDocs, 0063 }; 0064 Q_ENUM(IncludeUsage) 0065 0066 enum Ordering { 0067 Recent, 0068 Popular, 0069 }; 0070 0071 explicit RecentUsageModel(QObject *parent = nullptr, IncludeUsage usage = AppsAndDocs, int ordering = Recent); 0072 ~RecentUsageModel() override; 0073 0074 QString description() const override; 0075 0076 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0077 0078 Q_INVOKABLE bool trigger(int row, const QString &actionId, const QVariant &argument) override; 0079 0080 bool hasActions() const override; 0081 QVariantList actions() const override; 0082 0083 void setShownItems(IncludeUsage usage); 0084 IncludeUsage shownItems() const; 0085 0086 void setOrdering(int ordering); 0087 int ordering() const; 0088 0089 void classBegin() override; 0090 void componentComplete() override; 0091 0092 Q_SIGNALS: 0093 void orderingChanged(int ordering); 0094 void shownItemsChanged(); 0095 0096 private Q_SLOTS: 0097 void refresh() override; 0098 0099 private: 0100 QVariant appData(const QString &resource, int role) const; 0101 QVariant docData(const QString &resource, int role, const QString &mimeType) const; 0102 0103 QString resourceAt(int row) const; 0104 QVariant rowValueAt(int row, KActivities::Stats::ResultModel::Roles role) const; 0105 0106 QString forgetAllActionName() const; 0107 0108 QModelIndex findPlaceForKFileItem(const KFileItem &fileItem) const; 0109 0110 IncludeUsage m_usage; 0111 QPointer<QAbstractItemModel> m_activitiesModel; 0112 0113 Ordering m_ordering; 0114 0115 bool m_complete; 0116 KFilePlacesModel *m_placesModel; 0117 };