quickshell/modules/applets/ThemeSwitcher.qml
2026-09-16 00:13:02 +02:00

96 lines
3 KiB
QML

pragma ComponentBehavior: Bound
import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQml.Models
import Qt.labs.folderlistmodel 2.11
import qs
import qs.settings
import qs.widgets
import qs.modules.Services
Rectangle {
id: child
implicitWidth: contentLayout.implicitWidth + contentLayout.anchors.margins * 2+ container.anchors.margins * 2
implicitHeight: 600
color: Colors.c.base00
radius: Config.cfg.appearance.rounding
MouseArea {
acceptedButtons: Qt.AllButtons
anchors.fill: parent
}
FolderListModel {
id: schemeModel
folder: Qt.resolvedUrl(Quickshell.shellDir + "/schemes/")
nameFilters: searchBar.text == "" ? [] : ["*" + searchBar.text + "*"]
}
Rectangle {
id: container
anchors.fill: parent
anchors.centerIn: parent
anchors.margins: 10
radius: Config.cfg.appearance.rounding
color: Colors.c.base00
clip: true
ColumnLayout {
id: contentLayout
anchors.fill: parent
anchors.margins: 30
anchors.centerIn: parent
spacing: 40
TextField {
id: searchBar
placeholderText: "enter scheme name:"
placeholderTextColor: Colors.c.base04
leftPadding: 10
background: Rectangle {
color: Colors.c.base02
implicitWidth: 300
implicitHeight: 30
radius: Config.cfg.appearance.rounding
}
}
ListView {
id: schemeList
spacing: 5
Layout.fillHeight: true
model: schemeModel
implicitWidth: 300
delegate: Rectangle {
id: container
required property var modelData
color: Colors.c.base02
height: 30
radius: Config.cfg.appearance.rounding
implicitWidth: 300
StyledText {
id: schemeName
anchors.centerIn: parent
text: container.modelData.fileBaseName
}
MouseArea {
id: schemeSetter
anchors.fill: container
acceptedButtons: Qt.LeftButton
cursorShape: Qt.PointingHandCursor
onClicked: {
setTheme.themeName = modelData.fileBaseName;
setTheme.running = true;
Config.cfg.appearance.currentTheme = modelData.fileName;
}
Process {
id: setTheme
property string themeName
command: ["tinty", "apply", themeName]
}
}
}
}
}
}
}