File indexing completed on 2024-12-08 07:33:47

0001 // SPDX-FileCopyrightText: 2022 James Graham <james.h.graham@protonmail.com>
0002 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0003 
0004 #pragma once
0005 
0006 #include <QQmlEngine>
0007 #include <QSortFilterProxyModel>
0008 
0009 /**
0010  * @class UserFilterModel
0011  *
0012  * This class creates a custom QSortFilterProxyModel for filtering a users by either
0013  * display name or matrix ID. The filter can accept a full matrix id i.e. example:kde.org
0014  * to separate between accounts on different servers with similar names.
0015  */
0016 class UserFilterModel : public QSortFilterProxyModel
0017 {
0018     Q_OBJECT
0019     QML_ELEMENT
0020 
0021     /**
0022      * @brief This property hold the text of the filter.
0023      *
0024      * The text is either a desired display name or matrix id.
0025      */
0026     Q_PROPERTY(QString filterText READ filterText WRITE setFilterText NOTIFY filterTextChanged)
0027 
0028 public:
0029     /**
0030      * @brief Custom filter function checking boith the display name and matrix ID.
0031      *
0032      * @note The filter cannot be modified and will always use the same filter properties.
0033      */
0034     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0035 
0036     QString filterText() const;
0037     void setFilterText(const QString &filterText);
0038 
0039 Q_SIGNALS:
0040     void filterTextChanged();
0041 
0042 private:
0043     QString m_filterText;
0044 };