lux-shell/modules/bar/components/notifications/NotificationMenu.qml
2025-08-05 08:30:58 -04:00

95 lines
2.8 KiB
QML

pragma ComponentBehavior: Bound
import qs.config
import qs.services
import qs.widgets
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Widgets
StyledPopupWindow {
id: root
backgroundColor: Theme.palette.base300
margins: 16
radius: 8
content: ColumnLayout {
spacing: 16
RowLayout {
Layout.fillWidth: true
StyledText {
text: "Enabled"
}
Switch {
checked: Notifications.enabled
onClicked: Notifications.enabled = checked
}
StyledButton {
id: clearButton
Layout.alignment: Qt.AlignRight
onClicked: Notifications.clear()
content: StyledText {
text: "Clear"
color: clearButton.containsMouse ? Theme.palette.base300 : Theme.palette.basecontent
}
}
}
StyledLabel {
color: Theme.palette.base200
StyledListView {
id: notifications
spacing: 8
implicitHeight: 300
implicitWidth: 300
clip: true
header: WrapperRectangle {
margin: 8
color: 'transparent'
StyledText {
text: "Notifications"
font.bold: true
font.pixelSize: 16
}
}
model: Notifications.list
delegate: StyledLabel {
required property var modelData
margin: 16
anchors.left: parent.left
anchors.right: parent.right
RowLayout {
ClippingRectangle {
implicitWidth: icon.implicitSize
implicitHeight: icon.implicitSize
IconImage {
id: icon
implicitSize: 20
source: modelData.image == "" ? Quickshell.iconPath(modelData.appIcon, "device-support-unknown-symbolic") : modelData.image
}
}
ColumnLayout {
StyledText {
font.bold: true
font.pixelSize: 12
text: modelData.summary ?? modelData.appName
}
StyledText {
text: modelData.body
}
}
}
}
}
}
}
}