C

Qt Quick Ultralite Motorcycle Cluster Demo

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
import QtQuick 2.0
import QtQuickUltralite.Extras 2.0

ItemWithAcivationAnimations {
    id: root
    width: 800
    height: 480

    welcomeAnimationDuration: 500
    welcomeAnimationDelay: 500

    property bool isDayMode: true

    property color fontColor: isDayMode ? Style.black : Style.white
    property color fontColorPrime: !isDayMode ? Style.black : Style.white
    property color insideRoundRecColor: isDayMode ? Style.white : Style.backgroundBlue

    onActiveChanged: {
        if(active) {
            typingAnimation.start()
        }
    }

    InputTextField {
        id: inputText
        anchors.top: root.top
        anchors.topMargin: 30
        anchors.horizontalCenter: root.horizontalCenter
        text: "|"
        color: fontColor
    }

    ColorizedImage {
        id: homeButton
        source: "qrc:///images/keyboard/go-home-key.png"
        anchors.top: root.top
        anchors.topMargin: 110
        anchors.left: root.left
        anchors.leftMargin: 80
        color: fontColor
    }

    ColorizedImage {
        id: workButton
        source: "qrc:///images/keyboard/go-work-key.png"
        anchors.top: homeButton.top
        anchors.left: homeButton.right
        anchors.leftMargin: 18
        color: fontColor
    }

    TextInRoundedBox {
        id: target0

        opacity: 0
        anchors.left: workButton.horizontalCenter
        anchors.leftMargin: 38
        anchors.top: root.top
        anchors.topMargin: 84

        color: fontColor
        text:  "Supermarket 2 km"
        textColor: fontColor
        textColorPrime: fontColorPrime
        insideColor: insideRoundRecColor
        insideOpacity: 1
    }

    TextInRoundedBox {
        id: target1

        opacity: 0
        anchors.left: target0.left
        anchors.top: target0.bottom
        anchors.topMargin: 10

        color: fontColor
        text: "Grocery Store 42 km"
        textColor: fontColor
        textColorPrime: fontColorPrime
        insideColor: insideRoundRecColor
        insideOpacity: 1
    }

    Keyboard {
        id: keyboard
        anchors.bottom: root.bottom
        anchors.bottomMargin: 66
        isDayMode: root.isDayMode
    }

    ColorizedImage {
        id: hiddeButton
        source: "qrc:///images/keyboard/minimize-keyboard.png"
        anchors.bottom: root.bottom
        anchors.bottomMargin: 32
        anchors.horizontalCenter: parent.horizontalCenter
        color: fontColor
    }

    function resetView() {
        inputText.text = "|"
        target1.textColor = fontColor
        target1.insideOpacity = 1
        target0.opacity = 0
        target1.opacity = 0
    }

    readonly property int typingTimeMs: 300
    readonly property int restingTimeMs: 200
    SequentialAnimation {
        id: typingAnimation
        PauseAnimation { duration: typingTimeMs + welcomeAnimationDelay + welcomeAnimationDuration*2 }
        ScriptAction { script: { keyboard.setActiveKey("S"); inputText.text = "s|" } }
        PauseAnimation { duration: typingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("") } }
        PauseAnimation { duration: restingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("T"); inputText.text = "st|" } }
        PauseAnimation { duration: typingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("") } }
        PauseAnimation { duration: restingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("O"); inputText.text = "sto|" } }
        PauseAnimation { duration: typingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("") } }
        PauseAnimation { duration: restingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("R"); inputText.text = "stor|" } }
        PauseAnimation { duration: typingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("") } }
        PauseAnimation { duration: restingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey("E"); inputText.text = "store|" } }
        PauseAnimation { duration: restingTimeMs }
        ScriptAction { script: { keyboard.setActiveKey(""); target0.opacity = 1; target1.opacity = 1 } }
        PauseAnimation { duration: typingTimeMs*3 }
        ScriptAction { script: { target1.setActive() } }
    }
}