Warning, /network/tokodon/src/content/ui/Components/Emoji/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 2 as QQC2 0006 import org.kde.kirigami 2 as Kirigami 0007 import org.kde.tokodon 0008 0009 QQC2.ScrollView { 0010 id: emojiGrid 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: EmojiModel.Search 0018 required property QtObject header 0019 0020 signal chosen(string unicode) 0021 0022 onActiveFocusChanged: if (activeFocus) { 0023 emojis.forceActiveFocus() 0024 } 0025 0026 GridView { 0027 id: emojis 0028 0029 anchors.fill: parent 0030 anchors.rightMargin: parent.QQC2.ScrollBar.vertical.visible ? parent.QQC2.ScrollBar.vertical.width : 0 0031 0032 currentIndex: -1 0033 keyNavigationEnabled: true 0034 onActiveFocusChanged: if (activeFocus && currentIndex === -1) { 0035 currentIndex = 0 0036 } else { 0037 currentIndex = -1 0038 } 0039 onModelChanged: currentIndex = -1 0040 0041 cellWidth: emojis.width / emojiGrid.emojisPerRow 0042 cellHeight: emojiGrid.targetIconSize 0043 0044 KeyNavigation.up: emojiGrid.header 0045 0046 clip: true 0047 0048 delegate: EmojiDelegate { 0049 id: emojiDelegate 0050 checked: emojis.currentIndex === model.index 0051 emoji: modelData.unicode 0052 name: modelData.shortName 0053 0054 width: emojis.cellWidth 0055 height: emojis.cellHeight 0056 0057 isImage: modelData.isCustom 0058 Keys.onEnterPressed: clicked() 0059 Keys.onReturnPressed: clicked() 0060 onClicked: { 0061 emojiGrid.chosen(modelData.isCustom ? (":" + modelData.shortName + ":") : modelData.unicode) 0062 EmojiModel.emojiUsed(AccountManager.selectedAccount, name) 0063 } 0064 Keys.onSpacePressed: pressAndHold() 0065 onPressAndHold: { 0066 if (EmojiModel.tones(modelData.shortName).length === 0) { 0067 return; 0068 } 0069 let tones = tonesPopupComponent.createObject(emojiDelegate, {shortName: modelData.shortName, unicode: modelData.unicode, categoryIconSize: emojiGrid.targetIconSize}) 0070 tones.open() 0071 tones.forceActiveFocus() 0072 } 0073 showTones: !!modelData && EmojiModel.tones(modelData.shortName).length > 0 0074 } 0075 0076 Kirigami.PlaceholderMessage { 0077 anchors.centerIn: parent 0078 text: i18n("No emojis") 0079 visible: emojis.count === 0 0080 } 0081 } 0082 Component { 0083 id: tonesPopupComponent 0084 EmojiTonesPicker { 0085 onChosen: emojiGrid.chosen(emoji) 0086 } 0087 } 0088 }