86 lines
2.4 KiB
QML
86 lines
2.4 KiB
QML
// One row of a TrayMenu: optional icon, label, and either a check/radio mark
|
|
// or a submenu chevron on the right.
|
|
|
|
import Quickshell.Widgets
|
|
import QtQuick
|
|
import qs.config
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
signal activated
|
|
|
|
property string label: ""
|
|
property string icon: ""
|
|
// Named `rowEnabled` rather than `enabled`: overriding Item.enabled would
|
|
// also disable the MouseArea, and we still want the row to swallow clicks
|
|
// rather than let them fall through to whatever is behind the popover.
|
|
property bool rowEnabled: true
|
|
property int buttonType: 0 // QsMenuButtonType: 0 None, 1 CheckBox, 2 RadioButton
|
|
property int checkState: Qt.Unchecked
|
|
property bool submenu: false
|
|
|
|
implicitWidth: rowContent.implicitWidth + 20
|
|
implicitHeight: 30
|
|
|
|
radius: Theme.cardRadius
|
|
border.width: 0
|
|
color: mouse.containsMouse && root.rowEnabled ? Theme.alpha(Theme.fg, Theme.hoverAlpha) : "transparent"
|
|
|
|
Behavior on color {
|
|
ColorAnimation {
|
|
duration: Theme.durFast
|
|
}
|
|
}
|
|
|
|
Row {
|
|
id: rowContent
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 10
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
spacing: 8
|
|
|
|
IconImage {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
implicitSize: 16
|
|
asynchronous: true
|
|
visible: root.icon !== ""
|
|
source: root.icon
|
|
}
|
|
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: root.label
|
|
font.family: Theme.fontFamily
|
|
font.pixelSize: Theme.fontSize
|
|
color: root.rowEnabled ? Theme.fg : Theme.fgMuted
|
|
}
|
|
}
|
|
|
|
Text {
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 10
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
font.family: Theme.fontMono
|
|
font.pixelSize: Theme.fontSize
|
|
color: Theme.accent
|
|
|
|
text: {
|
|
if (root.submenu)
|
|
return "\u{F0142}"; // md-chevron_right
|
|
if (root.buttonType !== 0 && root.checkState === Qt.Checked)
|
|
return "\u{F012C}"; // md-check
|
|
return "";
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
id: mouse
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: root.rowEnabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
onClicked: if (root.rowEnabled)
|
|
root.activated()
|
|
}
|
|
}
|