summary refs log tree commit diff
path: root/resources/qml
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-05-25 19:20:25 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-05-25 19:20:25 +0200
commitdd74bdc697fb0fe41c5b14694dec9cc028353d23 (patch)
treebc38e59cc7d92815d172721869ffabf08673a223 /resources/qml
parentMake emoji picker use the grid view (diff)
downloadnheko-dd74bdc697fb0fe41c5b14694dec9cc028353d23.tar.xz
Get rid of old emoji picker
Diffstat (limited to 'resources/qml')
-rw-r--r--resources/qml/MessageInput.qml4
-rw-r--r--resources/qml/MessageView.qml9
-rw-r--r--resources/qml/Root.qml7
-rw-r--r--resources/qml/TimelineView.qml7
-rw-r--r--resources/qml/emoji/EmojiPicker.qml307
5 files changed, 14 insertions, 320 deletions
diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml
index 9bdf1f60..b810b9f0 100644
--- a/resources/qml/MessageInput.qml
+++ b/resources/qml/MessageInput.qml
@@ -457,13 +457,13 @@ Rectangle {
             image: ":/icons/icons/ui/smile.svg"
             ToolTip.visible: hovered
             ToolTip.text: qsTr("Emoji")
-            onClicked: emojiPopup2.visible ? emojiPopup2.close() : emojiPopup2.show(emojiButton, room.roomId, function(plaintext, markdown) {
+            onClicked: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(emojiButton, room.roomId, function(plaintext, markdown) {
                 messageInput.insert(messageInput.cursorPosition, markdown);
                 TimelineManager.focusMessageInput();
             })
 
             StickerPicker {
-                id: emojiPopup2
+                id: emojiPopup
 
                 colors: Nheko.colors
                 emoji: true
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index c75710cf..cc80cbbf 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -149,9 +149,9 @@ Item {
                     ToolTip.visible: hovered
                     ToolTip.delay: Nheko.tooltipDelay
                     ToolTip.text: qsTr("React")
-                    onClicked: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(reactButton, function(emoji) {
+                    onClicked: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(reactButton, room.roomId, function(plaintext, markdown) {
                         var event_id = row.model ? row.model.eventId : "";
-                        room.input.reaction(event_id, emoji);
+                        room.input.reaction(event_id, plaintext);
                         TimelineManager.focusMessageInput();
                     })
                 }
@@ -666,8 +666,9 @@ Item {
 
             visible: room ? room.permissions.canSend(MtxEvent.Reaction) : false
             text: qsTr("Re&act")
-            onTriggered: emojiPopup.show(null, function(emoji) {
-                room.input.reaction(messageContextMenu.eventId, emoji);
+            onTriggered: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(null, room.roomId, function(plaintext, markdown) {
+                room.input.reaction(messageContextMenu.eventId, plaintext);
+                TimelineManager.focusMessageInput();
             })
         }
 
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml
index 9584eb8d..4b71af37 100644
--- a/resources/qml/Root.qml
+++ b/resources/qml/Root.qml
@@ -43,13 +43,6 @@ Pane {
     //    repeat: true
     //}
 
-    EmojiPicker {
-        id: emojiPopup
-
-        colors: palette
-        model: TimelineManager.completerFor("allemoji", "")
-    }
-
     function showAliasEditor(settings) {
         var component = Qt.createComponent("qrc:/qml/dialogs/AliasEditor.qml")
         if (component.status == Component.Ready) {
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index af81e1f8..c8b22616 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -29,6 +29,13 @@ Item {
 
     onRoomChanged: if (room != null) room.triggerSpecialEffects()
 
+    StickerPicker {
+        id: emojiPopup
+
+        colors: Nheko.colors
+        emoji: true
+    }
+
     // focus message input on key press, but not on Ctrl-C and such.
     Keys.onPressed: {
         if (event.text && event.key !== Qt.Key_Enter && event.key !== Qt.Key_Return && !topBar.searchHasFocus) {
diff --git a/resources/qml/emoji/EmojiPicker.qml b/resources/qml/emoji/EmojiPicker.qml
deleted file mode 100644
index 59ad3ab6..00000000
--- a/resources/qml/emoji/EmojiPicker.qml
+++ /dev/null
@@ -1,307 +0,0 @@
-// SPDX-FileCopyrightText: Nheko Contributors
-//
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-import "../"
-import QtGraphicalEffects 1.0
-import QtQuick 2.9
-import QtQuick.Controls 2.3
-import QtQuick.Layouts 1.3
-import QtQuick.Window 2.15
-import im.nheko 1.0
-import im.nheko.EmojiModel 1.0
-
-Menu {
-    id: emojiPopup
-
-    property var callback
-    property var colors
-    property alias model: gridView.model
-    property var textArea
-    property string emojiCategory: "people"
-    property real highlightHue: Nheko.colors.highlight.hslHue
-    property real highlightSat: Nheko.colors.highlight.hslSaturation
-    property real highlightLight: Nheko.colors.highlight.hslLightness
-
-    function show(showAt, callback) {
-        console.debug("Showing emojiPicker");
-        emojiPopup.callback = callback;
-        popup(showAt ? showAt : null);
-    }
-
-    margins: 2
-    bottomPadding: 0
-    leftPadding: 0
-    rightPadding: 0
-    topPadding: 0
-    modal: true
-    focus: true
-    closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
-    //height: columnView.implicitHeight + 4
-    //width: columnView.implicitWidth
-    width: 7 * 52 + 20
-
-    Rectangle {
-        color: Nheko.colors.window
-        height: columnView.implicitHeight + Nheko.paddingSmall*2
-        width: 7 * 52 + 20
-
-        ColumnLayout {
-            id: columnView
-
-            spacing: Nheko.paddingSmall
-            anchors.leftMargin: Nheko.paddingSmall
-            anchors.rightMargin: Nheko.paddingSmall
-            anchors.bottom: parent.bottom
-            anchors.left: parent.left
-            anchors.right: parent.right
-
-            // Search field
-            TextField {
-                id: emojiSearch
-
-                Layout.preferredWidth: 7 * 52 + 20 - Nheko.paddingSmall
-                palette: Nheko.colors
-                background: null
-                placeholderTextColor: Nheko.colors.buttonText
-                color: Nheko.colors.text
-                placeholderText: qsTr("Search")
-                selectByMouse: true
-                rightPadding: clearSearch.width
-                onTextChanged: searchTimer.restart()
-                onVisibleChanged: {
-                    if (visible)
-                    forceActiveFocus();
-                    else
-                    clear();
-                }
-
-                Timer {
-                    id: searchTimer
-
-                    interval: 350 // tweak as needed?
-                    onTriggered: {
-                        emojiPopup.model.searchString = emojiSearch.text;
-                        emojiPopup.model.category = Emoji.Category.Search;
-                    }
-                }
-
-                ImageButton {
-                    id: clearSearch
-
-                    visible: emojiSearch.text !== ''
-
-                    image: ":/icons/icons/ui/round-remove-button.svg"
-                    focusPolicy: Qt.NoFocus
-                    onClicked: emojiSearch.clear()
-                    hoverEnabled: true
-                    anchors {
-                        top: parent.top
-                        bottom: parent.bottom
-                        right: parent.right
-                        rightMargin: Nheko.paddingSmall
-                    }
-                }
-            }
-
-            // emoji grid
-            GridView {
-                id: gridView
-
-                Layout.preferredHeight: cellHeight * 5
-                Layout.preferredWidth: 7 * 52 + 20
-                cellWidth: 52
-                cellHeight: 52
-                boundsBehavior: Flickable.StopAtBounds
-                clip: true
-                currentIndex: -1 // prevent sorting from stealing focus
-                cacheBuffer: 500
-
-                ScrollHelper {
-                    flickable: parent
-                    anchors.fill: parent
-                    enabled: !Settings.mobileMode
-                }
-
-                // Individual emoji
-                delegate: AbstractButton {
-                    width: 48
-                    height: 48
-                    hoverEnabled: true
-                    ToolTip.text: model.toolTip
-                    ToolTip.visible: hovered
-                    // TODO: maybe add favorites at some point?
-                    onClicked: {
-                        console.debug("Picked " + model.unicode);
-                        emojiPopup.close();
-                        callback(model.unicode);
-                    }
-
-                    // give the emoji a little oomf
-                    // DropShadow {
-                    //     width: parent.width
-                    //     height: parent.height
-                    //     horizontalOffset: 3
-                    //     verticalOffset: 3
-                    //     radius: 8
-                    //     samples: 17
-                    //     color: "#80000000"
-                    //     source: parent.contentItem
-                    // }
-
-                    contentItem: Text {
-                        horizontalAlignment: Text.AlignHCenter
-                        verticalAlignment: Text.AlignVCenter
-                        font.family: Settings.emojiFont
-                        font.pixelSize: 36
-                        text: model.unicode.replace('\ufe0f', '')
-                        color: Nheko.colors.text
-                    }
-
-                    background: Rectangle {
-                        anchors.fill: parent
-                        color: hovered ? Nheko.colors.highlight : 'transparent'
-                        radius: 5
-                    }
-
-                }
-
-                ScrollBar.vertical: ScrollBar {
-                    id: emojiScroll
-                }
-
-            }
-
-            // Separator
-            Rectangle {
-                visible: emojiSearch.text === ''
-                Layout.fillWidth: true
-                Layout.preferredHeight: 1
-                color: emojiPopup.Nheko.theme.separator
-            }
-
-            // Category picker row
-            RowLayout {
-                visible: emojiSearch.text === ''
-                Layout.bottomMargin: 0
-                Layout.preferredHeight: 42
-                implicitHeight: 42
-                Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
-
-                // Display the normal categories
-                Repeater {
-
-                    model: ListModel {
-                        // TODO: Would like to get 'simple' icons for the categories
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/people.svg"
-                            category: Emoji.Category.People
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/nature.svg"
-                            category: Emoji.Category.Nature
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/foods.svg"
-                            category: Emoji.Category.Food
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/activity.svg"
-                            category: Emoji.Category.Activity
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/travel.svg"
-                            category: Emoji.Category.Travel
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/objects.svg"
-                            category: Emoji.Category.Objects
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/symbols.svg"
-                            category: Emoji.Category.Symbols
-                        }
-
-                        ListElement {
-                            image: ":/icons/icons/emoji-categories/flags.svg"
-                            category: Emoji.Category.Flags
-                        }
-
-                    }
-
-                    delegate: AbstractButton {
-                        Layout.preferredWidth: 36
-                        Layout.preferredHeight: 36
-                        hoverEnabled: true
-                        leftPadding: 2
-                        rightPadding: 2
-                        topPadding: 2
-                        bottomPadding: 2
-                        ToolTip.text: {
-                            switch (model.category) {
-                            case Emoji.Category.People:
-                                return qsTr('People');
-                            case Emoji.Category.Nature:
-                                return qsTr('Nature');
-                            case Emoji.Category.Food:
-                                return qsTr('Food');
-                            case Emoji.Category.Activity:
-                                return qsTr('Activity');
-                            case Emoji.Category.Travel:
-                                return qsTr('Travel');
-                            case Emoji.Category.Objects:
-                                return qsTr('Objects');
-                            case Emoji.Category.Symbols:
-                                return qsTr('Symbols');
-                            case Emoji.Category.Flags:
-                                return qsTr('Flags');
-                            }
-                        }
-                        ToolTip.visible: hovered
-                        onClicked: {
-                            //emojiPopup.model.category = model.category;
-                            gridView.positionViewAtIndex(emojiPopup.model.sourceModel.categoryToIndex(model.category), GridView.Beginning);
-                        }
-
-                        MouseArea {
-                            id: mouseArea
-
-                            anchors.fill: parent
-                            onPressed: mouse.accepted = false
-                            cursorShape: Qt.PointingHandCursor
-                        }
-
-                        contentItem: Image {
-                            horizontalAlignment: Image.AlignHCenter
-                            verticalAlignment: Image.AlignVCenter
-                            smooth: true
-                            mipmap: true
-                            sourceSize.width: 32
-                            sourceSize.height: 32
-                            source: "image://colorimage/" + model.image + "?" + (hovered ? Nheko.colors.highlight : Nheko.colors.buttonText)
-                        }
-
-                        background: Rectangle {
-                            anchors.fill: parent
-                            color: emojiPopup.model.category === model.category ? Qt.hsla(highlightHue, highlightSat, highlightLight, 0.2) : 'transparent'
-                            radius: 5
-                            border.color: emojiPopup.model.category === model.category ? Nheko.colors.highlight : 'transparent'
-                        }
-
-                    }
-
-                }
-
-            }
-
-        }
-
-    }
-
-}