on e586ed5 help sign in
unity8/qml/Notifications/Notifications.qml
125 lines 3.8 kB history raw
1/*
2 * Copyright (C) 2013-2016 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17import QtQuick 2.4
18import Ubuntu.Components 1.3
19import Unity.Notifications 1.0 as UnityNotifications
20import Utils 0.1
21import "../Components"
23ListView {
24 id: notificationList
26 objectName: "notificationList"
27 interactive: false
29 property real margin
30 property bool hasMouse
31 property url background: ""
33 readonly property bool useModal: snapDecisionProxyModel.count > 0
35 UnitySortFilterProxyModel {
36 id: snapDecisionProxyModel
37 objectName: "snapDecisionProxyModel"
39 model: notificationList.model ? notificationList.model : null
40 filterRole: UnityNotifications.ModelInterface != undefined ? UnityNotifications.ModelInterface.RoleType : 0
41 filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
42 }
44 readonly property bool topmostIsFullscreen: fullscreenIndex != -1
45 spacing: topmostIsFullscreen ? 0 : units.gu(1)
47 currentIndex: count > 1 ? 1 : -1
49 property int fullscreenIndex: -1
50 onFullscreenIndexChanged: {
51 if (fullscreenIndex != -1) {
52 positionViewAtIndex(fullscreenIndex, ListView.Beginning);
53 }
54 }
56 delegate: Notification {
57 objectName: "notification" + index
58 width: parent.width
59 type: model.type
60 hints: model.hints
61 iconSource: model.icon
62 secondaryIconSource: model.secondaryIcon ? model.secondaryIcon : ""
63 summary: model.summary
64 body: model.body
65 value: model.value ? model.value : -1
66 actions: model.actions
67 notificationId: model.id
68 notification: notificationList.model.getRaw(notificationId)
69 maxHeight: notificationList.height
70 margins: notificationList.margin
71 hasMouse: notificationList.hasMouse
72 background: notificationList.background
74 // make sure there's no opacity-difference between the several
75 // elements in a notification
76 // FIXME: disabled all transitions because of LP: #1354406 workaround
77 //layer.enabled: add.running || remove.running || populate.running
79 onFullscreenChanged: updateListTopMostIsFullscreen();
81 function updateListTopMostIsFullscreen() {
82 if (fullscreen) {
83 fullscreenIndex = index;
84 }
85 }
87 onDismissed: {
88 if (fullscreenIndex == index) {
89 fullscreenIndex = -1;
90 notificationList.positionViewAtBeginning();
91 }
92 }
93 }
95 // FIXME: disabled all transitions because of LP: #1354406 workaround
96 /*populate: Transition {
97 UbuntuNumberAnimation {
98 property: "opacity"
99 to: 1
100 duration: UbuntuAnimation.SnapDuration
101 }
102 }
104 add: Transition {
105 UbuntuNumberAnimation {
106 property: "opacity"
107 to: 1
108 duration: UbuntuAnimation.SnapDuration
109 }
110 }
112 remove: Transition {
113 UbuntuNumberAnimation {
114 property: "opacity"
115 to: 0
116 }
117 }
119 displaced: Transition {
120 UbuntuNumberAnimation {
121 properties: "x,y"
122 duration: UbuntuAnimation.SnapDuration
123 }
124 }*/