83 lines
2.7 KiB
QML
83 lines
2.7 KiB
QML
import QtQuick
|
|
import "../services" as S
|
|
import NovaStats as NS
|
|
|
|
Row {
|
|
id: root
|
|
|
|
spacing: 6
|
|
visible: (NS.ModulesService.lockNotifications ?? true) && _notifGroups.length > 0
|
|
|
|
readonly property var _notifGroups: {
|
|
const notifs = S.NotifService.list.filter(n => n.state !== "dismissed");
|
|
const groups = {};
|
|
for (const n of notifs) {
|
|
const key = n.appName || "unknown";
|
|
if (!groups[key])
|
|
groups[key] = {
|
|
resolvedIcon: "",
|
|
name: n.appName,
|
|
count: 0
|
|
};
|
|
if (!groups[key].resolvedIcon && n.resolvedIcon)
|
|
groups[key].resolvedIcon = n.resolvedIcon;
|
|
groups[key].count++;
|
|
}
|
|
return Object.values(groups);
|
|
}
|
|
|
|
Repeater {
|
|
model: root._notifGroups
|
|
|
|
delegate: Rectangle {
|
|
id: _pill
|
|
required property var modelData
|
|
width: _pillRow.implicitWidth + 12
|
|
height: 24
|
|
radius: 12
|
|
color: Qt.rgba(NS.ThemeService.base01.r, NS.ThemeService.base01.g, NS.ThemeService.base01.b, 0.7)
|
|
border.color: Qt.rgba(NS.ThemeService.base03.r, NS.ThemeService.base03.g, NS.ThemeService.base03.b, 0.3)
|
|
border.width: 1
|
|
|
|
HoverHandler {
|
|
id: _pillHover
|
|
}
|
|
|
|
// App name tooltip
|
|
Text {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.bottom: parent.top
|
|
anchors.bottomMargin: 4
|
|
text: _pill.modelData.name || ""
|
|
color: NS.ThemeService.base04
|
|
font.pixelSize: NS.ThemeService.fontSize - 2
|
|
font.family: NS.ThemeService.fontFamily
|
|
visible: _pillHover.hovered && text !== ""
|
|
}
|
|
|
|
Row {
|
|
id: _pillRow
|
|
anchors.centerIn: parent
|
|
spacing: 4
|
|
|
|
Image {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: 14
|
|
height: 14
|
|
source: _pill.modelData.resolvedIcon || ""
|
|
sourceSize: Qt.size(14, 14)
|
|
visible: source !== ""
|
|
}
|
|
|
|
Text {
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
text: _pill.modelData.count > 1 ? _pill.modelData.count.toString() : ""
|
|
color: NS.ThemeService.base04
|
|
font.pixelSize: NS.ThemeService.fontSize - 2
|
|
font.family: NS.ThemeService.fontFamily
|
|
visible: _pill.modelData.count > 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|