-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNotificationPopup.qml
143 lines (133 loc) · 3.32 KB
/
NotificationPopup.qml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import QtQuick 2.15
import QtQuick.Controls 2.15
Popup {
id: popup
// Component.onCompleted: open()
width: cantainerRect.width
height: cantainerRect.height
modal: false
focus: false
closePolicy: Popup.NoAutoClose
property bool canOpen: true
property string severity_p: ""
property string title_p: ""
property string message_p: ""
onCanOpenChanged: {
if (!canOpen)
popup.close()
}
Connections {
target: uiNotifier
function onNotificationInserted(severity, title, message, duration) {
if (!canOpen)
return
popup.severity_p = severity
popup.title_p = title
popup.message_p = message
timer.interval = duration
timer.restart()
popup.open()
indicatorRect.show()
}
}
onClosed: {
timer.stop()
}
Timer {
id: timer
repeat: false
onTriggered: popup.close()
}
Pane {
id: cantainerRect
anchors.centerIn: parent
Column {
width: Theme.dp(800)
spacing: Theme.tinyMarginSize
Row {
spacing: Theme.smallMarginSize
Icon {
anchors.verticalCenter: parent.verticalCenter
property string pseverity: popup.severity_p
source: getSource()
color: getColor()
width: Theme.dp(65)
height: Theme.dp(65)
function getSource() {
if (pseverity === "info")
return "qrc:/icons/info-black-48dp.svg"
if (pseverity === "warning")
return "qrc:/icons/warning-black-48dp.svg"
if (pseverity === "error")
return "qrc:/icons/error-black-48dp.svg"
return "qrc:/icons/help-black-48dp.svg"
}
function getColor() {
if (pseverity === "info")
return ui.color("grey-600")
if (pseverity === "warning")
return ui.color("yellow-700")
if (pseverity === "error")
return ui.color("red-700")
return ui.color("grey-700")
}
}
Text {
anchors.verticalCenter: parent.verticalCenter
font.pointSize: Theme.smallTextSize
text: popup.title_p
}
}
Text {
font.pointSize: Theme.smallTextSize
width: parent.width
color: ui.color("grey-700")
text: popup.message_p
font.family: "Roboto"
wrapMode: Text.WordWrap
elide: Text.ElideRight
}
}
}
Button {
anchors.right: parent.right
anchors.top: parent.top
anchors.rightMargin: -Theme.smallMarginSize
anchors.topMargin: -Theme.baseMarginSize
width: Theme.dp(100)
height: width
flat: true
icon.source: "qrc:/icons/clear-black-48dp.svg"
onClicked: popup.close()
}
Rectangle {
id: indicatorRect
anchors.fill: parent
color: ui.color("grey-400")
opacity: 0.0
visible: false
function show() {
visible = true
indicatorAnim.start()
}
SequentialAnimation {
id: indicatorAnim
loops: 3
onFinished: indicatorRect.visible = false
NumberAnimation {
target: indicatorRect
properties: "opacity"
duration: 100
from: 0.0
to: 0.5
}
NumberAnimation {
target: indicatorRect
duration: 100
properties: "opacity"
from: 0.5
to: 0.0
}
}
}
}