C

Qt Quick Ultralite Thermostat Demo

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

import QtQuick 2.15
import QtQuickUltralite.Extras 2.0
import Thermo 1.0

Rectangle  {
    id: topBar
    color: "white"

    property bool showBackButton: false
    property alias title: titleText.text

    signal backClicked
    signal settingsClicked

    Item {
        width: backImage.width + backImage.x * 2
        opacity: topBar.showBackButton ? 1 : 0
        Behavior on opacity { NumberAnimation{} }
        height: parent.height

        ColorizedImage {
            x: 14
            id: backImage
            color: "#c4c9cc"
            anchors.verticalCenter: parent.verticalCenter
            source: "baseline-arrow-back.png"
        }
    }

    MouseArea {
        enabled: topBar.showBackButton
        height: parent.height
        width: label.x + titleText.width
        onClicked: topBar.backClicked()
    }

    Item {
        id: label
        x: topBar.showBackButton ? (Theme.isBig ? 60 : 45) : (Theme.isBig ? 24 : 15)
        Behavior on x { NumberAnimation{} }
        height: parent.height
        Text {
            opacity: topBar.showBackButton ? 1 : 0
            Behavior on opacity { NumberAnimation{} }
            id: titleText
            anchors.verticalCenter: parent.verticalCenter
            font.pixelSize: Theme.topBarFontSize
            color: "#3d464d"
        }
    }

    ColorizedImage {
        id: buttonImage
        x: 14
        opacity: topBar.showBackButton ? 0 : 1
        visible: opacity > 0
        Behavior on opacity { NumberAnimation{} }
        color: ColorStyle.greyDark4
        anchors.verticalCenter: parent.verticalCenter
        source: "change-language.png"

        MouseArea {
            anchors { fill: parent; margins: -15; }
            onClicked: topBar.settingsClicked()
        }
    }

    ColorizedImage {
        id: qtLogo
        anchors.verticalCenter: parent.verticalCenter
        anchors.horizontalCenter: parent.horizontalCenter
        source: "qt-logo.png"
        color: ColorStyle.greyDark4
    }

    Row {
        height: parent.height
        anchors.right: parent.right
        anchors.rightMargin: Theme.isBig ? 20 : 15
        spacing: Theme.isBig ? 28 : 4

        WeatherStatus {
            anchors.verticalCenter: parent.verticalCenter
        }

        Row {
            height: parent.height
            Text {
                id: outTemp
                anchors.verticalCenter: parent.verticalCenter
                width: 20
                horizontalAlignment: Text.AlignRight
                font.pixelSize: Theme.topBarFontSize
                color: ColorStyle.greyDark4
                Timer {
                    running: GlobalState.weatherStatusTimerEnable
                    repeat: true
                    interval: 5000
                    onTriggered: {
                        if (Math.random() < 0.3) {
                            outTemp.text = Units.fahrenheitToTemperatureUnit(Math.random() * 99).toFixed(0)
                        }
                    }
                }
                Component.onCompleted: outTemp.text = Units.fahrenheitToTemperatureUnit(Math.random() * 99).toFixed(0)
            }
            Text {
                anchors.verticalCenter: parent.verticalCenter
                text: Units.temperatureSymbol
                font.pixelSize: Theme.topBarFontSize
                color: ColorStyle.greyDark4
            }
        }
    }
}