File indexing completed on 2024-05-12 05:36:51

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 #include <qqmlregistration.h>
0011 
0012 #include <KUser>
0013 
0014 class ProcessSortFilterModel : public QSortFilterProxyModel
0015 {
0016     Q_OBJECT
0017     Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
0018     Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode NOTIFY viewModeChanged)
0019     Q_PROPERTY(QStringList hiddenAttributes READ hiddenAttributes WRITE setHiddenAttributes NOTIFY hiddenAttributesChanged)
0020     Q_PROPERTY(QVariantList filterPids READ filterPids WRITE setFilterPids NOTIFY filterPidsChanged)
0021 
0022     Q_PROPERTY(int sortColumn READ sortColumn NOTIFY sorted)
0023     Q_PROPERTY(int sortOrder READ sortOrder NOTIFY sorted)
0024 
0025     QML_ELEMENT
0026 
0027 public:
0028     enum ViewMode {
0029         ViewOwn,
0030         ViewUser,
0031         ViewSystem,
0032         ViewAll,
0033     };
0034     Q_ENUM(ViewMode)
0035 
0036     explicit ProcessSortFilterModel(QObject *parent = nullptr);
0037 
0038     void setSourceModel(QAbstractItemModel *newSourceModel) override;
0039     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0040     bool filterAcceptsColumn(int sourceColumn, const QModelIndex &sourceParent) const override;
0041 
0042     QString filterString() const;
0043     void setFilterString(const QString &newFilterString);
0044     Q_SIGNAL void filterStringChanged();
0045 
0046     ViewMode viewMode() const;
0047     void setViewMode(ViewMode newViewMode);
0048     Q_SIGNAL void viewModeChanged();
0049 
0050     QStringList hiddenAttributes() const;
0051     void setHiddenAttributes(const QStringList &newHiddenAttributes);
0052     Q_SIGNAL void hiddenAttributesChanged();
0053 
0054     QVariantList filterPids() const;
0055     void setFilterPids(const QVariantList &newFilterPids);
0056     Q_SIGNAL void filterPidsChanged();
0057 
0058     Q_INVOKABLE void sort(int column, Qt::SortOrder order) override;
0059     Q_SIGNAL void sorted();
0060 
0061 private:
0062     void findColumns();
0063 
0064     QString m_filterString;
0065     ViewMode m_viewMode = ViewOwn;
0066     QStringList m_hiddenAttributes;
0067     QVariantList m_filterPids;
0068 
0069     int m_uidColumn = -1;
0070     int m_pidColumn = -1;
0071     KUser m_currentUser;
0072 };