quickshell/modules/notifications/NotificationCard.qml

100 lines
3.1 KiB
QML
Raw Permalink Normal View History

2026-03-11 14:23:10 +01:00
import QtQuick
import qs.settings
import QtQuick.Layouts
import qs
2026-03-19 11:32:23 +01:00
import Quickshell
2026-03-11 14:23:10 +01:00
import qs.widgets
import Quickshell.Widgets
Rectangle {
id: notifyItem
required property var modelData
2026-03-25 21:08:36 +01:00
implicitWidth: ListView.view ? ListView.view.width : 500
2026-03-19 11:32:23 +01:00
implicitHeight: fullLayout.implicitHeight + 40
color: dismissArea.containsMouse ? Colors.base02 : Colors.base00
2026-03-11 14:23:10 +01:00
radius: Settings.config.rounding
2026-03-20 10:34:10 +01:00
border.width: 2
2026-03-19 11:32:23 +01:00
border.color: Colors.base0D
2026-03-11 14:23:10 +01:00
Timer {
id: dismissTimer
interval: 5000
running: true
2026-03-25 21:08:36 +01:00
onTriggered: notifyItem.modelData.expire()
2026-03-11 14:23:10 +01:00
}
RowLayout {
id: fullLayout
2026-03-20 10:34:10 +01:00
anchors.margins: 20
2026-03-11 14:23:10 +01:00
anchors.fill: parent
spacing: 10
ColumnLayout {
id: textLayout
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
2026-03-25 21:08:36 +01:00
spacing: 0
2026-03-11 14:23:10 +01:00
2026-03-26 20:09:19 +01:00
// New RowLayout to hold the Icon and App Name together
RowLayout {
id: iconTextLayout
spacing: 8
ClippingWrapperRectangle {
id: notiIconWrapper
radius: notifyItem.radius - notifyItem.radius / 3
implicitWidth: notiIcon.implicitSize
implicitHeight: notiIcon.implicitSize
color: "transparent"
child: IconImage {
id: notiIcon
// Keep your existing source logic
source: notifyItem.modelData.image !== "" ? notifyItem.modelData.image : Quickshell.iconPath("/usr/share/icons/Papirus/24x24/panel/notifications.svg")
implicitSize: 22 // Slightly smaller to match text height
asynchronous: true
}
}
CText {
id: appName
text: notifyItem.modelData.appName
opacity: 0.5
font.pixelSize: 10
2026-03-11 14:23:10 +01:00
}
}
2026-03-26 20:09:19 +01:00
ColumnLayout {
spacing: 0
Layout.alignment: Qt.AlignHCenter
Layout.leftMargin: notiIcon.implicitWidth + iconTextLayout.spacing
CText {
id: summary
text: notifyItem.modelData.summary
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
Layout.topMargin: 5
}
2026-03-11 14:23:10 +01:00
2026-03-26 20:09:19 +01:00
CText {
text: notifyItem.modelData.body
font.pixelSize: Settings.config.fontSize - 2
maximumLineCount: 1
opacity: 0.3
wrapMode: Text.WordWrap
elide: Text.ElideRight
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
}
2026-03-11 14:23:10 +01:00
}
}
}
MouseArea {
id: dismissArea
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: notifyItem.modelData.dismiss()
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
}
}