diff options
Diffstat (limited to 'homescreen/qml/SystemUI.qml')
-rw-r--r-- | homescreen/qml/SystemUI.qml | 258 |
1 files changed, 258 insertions, 0 deletions
diff --git a/homescreen/qml/SystemUI.qml b/homescreen/qml/SystemUI.qml new file mode 100644 index 0000000..1e1c6be --- /dev/null +++ b/homescreen/qml/SystemUI.qml @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import QtQuick 2.2 +import QtQuick.Window 2.1 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.1 +import QtWayland.Compositor 1.0 +import HomeScreen 1.0 +import QtGraphicalEffects 1.0 + +Window { + id: root + visible: true + flags: Qt.FramelessWindowHint + width: container.width * container.scale + height: container.height * container.scale + title: 'HomeScreen' + property alias applicationStack: applicationStack + + property var app2item: new Object + property string appLaunching + + Component { + id: chrome + ShellSurfaceItem { + onSurfaceDestroyed: destroy() + } + } + + function show(shellSurface) { + var a2i = root.app2item + var item = chrome.createObject(root, {"shellSurface": shellSurface}) + a2i[appLaunching] = item + root.app2item = a2i + shellSurface.sendConfigure(Qt.size(applicationStack.width, applicationStack.height), WlShellSurface.NoneEdge) + if (applicationStack.depth == 1) { + applicationStack.push(item) + } else { + applicationStack.replace(item) + } + appLaunching = '' + } + + ApplicationLauncher { + id: launcher + + function show(app) { + if (current === app) return + if (app.length > 0) { + if (root.appLaunching.length > 0) + return + if (app2item[app]) { + if (applicationStack.depth == 1) { + applicationStack.push(app2item[app]) + } else { + applicationStack.replace(app2item[app]) + } + current = app + } else { + root.appLaunching = app + if (launch(app) < 0) { + root.appLaunching = '' + } + } + } else if (applicationStack.depth > 1) { + applicationStack.pop() + current = '' + } + } + } + + Component { + id: home + Home { + width: parent.width + height: parent.height + } + } + + Transition { + id: inTransition + NumberAnimation { + properties: "opacity, scale" + from: 0 + to:1 + duration: 250 + } + } + Transition { + id: outTransition + NumberAnimation { + properties: "opacity" + from: 1 + to:0 + duration: 250 + } + NumberAnimation { + properties: "scale" + from: 1 + to:5 + duration: 250 + } + } + + Image { + id: container + anchors.centerIn: parent + width: 1080 + height: 1920 + rotation: 270 + source: './images/AGL_HMI_Background_NoCar-01.png' + + ColumnLayout { + anchors.fill: parent + spacing: 0 + TopArea { + id: topArea + Layout.fillWidth: true + Layout.preferredHeight: 218 + } + + Item { + id: applicationArea + Layout.fillWidth: true + Layout.fillHeight: true + Layout.preferredHeight: 1920 - 218 - 215 + clip: true + StackView { + id: applicationStack + anchors.fill: parent + initialItem: home + + pushEnter: inTransition + pushExit: outTransition + replaceEnter: inTransition + replaceExit: outTransition + popEnter: inTransition + popExit: outTransition + } + } + + MediaArea { + id: mediaArea + Layout.fillWidth: true + Layout.fillHeight: true + Layout.preferredHeight: 215 + MouseArea { + z: 100 + anchors.fill: parent + onClicked: { + notificationLayer.shown = true + } + } + } + } + } + + MouseArea { + id: notificationLayer + property bool shown: false + anchors.fill: container + scale: container.scale + visible: opacity > 0 + opacity: 0 + rotation: 270 + z: 100 + + onClicked: shown = false + + Rectangle { + anchors.fill: parent + color: 'black' + opacity: 0.75 + } + + states: [ + State { + name: "notify" + when: notificationLayer.shown + PropertyChanges { + target: notificationLayer + opacity: 1.0 + } + PropertyChanges { + target: timer + running: true + } + } + ] + + transitions: [ + Transition { + NumberAnimation { + properties: 'opacity' + duration: 250 + easing.type: Easing.OutExpo + } + } + ] + + Column { + anchors.centerIn: parent + spacing: 20 + Rectangle { + width: 600 + height: 250 + radius: 20 + color: 'white' + + Label { + anchors.centerIn: parent + text: "Message 1" + font.pixelSize: 96 + color: 'blue' + antialiasing: true + } + } + Rectangle { + width: 600 + height: 250 + radius: 20 + color: 'white' + + Label { + anchors.centerIn: parent + text: "Restart" + font.pixelSize: 96 + color: 'red' + antialiasing: true + MouseArea { + anchors.fill: parent + onClicked: Qt.quit() + } + } + } + Timer { + id: timer + interval: 3000 + onTriggered: notificationLayer.shown = false + } + } + } +} |