// SPDX-FileCopyrightText: 2022 James Graham // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL #pragma once #include #include /** * @class UserFilterModel * * This class creates a custom QSortFilterProxyModel for filtering a users by either * display name or matrix ID. The filter can accept a full matrix id i.e. example:kde.org * to separate between accounts on different servers with similar names. */ class UserFilterModel : public QSortFilterProxyModel { Q_OBJECT QML_ELEMENT /** * @brief This property hold the text of the filter. * * The text is either a desired display name or matrix id. */ Q_PROPERTY(QString filterText READ filterText WRITE setFilterText NOTIFY filterTextChanged) Q_PROPERTY(bool allowEmpty READ allowEmpty WRITE setAllowEmpty NOTIFY allowEmptyChanged) public: /** * @brief Custom filter function checking boith the display name and matrix ID. * * @note The filter cannot be modified and will always use the same filter properties. */ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; QString filterText() const; void setFilterText(const QString &filterText); bool allowEmpty() const; void setAllowEmpty(bool allowEmpty); Q_SIGNALS: void filterTextChanged(); void allowEmptyChanged(); private: QString m_filterText; bool m_allowEmpty = false; };