Unity 8
Notifications.qml
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  */
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 hasMouse
31  property url background: ""
32 
33  readonly property bool useModal: snapDecisionProxyModel.count > 0
34 
35  UnitySortFilterProxyModel {
36  id: snapDecisionProxyModel
37  objectName: "snapDecisionProxyModel"
38 
39  model: notificationList.model ? notificationList.model : null
40  filterRole: UnityNotifications.ModelInterface != undefined ? UnityNotifications.ModelInterface.RoleType : 0
41  filterRegExp: RegExp(UnityNotifications.Notification.SnapDecision)
42  }
43 
44  readonly property bool topmostIsFullscreen: fullscreenIndex != -1
45  spacing: topmostIsFullscreen ? 0 : units.gu(1)
46 
47  currentIndex: count > 1 ? 1 : -1
48 
49  property int fullscreenIndex: -1
50  onFullscreenIndexChanged: {
51  if (fullscreenIndex != -1) {
52  positionViewAtIndex(fullscreenIndex, ListView.Beginning);
53  }
54  }
55 
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
73 
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
78 
79  onFullscreenChanged: updateListTopMostIsFullscreen();
80 
81  function updateListTopMostIsFullscreen() {
82  if (fullscreen) {
83  fullscreenIndex = index;
84  }
85  }
86 
87  onDismissed: {
88  if (fullscreenIndex == index) {
89  fullscreenIndex = -1;
90  notificationList.positionViewAtBeginning();
91  }
92  }
93  }
94 
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  }
103 
104  add: Transition {
105  UbuntuNumberAnimation {
106  property: "opacity"
107  to: 1
108  duration: UbuntuAnimation.SnapDuration
109  }
110  }
111 
112  remove: Transition {
113  UbuntuNumberAnimation {
114  property: "opacity"
115  to: 0
116  }
117  }
118 
119  displaced: Transition {
120  UbuntuNumberAnimation {
121  properties: "x,y"
122  duration: UbuntuAnimation.SnapDuration
123  }
124  }*/
125 }