diff options
Diffstat (limited to 'doc/src/snippets/qtcluster/qml/ValueSource.qml')
-rw-r--r-- | doc/src/snippets/qtcluster/qml/ValueSource.qml | 436 |
1 files changed, 436 insertions, 0 deletions
diff --git a/doc/src/snippets/qtcluster/qml/ValueSource.qml b/doc/src/snippets/qtcluster/qml/ValueSource.qml new file mode 100644 index 000000000..a63446543 --- /dev/null +++ b/doc/src/snippets/qtcluster/qml/ValueSource.qml @@ -0,0 +1,436 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** 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$ +** +****************************************************************************/ + +pragma Singleton +import QtQuick 2.6 +// comment ifndef QTIVIVEHICLEFUNCTIONS +//import QtIVIVehicleFunctions 1.0 +import ClusterDemoData 1.0 + +Item { + id: valueSource + property real kph: 0 + property real consumeKW: 0 + property real maxConsumeKWValue: 90 + property real maxChargeKWValue: 40 + property real chargeKW: 0 + property real maxRange: 600 + property real range: (batteryLevel / 100) * maxRange + + property bool runningInDesigner: false + + property var consumption: [300, 600, 700, 800, 900, 700, 600, 300, 50, 50, -100, 50, -100, -150, + -200, 50, 150, 200, 300, 200, 300, 200, 500, 50, -100, -100, -150, -80, 50, 300, 600, 700, 800, + 600, 700, 300, 50, 50] + + property var turnSignal + property var currentDate: new Date() + //property string date: currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM") + //property string time: currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm") + property string date: currentDate.toLocaleDateString(Qt.locale("en_GB")) + property string time: currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm") + + ClusterData { + id: clusterDataSource + + onVehicleSpeedChanged: { + kph = vehicleSpeed + if (carId === 0 && !fastBootDemo) { + oldSpeed.shift() + oldSpeed.push(vehicleSpeed) + speedChanged() + } + } + property int notLeft: ~Qt.LeftArrow + property int notRight: ~Qt.RightArrow + onLeftTurnLightChanged: leftTurnLight ? turnSignal |= Qt.LeftArrow + : turnSignal &= notLeft + onRightTurnLightChanged: rightTurnLight ? turnSignal |= Qt.RightArrow + : turnSignal &= notRight + } + + // comment ifndef QTIVIVEHICLEFUNCTIONS + property real latitude: clusterDataSource.latitude + property real longitude: clusterDataSource.longitude + property real direction: clusterDataSource.direction + property bool lowBeam: clusterDataSource.headLight + property int carId: clusterDataSource.carId + property bool lightFailure: clusterDataSource.lightFailure + property bool flatTire: clusterDataSource.flatTire + + property bool frontLeftOpen: false + property bool frontRightOpen: false + property bool rearLeftDoorOpen: false + property bool rearRighDoorOpen: false + property bool hoodOpen: false + property bool trunkOpen: false + + property double batteryLevel: clusterDataSource.batteryPotential + property double fuelLevel: clusterDataSource.gasLevel + property int gear: clusterDataSource.gear + property bool parkingBrake: clusterDataSource.brake + // TODO: These two are hacks. View change messages might not come through CAN. + property bool viewChange: clusterDataSource.oilTemp + property bool rightViewChange: clusterDataSource.oilPressure + + // + // ENABLE FOR FAST BOOT DEMO (or otherwise with no CanController) + // + property bool fastBootDemo: true + + // TODO: Park light used for automatic demo mode for now + property bool automaticDemoMode: fastBootDemo ? true : clusterDataSource.parkLight + + // + // Speed animations for fast boot demo + // + Timer { + running: fastBootDemo + interval: 4000 + onTriggered: animation.start() + } + + Timer { + running: fastBootDemo + property bool turnLeft: true + repeat: true + interval: 5000 + onTriggered: { + turnLeft = !turnLeft + if (turnLeft) + turnSignal = Qt.LeftArrow + else + turnSignal = Qt.RightArrow + stopSignaling.start() + } + } + + Timer { + id: stopSignaling + running: false + interval: 2100 + onTriggered: turnSignal = Qt.NoArrow + } + + Behavior on fuelLevel { + enabled: fastBootDemo + PropertyAnimation { + duration: 18000 + } + } + + Behavior on batteryLevel { + enabled: fastBootDemo + PropertyAnimation { + duration: 18000 + } + } + + onFuelLevelChanged: { + if (fastBootDemo && fuelLevel <= 5) + fuelLevel = 100 + } + + onBatteryLevelChanged: { + if (fastBootDemo && batteryLevel <= 5) + batteryLevel = 100 + } + + SequentialAnimation { + id: animation + running: false + loops: Animation.Infinite + + ScriptAction { + script: { + gear = 0 + parkingBrake = true + consumeKW = 0 + chargeKW = 0 + } + } + PauseAnimation { duration: 2000 } + ScriptAction { + script: { + parkingBrake = false + gear = 1 + fuelLevel -= 10. + batteryLevel -= 10. + } + } + ParallelAnimation { + PropertyAnimation { + target: valueSource + property: "kph" + from: 0 + to: 150 + duration: 10000 + } + PropertyAnimation { + target: valueSource + property: "consumeKW" + from: 0 + to: 75 + duration: 10000 + } + } + ParallelAnimation { + PropertyAnimation { + target: valueSource + property: "kph" + from: 150 + to: 120 + duration: 500 + } + PropertyAnimation { + target: valueSource + property: "consumeKW" + from: 75 + to: 0 + duration: 100 + } + PropertyAnimation { + target: valueSource + property: "chargeKW" + from: 0 + to: 40 + duration: 500 + } + } + ParallelAnimation { + PropertyAnimation { + target: valueSource + property: "kph" + from: 120 + to: 200 + duration: 1500 + } + PropertyAnimation { + target: valueSource + property: "consumeKW" + from: 0 + to: 90 + duration: 1500 + } + PropertyAnimation { + target: valueSource + property: "chargeKW" + from: 40 + to: 0 + duration: 100 + } + } + ParallelAnimation { + PropertyAnimation { + target: valueSource + property: "kph" + from: 200 + to: 0 + duration: 6000 + } + PropertyAnimation { + target: valueSource + property: "consumeKW" + from: 90 + to: 0 + duration: 600 + } + PropertyAnimation { + target: valueSource + property: "chargeKW" + from: 0 + to: 40 + duration: 3000 + } + } + } + + property int simuRpm: fastBootDemo ? kph * 40 : kph * 150 + property double simuTemperature: fastBootDemo ? kph * .25 + 60. : kph * .5 + 50. + + // In normal Car UI mode only speed is animated based on gps data + // In automatic demo mode rpm, turbo, consumption and engine temperature are based on speed + property int rpm: automaticDemoMode ? simuRpm : clusterDataSource.rpm + property double engineTemperature: automaticDemoMode ? simuTemperature + : clusterDataSource.engineTemp + + property int totalDistance: 42300 + property int kmSinceCharge: 8 + property int avRangePerCharge: 425 + property int energyPerKm: 324 + + property real totalDistanceSince: 0. + + property string gearString: { + var g + if (gear === 0 || gear < -1) + return "N" + else if (gear === -1) + return "R" + else if (carId === 1) //sports car + return gear.toString() + else + return "D" + } + + Timer { + id: timeTimer + interval: 15000 + repeat: true + running: true + onTriggered: { + currentDate = new Date() + //date = currentDate.toLocaleDateString(Qt.locale("fi_FI"), "ddd d. MMM") + //time = currentDate.toLocaleTimeString(Qt.locale("fi_FI"), "hh:mm") + date = currentDate.toLocaleDateString(Qt.locale("en_GB")) + time = currentDate.toLocaleTimeString(Qt.locale("en_GB"), "hh:mm") + // Approximate total distance based on current speed + totalDistanceSince += kph / 240. // = km / 15 min + if (totalDistanceSince > 1.) { + var totalInt = Math.floor(totalDistanceSince) + totalDistance += totalInt + kmSinceCharge += totalInt + totalDistanceSince -= totalInt + } + } + } + + Timer { + id: backCutTimer + interval: 1000 + repeat: true + running: true + onTriggered: { + backCut = kph + } + } + + property real temperature: 0.6 + property alias musicTimer: musicTimer + property real backCut: 0 //For needle tail gradient + property real musicElapsed: 0 + + Timer { + id: musicTimer + interval: 2000 + running: false + repeat: true + onTriggered: { + if (musicElapsed < 100) + musicElapsed++ + else + musicElapsed = 0 + } + } + + Behavior on kph { + enabled: !fastBootDemo + PropertyAnimation { duration: 2000 } + } + + // + // For electric car KwGauge animation + // + property var oldSpeed: [0, 0, 0] + signal speedChanged + + SequentialAnimation { + id: reduceSpeedAnim + running: (carId === 0 && !fastBootDemo) + property alias chargeTo: charge.to + NumberAnimation { + target: valueSource + property: "consumeKW" + duration: 600 + to: 0 + } + NumberAnimation { + id: charge + target: valueSource + property: "chargeKW" + duration: 600 + } + } + + SequentialAnimation { + id: addSpeedAnim + running: (carId === 0 && !fastBootDemo) + property alias consumeTo: consume.to + NumberAnimation { + target: valueSource + property: "chargeKW" + duration: 600 + to: 0 + + } + NumberAnimation { + id: consume + target: valueSource + property: "consumeKW" + duration: 600 + } + } + + onSpeedChanged: { + var speedChange = oldSpeed[1] - oldSpeed[0] + if (speedChange > 2) { + //"adding speed" + var newKW = Math.min(maxConsumeKWValue * 0.8, 10 * speedChange) + addSpeedAnim.consumeTo = newKW + addSpeedAnim.restart() + } else if (speedChange < -2) { + //"reducing speed" + newKW = Math.min(maxChargeKWValue * 0.8, 2 * Math.abs(speedChange)) + reduceSpeedAnim.chargeTo = newKW + reduceSpeedAnim.restart() + } else if (Math.abs(speedChange) >= 0 && oldSpeed[1] !== 0) { + //Speed just about the same but still moving + addSpeedAnim.consumeTo = Math.min(maxConsumeKWValue * (kph / 100), + maxConsumeKWValue * 0.5) + addSpeedAnim.restart() + } + if (kph <= 0.1) { + addSpeedAnim.consumeTo = 0 + reduceSpeedAnim.chargeTo = 0 + addSpeedAnim.restart() + reduceSpeedAnim.restart() + } + } +} |