177 lines
5.2 KiB
QML
177 lines
5.2 KiB
QML
import Quickshell
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
|
|
PanelWindow {
|
|
id: root
|
|
anchors {
|
|
top: true
|
|
right: true
|
|
bottom: true
|
|
}
|
|
visible: false
|
|
exclusiveZone: 1
|
|
implicitWidth: 500
|
|
color: "transparent"
|
|
|
|
function open() {
|
|
root.visible = true;
|
|
}
|
|
function close() {
|
|
exitAnim.start();
|
|
}
|
|
function toggle() {
|
|
if (exitAnim.running) return;
|
|
if (root.visible) close();
|
|
else open();
|
|
}
|
|
|
|
required property var tracked
|
|
|
|
Rectangle {
|
|
color: "#222"
|
|
anchors.fill: parent
|
|
Text {
|
|
id: title
|
|
anchors {
|
|
left: parent.left
|
|
top: parent.top
|
|
leftMargin: 12
|
|
topMargin: 12
|
|
}
|
|
text: "Notifications"
|
|
font.pixelSize: 20
|
|
font.family: "Comfortaa"
|
|
font.bold: true
|
|
color: "white"
|
|
}
|
|
Button {
|
|
anchors {
|
|
top: parent.top
|
|
right: parent.right
|
|
}
|
|
width: clearAllText.width + 32
|
|
height: clearAllText.height + 30
|
|
Text {
|
|
id: clearAllText
|
|
anchors {
|
|
right: parent.right
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
topMargin: 14
|
|
rightMargin: 16
|
|
}
|
|
color: "white"
|
|
font.pixelSize: 16
|
|
font.family: "Comfortaa"
|
|
text: "Clear All"
|
|
}
|
|
onClicked: {while (root.tracked.values.length) {
|
|
root.tracked.values[0].tracked = false;
|
|
}}
|
|
property var hover: HoverHandler { }
|
|
background: Rectangle {
|
|
anchors {
|
|
fill: parent
|
|
topMargin: 6
|
|
leftMargin: 8
|
|
bottomMargin: 6
|
|
rightMargin: 8
|
|
}
|
|
radius: 12
|
|
color: parent.hover.hovered ? "#333" : "#222"
|
|
Behavior on color { PropertyAnimation {
|
|
duration: 150
|
|
}}
|
|
}
|
|
}
|
|
ListView {
|
|
anchors {
|
|
fill: parent
|
|
topMargin: 48
|
|
}
|
|
model: root.tracked
|
|
spacing: 10
|
|
delegate: Button {
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
margins: 12
|
|
}
|
|
height: notifContent.childrenRect.height + 32
|
|
Image {
|
|
id: notifIcon
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
left: parent.left
|
|
leftMargin: 12
|
|
}
|
|
width: 40
|
|
height: 40
|
|
source: Quickshell.iconPath(modelData.appIcon, true)
|
|
}
|
|
Column {
|
|
id: notifContent
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
top: parent.top
|
|
topMargin: 16
|
|
leftMargin: 16 + (notifIcon.source == "" ? 0 : 44)
|
|
rightMargin: 16
|
|
}
|
|
spacing: 6
|
|
Text {
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
color: "white"
|
|
font.family: "Comfortaa"
|
|
font.pixelSize: 16
|
|
text: modelData.summary
|
|
elide: Text.ElideRight
|
|
wrapMode: Text.Wrap
|
|
maximumLineCount: 2
|
|
}
|
|
Text {
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
color: "white"
|
|
font.family: "Comfortaa"
|
|
font.pixelSize: 12
|
|
text: modelData.body
|
|
elide: Text.ElideRight
|
|
wrapMode: Text.Wrap
|
|
maximumLineCount: 4
|
|
}
|
|
}
|
|
background: Rectangle {
|
|
color: "#333"
|
|
radius: 12
|
|
}
|
|
onClicked: modelData.tracked = false
|
|
}
|
|
}
|
|
transform: Translate {
|
|
NumberAnimation on x {
|
|
running: root.visible
|
|
from: root.implicitWidth
|
|
to: 0
|
|
duration: 300
|
|
easing.type: Easing.OutQuint
|
|
}
|
|
NumberAnimation on x {
|
|
id: exitAnim
|
|
to: root.implicitWidth
|
|
duration: 300
|
|
easing.type: Easing.InQuint
|
|
onFinished: root.visible = false
|
|
}
|
|
}
|
|
}
|
|
}
|