File indexing completed on 2024-05-19 16:39:57

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Arjen Hiemstra <ahiemstra@heimr.nl>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QSortFilterProxyModel>
0010 
0011 #include <KUser>
0012 
0013 class ProcessSortFilterModel : public QSortFilterProxyModel
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
0017     Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode NOTIFY viewModeChanged)
0018     Q_PROPERTY(QStringList hiddenAttributes READ hiddenAttributes WRITE setHiddenAttributes NOTIFY hiddenAttributesChanged)
0019     Q_PROPERTY(QVariantList filterPids READ filterPids WRITE setFilterPids NOTIFY filterPidsChanged)
0020 
0021 public:
0022     enum ViewMode {
0023         ViewOwn,
0024         ViewUser,
0025         ViewSystem,
0026         ViewAll,
0027     };
0028     Q_ENUM(ViewMode)
0029 
0030     explicit ProcessSortFilterModel(QObject *parent = nullptr);
0031 
0032     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0033     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0034     bool filterAcceptsColumn(int sourceColumn, const QModelIndex &sourceParent) const override;
0035 
0036     QString filterString() const;
0037     void setFilterString(const QString &newFilterString);
0038     Q_SIGNAL void filterStringChanged();
0039 
0040     ViewMode viewMode() const;
0041     void setViewMode(ViewMode newViewMode);
0042     Q_SIGNAL void viewModeChanged();
0043 
0044     QStringList hiddenAttributes() const;
0045     void setHiddenAttributes(const QStringList &newHiddenAttributes);
0046     Q_SIGNAL void hiddenAttributesChanged();
0047 
0048     QVariantList filterPids() const;
0049     void setFilterPids(const QVariantList &newFilterPids);
0050     Q_SIGNAL void filterPidsChanged();
0051 
0052     Q_INVOKABLE void sort(int column, Qt::SortOrder order) override;
0053 
0054 private:
0055     void findColumns();
0056 
0057     QString m_filterString;
0058     ViewMode m_viewMode = ViewOwn;
0059     QStringList m_hiddenAttributes;
0060     QVariantList m_filterPids;
0061 
0062     int m_uidColumn = -1;
0063     int m_pidColumn = -1;
0064     KUser m_currentUser;
0065 };