mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-08-02 17:54:45 +00:00
notification area
This commit is contained in:
parent
fa6bbc2b13
commit
cdc16de1ea
2 changed files with 187 additions and 11 deletions
|
|
@ -3,12 +3,11 @@ import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
color: "#00000000"
|
color: "#00000000"
|
||||||
height: units.gridUnit * 2
|
height: units.gridUnit * 2
|
||||||
anchors {
|
width: parent.width
|
||||||
bottomMargin: units.smallSpacing
|
anchors.bottomMargin: 10
|
||||||
topMargin: units.smallSpacing
|
|
||||||
}
|
|
||||||
|
|
||||||
property var textGradient: Gradient {
|
property var textGradient: Gradient {
|
||||||
GradientStop { position: 1.0; color: "#FF00000C" }
|
GradientStop { position: 1.0; color: "#FF00000C" }
|
||||||
|
|
@ -55,7 +54,7 @@ Rectangle {
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
id: summary
|
id: summaryArea
|
||||||
width: parent.width - icon.width - rounded.width - (units.largeSpacing * 2)
|
width: parent.width - icon.width - rounded.width - (units.largeSpacing * 2)
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
|
||||||
|
|
@ -75,7 +74,13 @@ Rectangle {
|
||||||
horizontalAlignment: Qt.AlignLeft
|
horizontalAlignment: Qt.AlignLeft
|
||||||
verticalAlignment: Qt.AlignVCenter
|
verticalAlignment: Qt.AlignVCenter
|
||||||
color: "white"
|
color: "white"
|
||||||
text: "Hoo ha!"
|
text: summary
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
MouseArea {
|
||||||
|
anchors.fill: parent
|
||||||
|
drag.axis: Drag.YAxis
|
||||||
|
drag.target: parent
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,19 +1,190 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2014 Aaron Seigo <aseigo@kde.org>
|
||||||
|
* Copyright 2012 Marco Martin <notmart@gmail.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Library General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Library General Public License for more details
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
import QtQuick 2.0
|
import QtQuick 2.0
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||||
import org.kde.plasma.shell 2.0 as Shell
|
import org.kde.plasma.shell 2.0 as Shell
|
||||||
import "../components"
|
import "../components"
|
||||||
|
|
||||||
Rectangle {
|
Item {
|
||||||
id: homescreen
|
id: homescreen
|
||||||
width: 1080
|
width: 1080
|
||||||
height: 1920
|
height: 1920
|
||||||
|
|
||||||
property Item containment;
|
property Item containment;
|
||||||
property Item wallpaper;
|
property Item wallpaper;
|
||||||
|
property var pendingRemovals: [];
|
||||||
|
property int notificationId: 0;
|
||||||
|
Timer {
|
||||||
|
id: pendingTimer
|
||||||
|
interval: 5000
|
||||||
|
repeat: false
|
||||||
|
onTriggered: {
|
||||||
|
for (var i = 0; i < pendingRemovals.length; ++i) {
|
||||||
|
var id = pendingRemovals[i];
|
||||||
|
for (var j = 0; j < notificationsModel.count; ++j) {
|
||||||
|
if (notificationsModel.get(j).id == id) {
|
||||||
|
notificationsModel.remove(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pendingRemovals = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onContainmentChanged: console.log(containment.pluginName)
|
/*
|
||||||
onWallpaperChanged: {
|
Notificadtion data object has the following properties:
|
||||||
console.log(wallpaper.pluginName + ' ' + wallpaper.opacity);
|
appIcon
|
||||||
|
image
|
||||||
|
appName
|
||||||
|
summary
|
||||||
|
body
|
||||||
|
isPersistent
|
||||||
|
expireTimeout
|
||||||
|
urgency
|
||||||
|
appRealName
|
||||||
|
configurable
|
||||||
|
*/
|
||||||
|
|
||||||
|
function addNotification(source, data, actions) {
|
||||||
|
// Do not show duplicated notifications
|
||||||
|
// Remove notifications that are sent again (odd, but true)
|
||||||
|
for (var i = 0; i < notificationsModel.count; ++i) {
|
||||||
|
var tmp = notificationsModel.get(i);
|
||||||
|
var matches = (tmp.appName == data.appName &&
|
||||||
|
tmp.summary == data.summary &&
|
||||||
|
tmp.body == data.body);
|
||||||
|
var sameSource = tmp.source == source;
|
||||||
|
|
||||||
|
if (sameSource && matches) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sameSource || matches) {
|
||||||
|
notificationsModel.remove(i)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data["id"] = ++notificationId;
|
||||||
|
data["source"] = source;
|
||||||
|
if (data["summary"].length < 1) {
|
||||||
|
data["summary"] = data["body"];
|
||||||
|
data["body"] = '';
|
||||||
|
}
|
||||||
|
data["actions"] = actions;
|
||||||
|
|
||||||
|
notificationsModel.insert(0, data);
|
||||||
|
if (!data["isPersistent"]) {
|
||||||
|
pendingRemovals.push(notificationId);
|
||||||
|
// pendingTimer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlasmaCore.DataSource {
|
||||||
|
id: notificationsSource
|
||||||
|
|
||||||
|
engine: "notifications"
|
||||||
|
interval: 0
|
||||||
|
|
||||||
|
onSourceAdded: {
|
||||||
|
connectSource(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
onSourceRemoved: {
|
||||||
|
for (var i = 0; i < notificationsModel.count; ++i) {
|
||||||
|
if (notificationsModel.get(i) == source) {
|
||||||
|
notificationsModel.remove(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onNewData: {
|
||||||
|
var _data = data; // Temp copy to avoid lots of context switching
|
||||||
|
var actions = new Array()
|
||||||
|
if (data["actions"] && data["actions"].length % 2 == 0) {
|
||||||
|
for (var i = 0; i < data["actions"].length; i += 2) {
|
||||||
|
var action = new Object();
|
||||||
|
action["id"] = data["actions"][i];
|
||||||
|
action["text"] = data["actions"][i+1];
|
||||||
|
actions.push(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
homescreen.addNotification(
|
||||||
|
sourceName,
|
||||||
|
_data,
|
||||||
|
actions);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: notificationsModel
|
||||||
|
}
|
||||||
|
|
||||||
|
ListView {
|
||||||
|
id: notificationView
|
||||||
|
spacing: units.smallSpacing
|
||||||
|
anchors {
|
||||||
|
top: parent.top
|
||||||
|
bottom: stripe.top
|
||||||
|
left: parent.left
|
||||||
|
right: parent.right
|
||||||
|
bottomMargin: units.smallSpacing
|
||||||
|
}
|
||||||
|
|
||||||
|
z: 1
|
||||||
|
clip: true
|
||||||
|
verticalLayoutDirection: ListView.BottomToTop
|
||||||
|
model: notificationsModel
|
||||||
|
add: Transition {
|
||||||
|
NumberAnimation {
|
||||||
|
properties: "x"
|
||||||
|
from: notificationView.width
|
||||||
|
duration: 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remove: Transition {
|
||||||
|
NumberAnimation {
|
||||||
|
properties: "x"
|
||||||
|
to: notificationView.width
|
||||||
|
duration: 500
|
||||||
|
}
|
||||||
|
NumberAnimation {
|
||||||
|
properties: "opacity"
|
||||||
|
to: 0
|
||||||
|
duration: 500
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
moveDisplaced: Transition {
|
||||||
|
SequentialAnimation {
|
||||||
|
PauseAnimation { duration: 600 }
|
||||||
|
NumberAnimation { properties: "x,y"; duration: 100 }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delegate: NotificationStripe {}
|
||||||
}
|
}
|
||||||
|
|
||||||
SatelliteStripe {
|
SatelliteStripe {
|
||||||
|
|
@ -36,4 +207,4 @@ Rectangle {
|
||||||
desktop.width = width;
|
desktop.width = width;
|
||||||
desktop.height = height;
|
desktop.height = height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue