C
Qt Cluster: Rendering and Recovery from Main UI Failure
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
// This file is part of the Qt Safe Renderer module
import QtQuick
import ClusterDemo
import "gauges"
import Qt.SafeRenderer
import ".."
Item {
width: 1920
height: 1080
property alias bottompanel: bottompanel
property alias bottomPanelY: bottompanel.y
property alias needleRotation: tachometer.speedometerNeedleRotation
property alias meterOpacity: dashboardEntity.meterOpacity
property alias speedometer: speedometer
property alias tachometer: tachometer
property alias speedText: speedText
property alias smallMeter: smallMeter
property alias turnIndicatorLeft: turnleft
property alias turnIndicatorRight: turnright
property alias iconCoolant: iconCoolant
property alias iconBattery: iconBattery
property alias iconFuel: iconFuel
property alias iconParkingBrake: iconParkingBrake
property alias iconLights: iconLights
property alias iconTyre: iconTyre
property alias iconLamp: iconLamp
property alias iconSeatbelt: iconSeatbelt
property alias safeText: safeText
DashboardBackground {
id: dashboardEntity
width: 1920
height: 720
anchors.verticalCenter: parent.verticalCenter
property real meterOpacity: 1.0
SmallMeter {
id: fuelMeter
anchors.rightMargin: -1.5
anchors.leftMargin: 1.5
anchors.bottomMargin: 4.5
anchors.top: batteryMeter.bottom
anchors.right: batteryMeter.left
anchors.bottom: batteryMeter.top
anchors.left: batteryMeter.right
value: ValueSource.fuelLevel
opacity: dashboardEntity.meterOpacity
}
SmallMeter {
id: batteryMeter
x: 1074
y: 42
width: 216
height: 216
anchors.topMargin: 42
anchors.rightMargin: 631.5
value: ValueSource.batteryLevel
opacity: dashboardEntity.meterOpacity
maxValueAngle: 317
minValueAngle: 225
maximumValue: 100
degreesPerValue: Math.abs(
(maxValueAngle - minValueAngle) / maximumValue)
rotationOffset: 135
direction: -1
}
Image {
source: "image://etc/gaugeCenterSmall.png"
anchors.centerIn: batteryMeter
width: 78
height: 78
}
ConsumptionMeter {
anchors.top: parent.top
anchors.topMargin: 364.5
anchors.rightMargin: 414
anchors.right: parent.right
opacity: dashboardEntity.meterOpacity
}
TemperatureMeter {
opacity: dashboardEntity.meterOpacity
}
SmallMeter {
id: smallMeter
x: 621
y: 42
width: 216
height: 216
anchors.top: parent.top
anchors.topMargin: 37.5
opacity: dashboardEntity.meterOpacity
value: ValueSource.rpm / 2000.
maxValueAngle: 270
minValueAngle: 0
maximumValue: 4.0
degreesPerValue: Math.abs(
(maxValueAngle - minValueAngle) / maximumValue)
}
Image {
source: "image://etc/gaugeCenterSmall.png"
anchors.centerIn: smallMeter
width: 78
height: 78
}
FpsMeter {
id: fpsMeter
anchors.rightMargin: 885
anchors.topMargin: 129
opacity: dashboardEntity.meterOpacity
}
Image {
source: "image://etc/gaugeCenterSmall.png"
anchors.centerIn: fpsMeter
width: 78
height: 78
}
BottomPanel {
id: bottompanel
y: 582
width: 1228
height: 138
anchors.horizontalCenter: parent.horizontalCenter
Row {
id: leftindicators
x: 307.5
y: 61.5
width: 270
height: 45
anchors.right: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.rightMargin: 48
anchors.bottomMargin: 33
spacing: 12
TurnLeft {
id: turnleft
width: 45
height: 45
}
SafePicture {
id: iconCoolant
objectName: "iconCoolant"
width: 45
height: 45
color: "blue"
source: "qrc:/iso-icons/iso_grs_7000_4_2426.dat"
fillColor: "#30303a"
}
SafePicture {
id: iconBattery
objectName: "iconBattery"
width: 45
height: 45
color: "#e41e25"
source: "qrc:/iso-icons/iso_grs_7000_4_0247.dat"
fillColor: "#363641"
}
SafePicture {
id: iconFuel
objectName: "iconFuel"
width: 45
height: 45
color: "#e41e25"
source: "qrc:/iso-icons/iso_grs_7000_4_0245.dat"
fillColor: "#3d3e4a"
}
SafePicture {
id: iconParkingBrake
objectName: "iconParkingBrake"
width: 45
height: 45
color: "#e41e25"
source: "qrc:/iso-icons/iso_grs_7000_4_0238.dat"
fillColor: "#474752"
}
}
Row {
id: rightindicators
y: 54
width: 270
height: 45
anchors.left: parent.horizontalCenter
anchors.leftMargin: 48
anchors.bottom: parent.bottom
anchors.bottomMargin: 33
spacing: 12
SafePicture {
id: iconLights
objectName: "iconLights"
width: 45
height: 45
source: "qrc:/iso-icons/iso_grs_7000_4_0456.dat"
color: "#5caa15"
fillColor: "#444450"
}
SafePicture {
id: iconTyre
objectName: "iconTyre"
width: 45
height: 45
color: "#face20"
fillColor: "#3a3a47"
source: "qrc:/iso-icons/iso_grs_7000_4_1434A.dat"
}
SafePicture {
id: iconLamp
objectName: "iconLamp"
width: 45
height: 45
source: "qrc:/iso-icons/iso_grs_7000_4_1555.dat"
color: "#face20"
fillColor: "#34343f"
}
SafePicture {
id: iconSeatbelt
objectName: "iconSeatbelt"
width: 45
height: 45
color: "#e41e25"
fillColor: "#30313a"
source: "qrc:/iso-icons/iso_grs_7000_4_0249.dat"
}
TurnRight {
id: turnright
width: 45
height: 45
}
}
}
LargeMeter {
id: speedometer
opacity: dashboardEntity.meterOpacity
actualValue: ValueSource.kph
x: 159
y: 105
width: 514.5
height: 514.5
}
LargeMeter {
id: tachometer
x: 1246.5
y: 102
width: 514.5
height: 514.5
opacity: dashboardEntity.meterOpacity
minValueAngle: 55
maxValueAngle: 255
minimumValue: 0
maximumValue: 8000
limitValue: 4000
}
SafeText {
id: speedText
x: 348
y: 480
height: 90
width: 150
font.pixelSize: 72
font.family: "Lato"
color: "lightGray"
text: "10"
runtimeEditable: true
horizontalAlignment: Text.AlignHCenter
opacity: dashboardEntity.meterOpacity
}
Text {
id: speedUnitText
anchors.top: speedText.bottom
font.pixelSize: 27
color: "lightGray"
text: "KM/H"
font.family: "Lato"
anchors.horizontalCenter: speedText.horizontalCenter
opacity: dashboardEntity.meterOpacity
}
Text {
id: textEco
anchors.horizontalCenterOffset: 1086
anchors.horizontalCenter: speedometer.horizontalCenter
text: tachometer.actualValue > 4000 ? "POWER" : "ECO"
anchors.verticalCenterOffset: 0
anchors.verticalCenter: tachometer.verticalCenter
font.pixelSize: 18
visible: false
color: tachometer.actualValue <= 4000 ? "white" : "red"
opacity: dashboardEntity.meterOpacity
}
SafeText {
id: safeText
objectName: "safeText"
color: "#face21"
text: "Error occurred. Recovering.."
font.family: "Lato"
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
x: 799.5
y: 415.5
width: 400
height: 102
font.pixelSize: 30
}
}
}