Files
illogical-impulse/dots/.config/quickshell/ii/modules/waffle/notificationCenter/WNotificationGroup.qml
T
2025-12-01 13:27:01 +01:00

107 lines
3.3 KiB
QML

import QtQuick
import QtQuick.Layouts
import Quickshell
import qs.services
import qs.modules.common
import qs.modules.common.widgets
import qs.modules.common.functions
import qs.modules.waffle.looks
// TODO: Swipe to dismiss
MouseArea {
id: root
required property var notificationGroup
readonly property var notifications: notificationGroup?.notifications ?? []
property bool expanded: false
implicitWidth: contentLayout.implicitWidth
implicitHeight: contentLayout.implicitHeight
ColumnLayout {
id: contentLayout
anchors.fill: parent
spacing: 4
GroupHeader {
id: notifHeader
Layout.fillWidth: true
Layout.margins: 11
}
ListView {
Layout.fillWidth: true
implicitWidth: notifHeader.implicitWidth
implicitHeight: contentHeight
interactive: false
spacing: 4
model: ScriptModel {
values: root.expanded ? root.notifications.slice().reverse() : root.notifications.slice(-1)
objectProp: "notificationId"
}
delegate: WSingleNotification {
required property int index
required property var modelData
width: ListView.view.width
notification: modelData
groupExpandControlMessage: {
if (root.notifications.length <= 1) return "";
if (!root.expanded) return Translation.tr("+%1 notifications").arg(root.notifications.length - 1);
if (index === root.notifications.length - 1) return Translation.tr("See fewer");
return "";
}
onGroupExpandToggle: {
root.expanded = !root.expanded;
}
}
}
}
component GroupHeader: MouseArea {
id: headerMouseArea
hoverEnabled: true
acceptedButtons: Qt.NoButton
implicitWidth: appHeader.implicitWidth
implicitHeight: appHeader.implicitHeight
RowLayout {
id: appHeader
anchors.fill: parent
spacing: 7
WNotificationAppIcon {
Layout.alignment: Qt.AlignVCenter
icon: root.notificationGroup?.appIcon ?? ""
}
WText {
Layout.fillWidth: true
horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight
text: root.notificationGroup?.appName ?? ""
}
// NotificationHeaderButton { // TODO: More notification functionality needed so we can have this button
// visible: headerMouseArea.containsMouse
// Layout.leftMargin: 25
// Layout.rightMargin: 25
// icon.name: "more-horizontal"
// }
NotificationHeaderButton {
visible: headerMouseArea.containsMouse
Layout.rightMargin: 3
icon.name: "dismiss"
onClicked: {
root.notifications.forEach(notif => {
Qt.callLater(() => {
Notifications.discardNotification(notif.notificationId);
});
});
}
}
}
}
}