diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2020-11-20 04:33:11 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2020-11-25 19:05:12 +0100 |
commit | 094c0b09abba70e5e4cec5740f918ae56971f3e7 (patch) | |
tree | 47975f5972a513ced328ee9c363549c840fad30d | |
parent | Simple prefix match for completions (diff) | |
download | nheko-094c0b09abba70e5e4cec5740f918ae56971f3e7.tar.xz |
Qml emoji completer
-rw-r--r-- | resources/qml/Completer.qml | 60 | ||||
-rw-r--r-- | resources/qml/MessageInput.qml | 4 | ||||
-rw-r--r-- | src/emoji/EmojiModel.cpp | 4 | ||||
-rw-r--r-- | src/timeline/InputBar.cpp | 6 |
4 files changed, 62 insertions, 12 deletions
diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 2c520dec..0557a2e7 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -56,24 +56,60 @@ Popup { delegate: Rectangle { color: model.index == popup.currentIndex ? colors.window : colors.base - height: del.implicitHeight + 4 - width: del.implicitWidth + 4 + height: chooser.childrenRect.height + 4 + width: chooser.childrenRect.width + 4 - RowLayout { - id: del + DelegateChooser { + id: chooser + roleValue: popup.completerName anchors.centerIn: parent - Avatar { - height: 24 - width: 24 - displayName: model.displayName - url: model.avatarUrl.replace("mxc://", "image://MxcImage/") + DelegateChoice { + roleValue: "user" + + RowLayout { + id: del + + anchors.centerIn: parent + + Avatar { + height: 24 + width: 24 + displayName: model.displayName + url: model.avatarUrl.replace("mxc://", "image://MxcImage/") + } + + Label { + text: model.displayName + color: colors.text + } + + } + } - Label { - text: model.displayName - color: colors.text + DelegateChoice { + roleValue: "emoji" + + RowLayout { + id: del + + anchors.centerIn: parent + + Label { + text: model.unicode + color: colors.text + font: Settings.emojiFont + } + + Label { + text: model.shortName + color: colors.text + } + + } + } } diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 1366689c..ac91e46c 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -99,6 +99,10 @@ Rectangle { completerTriggeredAt = cursorPosition; popup.completerName = "user"; popup.open(); + } else if (event.key == Qt.Key_Colon) { + completerTriggeredAt = cursorPosition; + popup.completerName = "emoji"; + popup.open(); } else if (event.key == Qt.Key_Escape && popup.opened) { completerTriggeredAt = -1; popup.completerName = ""; diff --git a/src/emoji/EmojiModel.cpp b/src/emoji/EmojiModel.cpp index b6a985b8..85c2dd34 100644 --- a/src/emoji/EmojiModel.cpp +++ b/src/emoji/EmojiModel.cpp @@ -3,6 +3,8 @@ #include <Cache.h> #include <MatrixClient.h> +#include "CompletionModelRoles.h" + using namespace emoji; QHash<int, QByteArray> @@ -35,10 +37,12 @@ EmojiModel::data(const QModelIndex &index, int role) const if (hasIndex(index.row(), index.column(), index.parent())) { switch (role) { case Qt::DisplayRole: + case CompletionModel::CompletionRole: case static_cast<int>(EmojiModel::Roles::Unicode): return Provider::emoji[index.row()].unicode; case Qt::ToolTipRole: + case CompletionModel::SearchRole: case static_cast<int>(EmojiModel::Roles::ShortName): return Provider::emoji[index.row()].shortName; diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index 641d8379..5c8f0f11 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -25,6 +25,7 @@ #include "Utils.h" #include "dialogs/PlaceCall.h" #include "dialogs/PreviewUploadOverlay.h" +#include "emoji/EmojiModel.h" #include "blurhash.hpp" @@ -173,6 +174,11 @@ InputBar::completerFor(QString completerName) auto proxy = new CompletionProxyModel(userModel); userModel->setParent(proxy); return proxy; + } else if (completerName == "emoji") { + auto emojiModel = new emoji::EmojiModel(); + auto proxy = new CompletionProxyModel(emojiModel); + emojiModel->setParent(proxy); + return proxy; } return nullptr; } |