File indexing completed on 2024-12-01 04:35:05

0001 // SPDX-FileCopyrightText: 2023 Tobias Fella <tobias.fella@kde.org>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include <QQmlEngine>
0007 #include <QSortFilterProxyModel>
0008 
0009 /**
0010  * @class EmoticonFilterModel
0011  *
0012  * This class creates a custom QSortFilterProxyModel for filtering a emoticon by type
0013  * (Sticker or Emoji).
0014  */
0015 class EmoticonFilterModel : public QSortFilterProxyModel
0016 {
0017     Q_OBJECT
0018     QML_ELEMENT
0019 
0020     /**
0021      * @brief Whether stickers should be shown
0022      */
0023     Q_PROPERTY(bool showStickers READ showStickers WRITE setShowStickers NOTIFY showStickersChanged)
0024 
0025     /**
0026      * @brief Whether emojis show be shown
0027      */
0028     Q_PROPERTY(bool showEmojis READ showEmojis WRITE setShowEmojis NOTIFY showEmojisChanged)
0029 
0030 public:
0031     explicit EmoticonFilterModel(QObject *parent = nullptr);
0032 
0033     /**
0034      * @brief Custom filter function checking the type of emoticon
0035      *
0036      * @note The filter cannot be modified and will always use the same filter properties.
0037      */
0038     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
0039 
0040     [[nodiscard]] bool showStickers() const;
0041     void setShowStickers(bool showStickers);
0042 
0043     [[nodiscard]] bool showEmojis() const;
0044     void setShowEmojis(bool showEmojis);
0045 
0046 Q_SIGNALS:
0047     void showStickersChanged();
0048     void showEmojisChanged();
0049 
0050 private:
0051     bool m_showStickers = false;
0052     bool m_showEmojis = false;
0053     int m_stickerRole = 0;
0054     int m_emojiRole = 0;
0055 };