C

Qt Quick Ultralite Automotive Cluster Demo

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
pragma Singleton
import QtQuick 2.15

QtObject {
    id: navimodel

    enum ArrowType { ArrowNone, ArrowForward, ArrowRight, ArrowSharpRight, ArrowRound }

    property int distanceToNextManoeuver
    property int filteredDistanceToNextManoeuver
    onDistanceToNextManoeuverChanged: {
        filteredDistanceToNextManoeuver = Math.max(Units.metersToShortDistanceUnit(distanceToNextManoeuver), 1)
        if (distanceToNextManoeuver <= 50) {
            filteredDistanceToNextManoeuver = Math.ceil(filteredDistanceToNextManoeuver/10) * 10
        } else {
            filteredDistanceToNextManoeuver = Math.ceil(filteredDistanceToNextManoeuver/50) * 50
        }
    }

    property int arrowType: NaviModel.ArrowNone
    property string instruction: ""
    property string street: ""

    property int _lastStreetIndex: -1

    function getArrowSource() : image {
        switch (arrowType) {
            case NaviModel.ArrowRight:      return "images/arrow-45.png";
            case NaviModel.ArrowSharpRight: return "images/arrow-90.png";
            case NaviModel.ArrowRound:      return "images/arrow-round.png";
            default:                        return "images/arrow-0.png";
        }
    }

    function updateInstruction() {
        switch (arrowType) {
            case NaviModel.ArrowRight:      instruction = "Turn right onto"; break;
            case NaviModel.ArrowSharpRight: instruction = "Turn sharp right onto"; break;
            case NaviModel.ArrowRound:      instruction = "At the roundabout,\n  go straight ahead"; break;
            default:                        instruction = "Continue straight"; break;
        }
    }

    signal triggerInstruction(NaviModel.ArrowType nextArrowIndex)
    onTriggerInstruction: {
        arrowType = nextArrowIndex
        street = Region.streetNames[Math.random() * Region.namesCount]
        updateInstruction()
    }
}