74 lines
2.1 KiB
QML
74 lines
2.1 KiB
QML
// The message tray inside the date menu: everything that has arrived, newest
|
|
// first, grouped by app, scrolling once it outgrows `maxHeight`.
|
|
|
|
import QtQuick
|
|
import qs.config
|
|
import qs.services
|
|
import qs.modules.quicksettings
|
|
|
|
Item {
|
|
id: root
|
|
|
|
property int maxHeight: 420
|
|
|
|
implicitHeight: Notifs.hasNotifications ? list.implicitHeight : empty.implicitHeight
|
|
|
|
// Which app groups are collapsed, keyed by app name. Kept here rather than
|
|
// on the group itself because Notifs.groups is rebuilt from scratch on
|
|
// every change to history, which destroys and recreates the delegates.
|
|
property var collapsedApps: ({})
|
|
|
|
function toggleApp(app: string): void {
|
|
// Reassigned rather than mutated: a property holding a JS object only
|
|
// re-evaluates bindings when the reference itself changes.
|
|
const next = Object.assign({}, root.collapsedApps);
|
|
if (next[app])
|
|
delete next[app];
|
|
else
|
|
next[app] = true;
|
|
root.collapsedApps = next;
|
|
}
|
|
|
|
// Called when the panel closes, so it always reopens fully expanded.
|
|
function reset(): void {
|
|
root.collapsedApps = ({});
|
|
}
|
|
|
|
Item {
|
|
id: empty
|
|
anchors.fill: parent
|
|
implicitHeight: 132
|
|
visible: !Notifs.hasNotifications
|
|
|
|
Text {
|
|
anchors.centerIn: parent
|
|
text: Notifs.doNotDisturb ? "Do Not Disturb is on" : "No notifications"
|
|
color: Theme.fgMuted
|
|
font.family: Theme.fontFamily
|
|
font.pixelSize: Theme.fontSize
|
|
}
|
|
}
|
|
|
|
ScrollColumn {
|
|
id: list
|
|
anchors.fill: parent
|
|
maxHeight: root.maxHeight
|
|
spacing: Theme.itemSpacing
|
|
visible: Notifs.hasNotifications
|
|
|
|
Repeater {
|
|
model: Notifs.groups
|
|
|
|
NotificationGroup {
|
|
required property var modelData
|
|
|
|
width: list.width
|
|
group: modelData
|
|
expanded: !root.collapsedApps[modelData.app]
|
|
onToggled: root.toggleApp(modelData.app)
|
|
onCleared: Notifs.dismissApp(modelData.app)
|
|
}
|
|
}
|
|
}
|
|
}
|