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