File indexing completed on 2024-05-05 16:58:40

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 <QSortFilterProxyModel>
0007 
0008 /**
0009  * @class StateFilterModel
0010  *
0011  * This class creates a custom QSortFilterProxyModel for filtering a list of state events.
0012  * Event types can be filtered out by adding them to m_stateEventTypesFiltered.
0013  */
0014 class StateFilterModel : public QSortFilterProxyModel
0015 {
0016     Q_OBJECT
0017 
0018 public:
0019     /**
0020      * @brief Custom filter function checking if an event type has been filtered out.
0021      *
0022      * The filter rejects a row if the state event type has been added to m_stateEventTypesFiltered.
0023      *
0024      * @sa m_stateEventTypesFiltered
0025      */
0026     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0027 
0028     /**
0029      * @brief Add an event type to m_stateEventTypesFiltered.
0030      *
0031      * @sa m_stateEventTypesFiltered
0032      */
0033     Q_INVOKABLE void addStateEventTypeFiltered(const QString &stateEventType);
0034 
0035     /**
0036      * @brief Remove an event type from m_stateEventTypesFiltered.
0037      *
0038      * @sa m_stateEventTypesFiltered
0039      */
0040     Q_INVOKABLE void removeStateEventTypeFiltered(const QString &stateEventType);
0041 
0042 private:
0043     QStringList m_stateEventTypesFiltered;
0044 };