125 lines
3.9 KiB
QML
125 lines
3.9 KiB
QML
import Quickshell
|
|
import Quickshell.Wayland
|
|
import Quickshell.Services.Notifications
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
|
|
import "config.js" as Config
|
|
|
|
Scope {
|
|
id: root
|
|
|
|
NotificationServer {
|
|
id: server
|
|
actionsSupported: true
|
|
bodySupported: true
|
|
imageSupported: true
|
|
|
|
onNotification: n => {
|
|
n.tracked = true
|
|
}
|
|
}
|
|
|
|
PanelWindow {
|
|
anchors { top: true; right: true }
|
|
margins { top: 56; right: 12 }
|
|
|
|
implicitWidth: 380
|
|
implicitHeight: Math.max(1, column.implicitHeight)
|
|
color: "transparent"
|
|
exclusionMode: ExclusionMode.Ignore
|
|
|
|
ColumnLayout {
|
|
id: column
|
|
width: parent.width
|
|
spacing: 10
|
|
|
|
Repeater {
|
|
model: server.trackedNotifications
|
|
|
|
delegate: Rectangle {
|
|
id: card
|
|
required property var modelData
|
|
|
|
Timer {
|
|
running: card.modelData.urgency !== NotificationUrgency.Critical
|
|
interval: Config.notifications.timeout
|
|
repeat: false
|
|
onTriggered: card.modelData.dismiss()
|
|
}
|
|
|
|
Layout.fillWidth: true
|
|
implicitHeight: layout.implicitHeight + 20
|
|
|
|
radius: 12
|
|
color: Config.colors.bgDark
|
|
|
|
Rectangle {
|
|
anchors.left: parent.left
|
|
anchors.top: parent.top
|
|
anchors.bottom: parent.bottom
|
|
width: 4
|
|
radius: 12
|
|
color: card.modelData.urgency === NotificationUrgency.Critical
|
|
? Config.colors.red
|
|
: Config.colors.purple
|
|
}
|
|
|
|
RowLayout {
|
|
id: layout
|
|
anchors.fill: parent
|
|
anchors.margins: 10
|
|
anchors.leftMargin: 18
|
|
spacing: 10
|
|
|
|
Image {
|
|
Layout.preferredWidth: 36
|
|
Layout.preferredHeight: 36
|
|
Layout.alignment: Qt.AlignTop
|
|
fillMode: Image.PreserveAspectFit
|
|
visible: source.toString() !== ""
|
|
source: card.modelData.image || card.modelData.appIcon || ""
|
|
}
|
|
|
|
ColumnLayout {
|
|
Layout.fillWidth: true
|
|
spacing: 2
|
|
|
|
Text {
|
|
Layout.fillWidth: true
|
|
text: card.modelData.summary
|
|
color: Config.colors.cyan
|
|
|
|
font.family: Config.bar.fontFamily
|
|
font.pixelSize: Config.bar.fontSize
|
|
font.bold: true
|
|
|
|
elide: Text.ElideRight
|
|
}
|
|
|
|
Text {
|
|
Layout.fillWidth: true
|
|
visible: text !== ""
|
|
text: card.modelData.body
|
|
color: Config.colors.fg
|
|
|
|
font.family: Config.bar.fontFamily
|
|
font.pixelSize: Config.bar.fontSize - 1
|
|
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: card.modelData.dismiss()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|