diff --git a/imports/shared/service/notification/NotificationInterface.qml b/imports/shared/service/notification/NotificationInterface.qml new file mode 100644 index 0000000..e8fd2e8 --- /dev/null +++ b/imports/shared/service/notification/NotificationInterface.qml @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite licenses may use +** this file in accordance with the commercial license agreement provided +** with the Software or, alternatively, in accordance with the terms +** contained in a written agreement between you and The Qt Company. For +** licensing terms and conditions see https://www.qt.io/terms-conditions. +** For further information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import QtApplicationManager 1.0 + +Notification { + timeout: 10000 +} diff --git a/imports/shared/service/notification/qmldir b/imports/shared/service/notification/qmldir new file mode 100644 index 0000000..4c1b488 --- /dev/null +++ b/imports/shared/service/notification/qmldir @@ -0,0 +1 @@ +NotificationInterface 1.0 NotificationInterface.qml diff --git a/imports/system/models/NotificationModel.qml b/imports/system/models/NotificationModel.qml new file mode 100644 index 0000000..77033ce --- /dev/null +++ b/imports/system/models/NotificationModel.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite licenses may use +** this file in accordance with the commercial license agreement provided +** with the Software or, alternatively, in accordance with the terms +** contained in a written agreement between you and The Qt Company. For +** licensing terms and conditions see https://www.qt.io/terms-conditions. +** For further information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.0 + +import utils 1.0 +import QtApplicationManager 1.0 + +QtObject { + id: root + + readonly property int maxNotifications: 20 + + property bool notificationVisible: false + + property int notificationIndex: -1 + + property string title + property string description + + property var buttonModel: [] + + property Connections notificationManagerConnection: Connections { + target: NotificationManager + + onNotificationAdded: { + console.log("::: Notification received :::", id) + addNotification() + } + + onNotificationChanged: { + console.log("::: Notification changed :::", id) + updateNotification(id) + } + + onNotificationAboutToBeRemoved: { + console.log("::: Notification closing :::", id) + closeNotification() + } + } + + function addNotification() { + var notification = NotificationManager.get(NotificationManager.count - 1) + var notificationId = notification.id + var actions = [] + for (var i in notification.actions) { + actions.push(i) + } + root.buttonModel = actions + root.notificationIndex = notificationId + root.title = notification.summary + root.description = notification.body + root.notificationVisible = true + } + + function updateNotification(index) { + var notification = NotificationManager.notification(index) + root.notificationIndex = notification.id + root.title = notification.summary + root.description = notification.body + var actions = [] + for (var i in notification.actions) { + actions.push(i) + } + root.buttonModel = actions + root.notificationVisible = true + } + + function closeNotification() { + root.title = root.description = "" + root.buttonModel = [] + root.notificationIndex = -1 + root.notificationVisible = false + } + + function removeNotification() { + NotificationManager.dismissNotification(root.notificationIndex) + closeNotification() + } + + function buttonClicked(index) { + NotificationManager.triggerNotificationAction(root.notificationIndex, root.buttonModel[index]) + closeNotification() + } + +} + diff --git a/imports/system/models/qmldir b/imports/system/models/qmldir index e947d97..8c1c1ed 100644 --- a/imports/system/models/qmldir +++ b/imports/system/models/qmldir @@ -1 +1,2 @@ singleton ApplicationManagerInterface 1.0 ApplicationManagerInterface.qml +singleton NotificationModel 1.0 NotificationModel.qml diff --git a/sysui/Display.qml b/sysui/Display.qml index 2b3b8e1..ae60c3a 100644 --- a/sysui/Display.qml +++ b/sysui/Display.qml @@ -141,6 +141,12 @@ Item { } } + NotificationContainer { + id: notificationContainer + + anchors.centerIn: parent + } + Loader { id: keyboardLoader anchors.left: parent.left diff --git a/sysui/NotificationContainer.qml b/sysui/NotificationContainer.qml new file mode 100644 index 0000000..903852a --- /dev/null +++ b/sysui/NotificationContainer.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Pelagicore AG +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Neptune IVI UI. +** +** $QT_BEGIN_LICENSE:GPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite licenses may use +** this file in accordance with the commercial license agreement provided +** with the Software or, alternatively, in accordance with the terms +** contained in a written agreement between you and The Qt Company. For +** licensing terms and conditions see https://www.qt.io/terms-conditions. +** For further information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: GPL-3.0 +** +****************************************************************************/ + +import QtQuick 2.0 +import utils 1.0 +import controls 1.0 +import models 1.0 + +UIElement { + id: root + + hspan: 8 + vspan: 6 + + visible: opacity > 0 + + scale: NotificationModel.notificationVisible ? 1 : 0 + Behavior on scale { NumberAnimation { duration: 200 } } + + opacity: NotificationModel.notificationVisible ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 200 } } + + Rectangle { + anchors.fill: parent + color: '#000' + opacity: 0.85 + } + + Label { + id: title + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + text: NotificationModel.title + } + + Label { + id: body + + width: parent.width + anchors.bottom: buttonsRow.top + anchors.top: title.bottom + anchors.topMargin: 10 + font.pixelSize: Style.fontSizeM + text: NotificationModel.description + horizontalAlignment: Text.AlignHCenter + } + + Row { + id: buttonsRow + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + spacing: 2 + + Repeater { + id: buttonModel + + property int buttonWidth: model ? root.width / model.length : 0 + + model: NotificationModel.buttonModel + + delegate: Button { + width: buttonModel.buttonWidth + text: modelData + onClicked: NotificationModel.buttonClicked(index) + } + } + } + +} diff --git a/sysui/Settings/FunctionsPage.qml b/sysui/Settings/FunctionsPage.qml index 013e476..9538adb 100644 --- a/sysui/Settings/FunctionsPage.qml +++ b/sysui/Settings/FunctionsPage.qml @@ -36,6 +36,7 @@ import QtGraphicalEffects 1.0 import controls 1.0 import utils 1.0 import service.settings 1.0 +import service.notification 1.0 UIPage { id: root @@ -45,6 +46,12 @@ UIPage { title: qsTr('Car Settings') symbolName: "settings" + NotificationInterface { + id: notificationInterface + actions: ["OK"] + summary: "Car Settings" + } + GridView { id: view @@ -118,7 +125,11 @@ UIPage { MouseArea { anchors.fill: parent - onClicked: active = !active + onClicked: { + active = !active + notificationInterface.body = model.description + (active ? " activated" : " deactivated") + notificationInterface.show() + } } } }