Files
Panama/config/dot/quickshell/modules/settings/ThemeStartChips.qml
T

99 lines
3.2 KiB
QML

// Where the theme you are editing came from.
//
// Editing a shipped theme forks it into a saved copy rather than changing what
// ships, so "start from" is the honest name for this row: picking a chip
// abandons the current edits and begins again from that theme. Only themes of
// the current scheme are offered -- a light theme cannot be the starting point
// for a dark one without also flipping the desktop underneath the editor.
import QtQuick
import qs.config
import qs.services
Flow {
id: root
width: parent ? parent.width : 620
spacing: 8
readonly property var themes: ThemeProfiles.profiles.filter(
profile => profile.scheme === ThemeProfiles.scheme)
Repeater {
model: root.themes
Rectangle {
id: chip
required property var modelData
readonly property bool active: chip.modelData.id === ThemeProfiles.activeId
implicitWidth: caption.implicitWidth + dot.width + 26
implicitHeight: 26
radius: Theme.pillRadius
color: chip.active
? Theme.alpha(Theme.accent, 0.12)
: Theme.alpha(Theme.fg, chipHover.hovered ? 0.12 : 0.06)
border.width: chip.activeFocus || chip.active ? 2 : 1
border.color: chip.activeFocus
? Theme.accentSecondary
: (chip.active ? Theme.accent : Theme.alpha(Theme.fg, 0.1))
activeFocusOnTab: true
Accessible.role: Accessible.Button
Accessible.name: "Start from " + chip.modelData.name
Accessible.focusable: true
Accessible.focused: chip.activeFocus
function choose(): void {
ThemeProfiles.selectProfile(chip.modelData.id);
}
Keys.onReturnPressed: chip.choose()
Keys.onSpacePressed: chip.choose()
// The gradient, not a flat dot: the pair is what the chip stands
// for, exactly as on the accent swatches it replaces.
Rectangle {
id: dot
anchors.left: parent.left
anchors.leftMargin: 7
anchors.verticalCenter: parent.verticalCenter
width: 17
height: 17
radius: 9
border.width: 0
gradient: Gradient {
orientation: Gradient.Horizontal
GradientStop { position: 0.0; color: chip.modelData.accent }
GradientStop { position: 1.0; color: chip.modelData.secondary }
}
}
Text {
id: caption
anchors.left: dot.right
anchors.leftMargin: 8
anchors.verticalCenter: parent.verticalCenter
text: chip.modelData.name
color: chip.active ? Theme.fg : Theme.fgDim
font.family: Theme.fontFamily
font.pixelSize: Theme.fontSizeSmall
font.weight: chip.active ? Font.DemiBold : Font.Medium
}
HoverHandler {
id: chipHover
cursorShape: Qt.PointingHandCursor
}
TapHandler {
onTapped: chip.choose()
}
}
}
}