aboutsummaryrefslogtreecommitdiffstats
path: root/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster')
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Cluster.qml104
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Dial.qml119
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Fuel.qml82
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Label.qml84
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/LeftDial.qml121
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/RightDial.qml228
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Top.qml131
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/app.qrc11
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/instrument-cluster.pro19
-rw-r--r--examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/main.cpp66
10 files changed, 965 insertions, 0 deletions
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Cluster.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Cluster.qml
new file mode 100644
index 0000000..3833d67
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Cluster.qml
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Window 2.2
+import Example.IVI.InstrumentCluster 1.0
+
+Window {
+ id: root
+
+ width: 1920
+ height: 720
+ title: qsTr("QtIVI Instrument Cluster Chapter 6")
+ visible: true
+ color: "#0c0c0c"
+
+ InstrumentCluster {
+ id: instrumentCluster
+ }
+
+ LeftDial {
+ id: leftDial
+ anchors.left: parent.left
+ anchors.leftMargin: 0.1 * width
+
+ value: instrumentCluster.speed
+ metricSystem: instrumentCluster.systemType === InstrumentCluster.Metric
+ }
+
+ RightDial {
+ id: rightDial
+ anchors.right: parent.right
+ anchors.rightMargin: 0.1 * width
+
+ value: instrumentCluster.rpm
+ warningColor: instrumentCluster.currentWarning.color
+ warningText: instrumentCluster.currentWarning.text
+ warningIcon: instrumentCluster.currentWarning.icon
+ fuelLevel: 1.0//instrumentCluster.fuel
+ }
+
+ Top {
+ id: topbar
+ y: 7
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ temperature: instrumentCluster.temperature
+ }
+
+ Image {
+ anchors.fill: parent
+ source: Qt.resolvedUrl("images/mask_overlay.png")
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Dial.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Dial.qml
new file mode 100644
index 0000000..a4b5c3f
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Dial.qml
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.12
+
+Item {
+ id: root
+
+ width: 480
+ height: 480
+
+ property real value: 0
+ property int upDuration: 2000
+ property int downDuration: 1000
+ property string fillImage: "images/dial_fill_color_left.png"
+ property string circleRadius: "0.193"
+ property string dialCursor: "images/dial_cursor.png"
+
+ Image {
+ id: meter
+ property real min: -83.5
+ property real max: 157
+ width: root.width
+ height: width - 1
+ rotation: min + (max - min) * root.value
+ source: Qt.resolvedUrl(root.dialCursor)
+ }
+
+ ShaderEffect {
+ anchors.fill: meter
+ property var pattern: Image {
+ source: Qt.resolvedUrl("images/dial_pattern.png")
+ }
+ property var fill: Image {
+ source: Qt.resolvedUrl(root.fillImage)
+ }
+ property real value: root.value
+
+ fragmentShader: "
+#define M_PI 3.141592653589793
+#define INNER " + root.circleRadius + "
+
+varying highp vec2 qt_TexCoord0;
+uniform lowp float qt_Opacity;
+uniform sampler2D pattern;
+uniform sampler2D fill;
+uniform lowp float value;
+
+void main() {
+ lowp vec4 pattern = texture2D(pattern, qt_TexCoord0);
+ lowp vec4 fill = texture2D(fill, qt_TexCoord0);
+
+ lowp vec2 pos = vec2(qt_TexCoord0.x - 0.5, 0.501 - qt_TexCoord0.y);
+ lowp float d = length(pos);
+ lowp float angle = atan(pos.x, pos.y) / (2.0 * M_PI);
+ lowp float v = 0.66 * value - 0.33;
+
+ // Flare pattern
+ lowp vec4 color = mix(pattern, vec4(0.0), smoothstep(v, v + 0.1, angle));
+ // Gradient fill color
+ color += mix(fill, vec4(0.0), step(v, angle));
+ // Punch out the center hole
+ color = mix(vec4(0.0), color, smoothstep(INNER - 0.001, INNER + 0.001, d));
+ // Fade out below 0
+ gl_FragColor = mix(color, vec4(0.0), smoothstep(-0.35, -0.5, angle));
+}
+ "
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Fuel.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Fuel.qml
new file mode 100644
index 0000000..46e9dee
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Fuel.qml
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+Item {
+ id: root
+
+ width: 0.73 * 720
+ height: width - 1
+
+ property real value: 0
+
+ Item {
+ width: root.value * parent.width
+ height: parent.height
+ clip: true
+ Image {
+ width: root.width
+ height: root.height
+ source: Qt.resolvedUrl("images/fuel_level.png")
+ }
+ }
+
+ Image {
+ id: fuel
+ anchors.fill: parent
+ source: Qt.resolvedUrl("images/fuel.png")
+
+ }
+}
+
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Label.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Label.qml
new file mode 100644
index 0000000..d574080
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Label.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+Item {
+ id: root
+
+ property alias textObject: textElement
+ property alias text: textElement.text
+ property alias font: textElement.font
+ property alias fontSize: textElement.font.pixelSize
+ property alias color: textElement.color
+ property alias textFormat: textElement.textFormat
+ property alias horizontalAlignment: textElement.horizontalAlignment
+ property alias elide: textElement.elide
+ property alias wrapMode: textElement.wrapMode
+ property alias verticalAlignment: textElement.verticalAlignment
+
+ Text {
+ id: textElement
+
+ anchors.fill: parent
+ anchors.margins: 8
+
+ verticalAlignment: Text.AlignVCenter
+
+ font.family: "Source Sans Pro"
+ font.pixelSize: 28
+ font.weight: Font.Light
+
+ color: "white"
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/LeftDial.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/LeftDial.qml
new file mode 100644
index 0000000..f57b8af
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/LeftDial.qml
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtGraphicalEffects 1.0
+
+Item {
+ id: root
+
+ width: 0.8 * 720
+ height: 720
+
+ property real value: 0.0
+ property bool metricSystem: false
+
+ Image {
+ id: overlay
+
+ width: 0.91 * root.width
+ height: 0.98 * width
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ anchors.verticalCenter: parent.verticalCenter
+ source: Qt.resolvedUrl("images/left_dial.png")
+ }
+
+ Text {
+ id: speedText
+
+ anchors.verticalCenter: overlay.verticalCenter
+ anchors.horizontalCenter: overlay.horizontalCenter
+ anchors.verticalCenterOffset: -7
+ anchors.horizontalCenterOffset: 5
+ font.family: "Source Sans Pro"
+ font.pixelSize: 60
+ font.letterSpacing: 4
+ color: "white"
+ text: root.value
+ }
+
+ Rectangle {
+ width: 60
+ height: 1
+ opacity: 0.4
+ anchors.top: speedText.bottom
+ anchors.topMargin: -8
+ anchors.horizontalCenter: overlay.horizontalCenter
+ anchors.horizontalCenterOffset: 2
+ }
+
+ Text {
+ id: mph
+ anchors.top: speedText.bottom
+ anchors.topMargin: -5
+ anchors.horizontalCenter: overlay.horizontalCenter
+ anchors.horizontalCenterOffset: 2
+ font.family: "Source Sans Pro"
+ font.pixelSize: 24
+ color: "white"
+ text: root.metricSystem ? "km/h" : "mph"
+ }
+
+ Dial {
+ width: 0.66 * root.height
+ height: width
+ anchors.centerIn: overlay
+ anchors.verticalCenterOffset: 2
+ fillImage: "images/dial_fill_color_left.png"
+ value: root.value / 240
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/RightDial.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/RightDial.qml
new file mode 100644
index 0000000..4c52a58
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/RightDial.qml
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+Item {
+ id: root
+
+ width: 0.8 * 720
+ height: 720
+
+ property color warningColor: "transparent"
+ property string warningIcon
+ property string warningText
+ property int value
+ property alias fuelLevel: fuelMeter.value
+
+ Item {
+ width: root.width/3
+ height: 0.1 * root.width
+ anchors.bottom: overlay.top
+ anchors.left: parent.left
+ anchors.leftMargin: 0.2 * root.width
+
+ Image {
+ id: gears
+
+ width: 0.2 * root.width
+ height: 0.25 * width
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ source: Qt.resolvedUrl("images/P-R-N-D.png")
+ }
+
+ Image {
+ id: plusMinus
+ anchors.bottom: parent.bottom
+ anchors.left: gears.right
+ anchors.leftMargin: 10
+ source: Qt.resolvedUrl("images/+--.png")
+ }
+ }
+
+ Image {
+ id: overlay
+
+ width: 0.91 * root.width
+ height: 0.99 * width
+
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ anchors.verticalCenter: parent.verticalCenter
+ source: Qt.resolvedUrl("images/right_dial.png")
+
+ Rectangle {
+ id: rect
+ width: circle.width + 5
+ height: width
+ radius: width
+ color: "transparent"
+ border.color: root.warningColor
+ border.width: rect.borderWidth
+ anchors.centerIn: parent
+ anchors.horizontalCenterOffset: -3
+
+ property int borderWidth: 3
+
+ SequentialAnimation {
+ running: root.warningColor != "transparent"
+ loops: Animation.Infinite
+ NumberAnimation {
+
+ target: rect
+ properties: "borderWidth"
+ from: 3
+ to: 7
+ duration: 500
+ }
+
+ NumberAnimation {
+
+ target: rect
+ properties: "borderWidth"
+ from: 7
+ to: 3
+ duration: 500
+ }
+
+ onStopped: rect.borderWidth = 3
+
+ }
+ }
+
+ Image {
+ id: circle
+
+ width: root.width/2
+ height: width
+ anchors.centerIn: parent
+ anchors.horizontalCenterOffset: -6
+ anchors.verticalCenterOffset: 0
+ source: Qt.resolvedUrl("images/middle-bkg.png")
+
+ Image {
+ id: circle_overlay
+
+ width: parent.width
+ height: parent.height
+ anchors.centerIn: parent
+ source: Qt.resolvedUrl("images/middle-circle.png")
+ }
+
+ Image {
+ id: fuelSymbol
+ width: 70
+ height: 70
+ anchors.top: parent.top
+ anchors.topMargin: 55
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.horizontalCenterOffset: 0
+ source: root.warningIcon
+ fillMode: Image.PreserveAspectFit
+
+ }
+
+ Item {
+ width: parent.width
+ height: parent.height/4
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: 40
+
+ Rectangle {
+ id: speedText
+ width: parent.width - 80
+ height: 40
+ radius: 20
+ anchors.horizontalCenter: parent.horizontalCenter
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: Qt.darker("grey", 1.5) }
+ GradientStop { position: 0.4; color: "#0c0c0c" }
+ }
+
+ Label {
+ width: parent.width
+ anchors.centerIn: parent
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: text.length > 10 ? 18 : 24
+ font.bold: true
+ text: root.warningText
+ elide: Text.ElideMiddle
+ }
+ }
+ }
+ }
+ }
+
+ Fuel {
+ id: fuelMeter
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 0.05 * root.height
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.horizontalCenterOffset: -20
+ }
+
+ Dial {
+ id: dial
+
+ width: 0.69 * root.height
+ height: width
+ anchors.centerIn: overlay
+ anchors.verticalCenterOffset: 0
+ anchors.horizontalCenterOffset: -5
+ fillImage: "images/dial_fill_color.png"
+ circleRadius: "0.29"
+ dialCursor: "images/dial_cursor_right.png"
+ value: root.value / 7000
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Top.qml b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Top.qml
new file mode 100644
index 0000000..b43ef9b
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/Top.qml
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+Item {
+ id: root
+ width: 0.37 * 1920
+ height: 0.12 * 720
+
+ property real temperature: 0
+
+ Image {
+ id: background
+ width: parent.width
+ height: parent.height
+ source: Qt.resolvedUrl("images/top_bar.png")
+ }
+
+ Label {
+ id: timeText
+ anchors.verticalCenter: background.verticalCenter
+ anchors.left: background.left
+ anchors.leftMargin: 0.2 * background.width
+
+ font.pixelSize: 0.42 * background.height
+ font.bold: true
+
+ text: Qt.formatTime(currentDate, "hh:mm")
+
+ property var currentDate: new Date();
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: {
+ timeText.currentDate = new Date();
+ }
+ }
+ }
+
+ Item {
+ id: navigator
+
+ width: 0.25 * background.width
+ height: background.height
+ anchors.verticalCenter: background.verticalCenter
+ anchors.horizontalCenter: background.horizontalCenter
+
+ Row {
+ id: row
+ property int radius: 7
+ anchors.centerIn: parent
+ anchors.verticalCenterOffset: -16
+ spacing: 8
+
+ Repeater {
+ model: 3
+ delegate: Rectangle {
+ height: row.radius * 2
+ width: row.radius * 2
+ radius: row.radius
+ color: 1 === index ? "white" : "#4d4d4d"
+ }
+ }
+ }
+ }
+
+ Label {
+ id: temperatureText
+ anchors.verticalCenter: background.verticalCenter
+ anchors.left: navigator.right
+ anchors.leftMargin: 15
+
+ font.pixelSize: 0.42 * background.height
+ font.bold: true
+
+ text: root.temperature + "°C"
+ }
+}
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/app.qrc b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/app.qrc
new file mode 100644
index 0000000..9794820
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/app.qrc
@@ -0,0 +1,11 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Cluster.qml</file>
+ <file>Top.qml</file>
+ <file>RightDial.qml</file>
+ <file>LeftDial.qml</file>
+ <file>Dial.qml</file>
+ <file>Fuel.qml</file>
+ <file>Label.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/instrument-cluster.pro b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/instrument-cluster.pro
new file mode 100644
index 0000000..5245ce9
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/instrument-cluster.pro
@@ -0,0 +1,19 @@
+TARGET = chapter6-own-backend
+DESTDIR = ..
+
+QT += qml quick
+CONFIG -= app_bundle
+
+SOURCES = main.cpp
+RESOURCES += app.qrc \
+ ../../images/images.qrc \
+
+LIBS += -L$$OUT_PWD/../ -l$$qtLibraryTarget(QtIviInstrumentCluster)
+INCLUDEPATH += $$OUT_PWD/../frontend
+QMAKE_RPATHDIR += $ORIGIN
+
+# Additional import path used to resolve QML modules in Qt Creator's code model
+QML_IMPORT_PATH = $$OUT_PWD/../frontend/qml
+
+target.path = $$[QT_INSTALL_EXAMPLES]/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster
+INSTALLS += target
diff --git a/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/main.cpp b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/main.cpp
new file mode 100644
index 0000000..57b00b6
--- /dev/null
+++ b/examples/ivicore/qface-tutorial/chapter6-own-backend/instrument-cluster/main.cpp
@@ -0,0 +1,66 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Luxoft Sweden AB
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtIvi module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD-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.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: BSD-3-Clause
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ engine.addImportPath(app.applicationDirPath() + "/imports");
+ engine.load(QUrl(QStringLiteral("qrc:///Cluster.qml")));
+
+ return app.exec();
+}