Warning, /network/neochat/src/qml/EmojiGrid.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Tobias Fella 0002 // SPDX-License-Identifier: GPL-2.0-or-later 0003 0004 import QtQuick 0005 import QtQuick.Controls as QQC2 0006 import org.kde.kirigami as Kirigami 0007 import org.kde.neochat 0008 0009 QQC2.ScrollView { 0010 id: root 0011 0012 property alias model: emojis.model 0013 property alias count: emojis.count 0014 required property int targetIconSize 0015 readonly property int emojisPerRow: emojis.width / targetIconSize 0016 required property bool withCustom 0017 readonly property var searchCategory: withCustom ? EmojiModel.Search : EmojiModel.SearchNoCustom 0018 required property QtObject header 0019 property bool stickers: false 0020 0021 signal chosen(string unicode) 0022 signal stickerChosen(int index) 0023 0024 onActiveFocusChanged: if (activeFocus) { 0025 emojis.forceActiveFocus() 0026 } 0027 0028 GridView { 0029 id: emojis 0030 0031 anchors.fill: parent 0032 anchors.rightMargin: parent.QQC2.ScrollBar.vertical.visible ? parent.QQC2.ScrollBar.vertical.width : 0 0033 0034 currentIndex: -1 0035 keyNavigationEnabled: true 0036 onActiveFocusChanged: if (activeFocus && currentIndex === -1) { 0037 currentIndex = 0 0038 } else { 0039 currentIndex = -1 0040 } 0041 onModelChanged: currentIndex = -1 0042 0043 cellWidth: emojis.width / root.emojisPerRow 0044 cellHeight: root.targetIconSize 0045 0046 KeyNavigation.up: root.header 0047 0048 clip: true 0049 0050 delegate: EmojiDelegate { 0051 id: emojiDelegate 0052 checked: emojis.currentIndex === model.index 0053 emoji: !!modelData ? modelData.unicode : model.url 0054 name: !!modelData ? modelData.shortName : model.body 0055 0056 width: emojis.cellWidth 0057 height: emojis.cellHeight 0058 0059 isImage: root.stickers 0060 Keys.onEnterPressed: clicked() 0061 Keys.onReturnPressed: clicked() 0062 onClicked: { 0063 if (root.stickers) { 0064 root.stickerChosen(model.index) 0065 } 0066 root.chosen(modelData.isCustom ? modelData.shortName : modelData.unicode) 0067 EmojiModel.emojiUsed(modelData) 0068 } 0069 Keys.onSpacePressed: pressAndHold() 0070 onPressAndHold: { 0071 if (EmojiModel.tones(modelData.shortName).length === 0) { 0072 return; 0073 } 0074 let tones = tonesPopupComponent.createObject(emojiDelegate, {shortName: modelData.shortName, unicode: modelData.unicode, categoryIconSize: root.targetIconSize}) 0075 tones.open() 0076 tones.forceActiveFocus() 0077 } 0078 showTones: !!modelData && EmojiModel.tones(modelData.shortName).length > 0 0079 } 0080 0081 Kirigami.PlaceholderMessage { 0082 anchors.centerIn: parent 0083 text: root.stickers ? i18n("No stickers") : i18n("No emojis") 0084 visible: emojis.count === 0 0085 } 0086 } 0087 Component { 0088 id: tonesPopupComponent 0089 EmojiTonesPicker { 0090 onChosen: root.chosen(emoji) 0091 } 0092 } 0093 }