diff options
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml b/raveos-hyprland-theme/theme-data/dms/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml new file mode 100644 index 0000000..6142692 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/PLUGINS/ExampleEmojiPlugin/EmojiWidget.qml @@ -0,0 +1,151 @@ +import QtQuick +import Quickshell +import qs.Common +import qs.Services +import qs.Widgets +import qs.Modules.Plugins + +PluginComponent { + id: root + + layerNamespacePlugin: "emoji-cycler" + + property var enabledEmojis: pluginData.emojis || ["๐", "๐ข", "โค๏ธ"] + property int cycleInterval: pluginData.cycleInterval || 3000 + property int maxBarEmojis: pluginData.maxBarEmojis || 3 + + property int currentIndex: 0 + property var displayedEmojis: [] + + Timer { + interval: root.cycleInterval + running: true + repeat: true + onTriggered: { + if (root.enabledEmojis.length > 0) { + root.currentIndex = (root.currentIndex + 1) % root.enabledEmojis.length + root.updateDisplayedEmojis() + } + } + } + + function updateDisplayedEmojis() { + const maxToShow = Math.min(root.maxBarEmojis, root.enabledEmojis.length) + let emojis = [] + for (let i = 0; i < maxToShow; i++) { + const idx = (root.currentIndex + i) % root.enabledEmojis.length + emojis.push(root.enabledEmojis[idx]) + } + root.displayedEmojis = emojis + } + + Component.onCompleted: { + updateDisplayedEmojis() + } + + onEnabledEmojisChanged: updateDisplayedEmojis() + onMaxBarEmojisChanged: updateDisplayedEmojis() + + horizontalBarPill: Component { + Row { + id: emojiRow + spacing: Theme.spacingXS + + Repeater { + model: root.displayedEmojis + StyledText { + text: modelData + font.pixelSize: Theme.fontSizeLarge + } + } + } + } + + verticalBarPill: Component { + Column { + id: emojiColumn + spacing: Theme.spacingXS + + Repeater { + model: root.displayedEmojis + StyledText { + text: modelData + font.pixelSize: Theme.fontSizeMedium + anchors.horizontalCenter: parent.horizontalCenter + } + } + } + } + + popoutContent: Component { + PopoutComponent { + id: popoutColumn + + headerText: "Emoji Picker" + detailsText: "Click an emoji to copy it to clipboard" + showCloseButton: true + + property var allEmojis: [ + "๐", "๐", "๐", "๐", "๐", "๐
", "๐คฃ", "๐", "๐", "๐", + "๐", "๐", "๐", "๐ฅฐ", "๐", "๐คฉ", "๐", "๐", "๐", "๐", + "๐", "๐", "๐", "๐คช", "๐", "๐ค", "๐ค", "๐คญ", "๐คซ", "๐ค", + "๐ค", "๐คจ", "๐", "๐", "๐ถ", "๐", "๐", "๐", "๐ฌ", "๐คฅ", + "๐", "๐", "๐ช", "๐คค", "๐ด", "๐ท", "๐ค", "๐ค", "๐คข", "๐คฎ", + "๐คง", "๐ฅต", "๐ฅถ", "๐ถโ๐ซ๏ธ", "๐ต", "๐ตโ๐ซ", "๐คฏ", "๐ค ", "๐ฅณ", "๐", + "๐ค", "๐ง", "๐", "๐", "๐", "โน๏ธ", "๐ฎ", "๐ฏ", "๐ฒ", "๐ณ", + "๐ฅบ", "๐ฆ", "๐ง", "๐จ", "๐ฐ", "๐ฅ", "๐ข", "๐ญ", "๐ฑ", "๐", + "๐ฃ", "๐", "๐", "๐ฉ", "๐ซ", "๐ฅฑ", "๐ค", "๐ก", "๐ ", "๐คฌ", + "โค๏ธ", "๐งก", "๐", "๐", "๐", "๐", "๐ค", "๐ค", "๐ค", "๐", + "โค๏ธโ๐ฅ", "โค๏ธโ๐ฉน", "๐", "๐", "๐", "๐", "๐", "๐", "๐", "๐", + "๐", "๐", "๐", "โ", "๐ค", "๐ค", "๐ค", "โ๏ธ", "๐ค", "๐ค", + "๐", "๐ค", "๐ค", "๐", "๐", "๐", "๐", "โ๏ธ", "โ", "๐ค" + ] + + Item { + width: parent.width + implicitHeight: root.popoutHeight - popoutColumn.headerHeight - popoutColumn.detailsHeight - Theme.spacingXL + + DankGridView { + id: emojiGrid + anchors.horizontalCenter: parent.horizontalCenter + width: Math.floor(parent.width / 50) * 50 + height: parent.height + clip: true + cellWidth: 50 + cellHeight: 50 + model: popoutColumn.allEmojis + + delegate: StyledRect { + width: 45 + height: 45 + radius: Theme.cornerRadius + color: emojiMouseArea.containsMouse ? Theme.surfaceContainerHighest : Theme.surfaceContainerHigh + border.width: 0 + + StyledText { + anchors.centerIn: parent + text: modelData + font.pixelSize: Theme.fontSizeXLarge + } + + MouseArea { + id: emojiMouseArea + anchors.fill: parent + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + + onClicked: { + Quickshell.execDetached(["dms", "cl", "copy", modelData]) + ToastService.showInfo("Copied " + modelData + " to clipboard") + popoutColumn.closePopout() + } + } + } + } + } + } + } + + popoutWidth: 400 + popoutHeight: 500 +} |