import QtQuick import Quickshell import QtQuick.Controls import Quickshell.Hyprland import Quickshell.Io import Qt.labs.folderlistmodel import "../../colors" PanelWindow { id: picker implicitWidth: screen.width * 0.75 implicitHeight: screen.height * 0.5 color: "transparent" visible: true Rectangle { anchors.fill: parent radius: 10 color: Qt.alpha(Colors.surfaceContainerLowest, 0.5) border.width: 2 border.color: Colors.outlineVariant //Wallpaper space Rectangle { id: wallpaperContainer anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: 20 width: parent.width - 35 height: parent.height - 100 color: Qt.alpha(Colors.surfaceContainer, 0.5) radius: 10 clip: true // get folder url FolderListModel { id: imagesModel folder: "file://" + Quickshell.env("HOME") + "/.cache/wallpaper-thumbs" nameFilters: ["*.png", "*.jpg", "*.jpeg"] showDirs: false } // grid Item { anchors.fill: parent anchors.margins: 15 GridView { id: grid anchors.fill: parent cellWidth: parent.width/6 cellHeight: parent.height/2 + 15 model: imagesModel boundsBehavior: Flickable.StopAtBounds // pictures + text delegate: Item { width: grid.cellWidth height: grid.cellHeight Column { spacing: 20 Image { // Image source: filePath fillMode: Image.PreserveAspectCrop width: grid.cellWidth -10 height: grid.cellHeight * 0.7 sourceSize.width: grid.cellWidth -10 sourceSize.height: grid.cellHeight * 0.7 asynchronous: true cache: true } Rectangle { // highlight of text id: textHighlight width: parent.width - 10 height: 24 color: mouseArea.containsMouse ? Qt.alpha(Colors.surfaceContainerHover, 0.5) : "transparent" anchors.horizontalCenter: parent.horizontalCenter Text { text: fileName elide: Text.ElideRight width: parent.width horizontalAlignment: Text.AlignHCenter font.pixelSize: 15 font.family: "Fira Sans" color: Colors.surface_fg } } } Item { anchors.fill: parent Process { id: wallpaperProcess command: ["sh", "-c", Quickshell.env("HOME") + "/.config/quickshell/modules/wp/set-wallpaper.sh" + " " + model.filePath + " &"] stdout: StdioCollector { onStreamFinished: console.log('line read:', this.text) } } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor onClicked: { console.log("Setting wallpaper to:", model.fileName) wallpaperProcess.startDetached() wLoader.closeWallpaperPicker() } } } } ScrollBar.vertical: ScrollBar { policy: ScrollBar.AlwaysOn } } } Rectangle { // border of wallpaper container id: borderOverlay anchors.fill: parent radius: 10 color: "transparent" border.color: Colors.outline border.width: 1 z: 999 } } } }