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 };