diff options
author | Joseph Donofry <joedonofry@gmail.com> | 2020-05-13 00:35:26 -0400 |
---|---|---|
committer | Joseph Donofry <joedonofry@gmail.com> | 2020-05-13 00:36:41 -0400 |
commit | ee4dcef90f285f49ee27fec13afb486d93781b8b (patch) | |
tree | e6e4313098ef2c2fa4841fa7d6310825b08c0c4b /src/emoji/EmojiModel.h | |
parent | Initial support for sending reactions (diff) | |
download | nheko-ee4dcef90f285f49ee27fec13afb486d93781b8b.tar.xz |
Add new QML-based emoji picker (work in progress)
This is necessary to support having a picker within QML. Eventually, this should replace the existing widget-based one.
Diffstat (limited to 'src/emoji/EmojiModel.h')
-rw-r--r-- | src/emoji/EmojiModel.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/emoji/EmojiModel.h b/src/emoji/EmojiModel.h new file mode 100644 index 00000000..b36ded55 --- /dev/null +++ b/src/emoji/EmojiModel.h @@ -0,0 +1,68 @@ +#pragma once + +#include <QAbstractListModel> +#include <QSet> +#include <QSortFilterProxyModel> +#include <QVector> + +#include "Provider.h" + +namespace emoji { + +/* + * Provides access to the emojis in Provider.h to QML + */ +class EmojiModel : public QAbstractListModel +{ + Q_OBJECT +public: + enum Roles + { + Unicode = Qt::UserRole, // unicode of emoji + Category, // category of emoji + ShortName, // shortext of the emoji + Emoji, // Contains everything from the Emoji + }; + + using QAbstractListModel::QAbstractListModel; + + QHash<int, QByteArray> roleNames() const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + + // TODO: Need a signal for when an emoji is selected + // public signals: + // void emojiSelected(const QString &emoji); +}; + +class EmojiProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + + Q_PROPERTY( + emoji::Emoji::Category category READ category WRITE setCategory NOTIFY categoryChanged) + Q_PROPERTY(QString filter READ filter WRITE setFilter NOTIFY filterChanged) + +public: + explicit EmojiProxyModel(QObject *parent = nullptr); + ~EmojiProxyModel() override; + + Emoji::Category category() const; + void setCategory(Emoji::Category cat); + + QString filter() const; + void setFilter(const QString &filter); + +signals: + void categoryChanged(); + void filterChanged(); + +protected: + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; + +private: + Emoji::Category category_ = Emoji::Category::Search; + emoji::Provider emoji_provider_; +}; + +} \ No newline at end of file |