File indexing completed on 2024-05-12 05:35:36
0001 /* 0002 SPDX-FileCopyrightText: 2016 Ivan Cukic <ivan.cukic(at)kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 // Qt 0010 #include <QSortFilterProxyModel> 0011 0012 // KDE 0013 #include <PlasmaActivities/ActivitiesModel> 0014 #include <PlasmaActivities/Consumer> 0015 0016 #include <config-X11.h> // Required by files that include this header 0017 0018 namespace TaskManager 0019 { 0020 class WindowTasksModel; 0021 } 0022 0023 class SortedActivitiesModel : public QSortFilterProxyModel 0024 { 0025 Q_OBJECT 0026 0027 Q_PROPERTY(bool inhibitUpdates READ inhibitUpdates WRITE setInhibitUpdates NOTIFY inhibitUpdatesChanged) 0028 0029 public: 0030 SortedActivitiesModel(const QList<KActivities::Info::State> &states, QObject *parent = nullptr); 0031 ~SortedActivitiesModel() override; 0032 0033 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0034 0035 QHash<int, QByteArray> roleNames() const override; 0036 0037 QString relativeActivity(int relative) const; 0038 0039 TaskManager::WindowTasksModel * const m_windowTasksModel; 0040 0041 protected: 0042 uint lastUsedTime(const QString &activity) const; 0043 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; 0044 0045 enum AdditionalRoles { 0046 LastTimeUsed = KActivities::ActivitiesModel::UserRole, 0047 LastTimeUsedString = KActivities::ActivitiesModel::UserRole + 1, 0048 WindowCount = KActivities::ActivitiesModel::UserRole + 2, 0049 HasWindows = KActivities::ActivitiesModel::UserRole + 3, 0050 }; 0051 0052 public Q_SLOTS: 0053 bool inhibitUpdates() const; 0054 void setInhibitUpdates(bool sortByLastUsedTime); 0055 0056 void onBackgroundsUpdated(const QStringList &changedBackgrounds); 0057 void onCurrentActivityChanged(const QString ¤tActivity); 0058 0059 QString activityIdForRow(int row) const; 0060 QString activityIdForIndex(const QModelIndex &index) const; 0061 int rowForActivityId(const QString &activity) const; 0062 0063 void rowChanged(int row, const QList<int> &roles); 0064 0065 void onWindowAdded(const QModelIndex &parent, int first, int last); 0066 void onWindowRemoved(const QModelIndex &parent, int first, int last); 0067 void onWindowChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles); 0068 0069 Q_SIGNALS: 0070 void inhibitUpdatesChanged(bool inhibitUpdates); 0071 0072 private: 0073 bool m_inhibitUpdates; 0074 0075 QString m_previousActivity; 0076 0077 KActivities::ActivitiesModel *m_activitiesModel = nullptr; 0078 KActivities::Consumer *m_activities = nullptr; 0079 0080 QHash<QString, QVariantList> m_activitiesWindows; 0081 0082 QVariant getWinIdList(const QModelIndex &parent, int row); 0083 };