Unity 8
Notifications.qml
1 /*
2  * Copyright (C) 2013 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  */
16 
17 import QtQuick 2.4
18 import Ubuntu.Components 1.3
19 import Unity.Notifications 1.0 as UnityNotifications
20 import Utils 0.1
21 import "../Components"
22 
23 ListView {
24  id: notificationList
25 
26  objectName: "notificationList"
27  interactive: false
28 
29  property real margin
30  property bool useModal: snapDecisionProxyModel.count > 0
31  property bool hasMouse
32  property url background: ""
33 
34  UnitySortFilterProxyModel {
35  id: snapDecisionProxyModel
36  objectName: "snapDecisionProxyModel"
37 
38  model: notificationList.model ? notificationList.model : null
39  filterRole: UnityNotifications.ModelInterface != undefined ? UnityNotifications.ModelInterface.RoleType : 0
40  filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
41  }
42 
43  property bool topmostIsFullscreen: false
44  spacing: topmostIsFullscreen ? 0 : units.gu(.5)
45 
46  currentIndex: count > 1 ? 1 : -1
47 
48  delegate: Notification {
49  objectName: "notification" + index
50  width: parent.width
51  type: model.type
52  hints: model.hints
53  iconSource: model.icon
54  secondaryIconSource: model.secondaryIcon
55  summary: model.summary
56  body: model.body
57  value: model.value ? model.value : -1
58  actions: model.actions
59  notificationId: model.id
60  notification: notificationList.model.getRaw(notificationId)
61  maxHeight: notificationList.height
62  margins: notificationList.margin
63  hasMouse: notificationList.hasMouse
64  background: notificationList.background
65 
66  // make sure there's no opacity-difference between the several
67  // elements in a notification
68  // FIXME: disabled all transitions because of LP: #1354406 workaround
69  //layer.enabled: add.running || remove.running || populate.running
70 
71  Component.onCompleted: {
72  if (index == 1) {
73  notificationList.topmostIsFullscreen = fullscreen
74  }
75  }
76 
77  onFullscreenChanged: {
78  // index 1 because 0 is the PlaceHolder...
79  if (index == 1) {
80  notificationList.topmostIsFullscreen = fullscreen
81  }
82  }
83  }
84 
85  // FIXME: disabled all transitions because of LP: #1354406 workaround
86  /*populate: Transition {
87  UbuntuNumberAnimation {
88  property: "opacity"
89  to: 1
90  duration: UbuntuAnimation.SnapDuration
91  }
92  }
93 
94  add: Transition {
95  UbuntuNumberAnimation {
96  property: "opacity"
97  to: 1
98  duration: UbuntuAnimation.SnapDuration
99  }
100  }
101 
102  remove: Transition {
103  UbuntuNumberAnimation {
104  property: "opacity"
105  to: 0
106  }
107  }
108 
109  displaced: Transition {
110  UbuntuNumberAnimation {
111  properties: "x,y"
112  duration: UbuntuAnimation.SnapDuration
113  }
114  }*/
115 }