C

Qt Quick Ultralite Thermostat Demo

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

Item {
    id: window
    width: Theme.screenWidth
    height: Theme.screenHeight

    function handleViewSwitched(selectedIndex : int) {
        bottomBar.selected = selectedIndex
        GlobalState.previousSelectedIndex = GlobalState.selectedIndex
        GlobalState.selectedIndex = selectedIndex
    }

    Image {
        id: topBarShadow
        source: "top-bar-shadow.png"
        anchors.top: topBar.bottom
    }

    Rectangle {
        id: centerBg
        color: "#F5F7F8"
        anchors.top: topBarShadow.bottom
        width: parent.width
        height: window.height - bottomBar.height - topBarShadow.height
    }

    TopBar {
        id: topBar
        width: parent.width
        height: Theme.topBarHeight
        z: 11

        showBackButton: !GlobalState.showMain
        title: GlobalState.selectedRoom.name

        onBackClicked: {
            GlobalState.showMain = true
        }
        onSettingsClicked: {
            languageDialog.show()
        }
    }

    Item {
        id: mainItem
        width: parent.width
        anchors.top: topBar.bottom
        height: parent.height - topBar.height - bottomBar.height

        Loader {
            id: mainView
            anchors.fill: parent
            source: "../../PlacesView.qml"

            Connections {
                target: GlobalState
                function onShowMainChanged(showMain: bool) {
                    if (GlobalState.showMain) {
                        GlobalState.selectedIndex = 0
                        GlobalState.previousSelectedIndex = GlobalState.currentViewIndex
                        GlobalState.selectedRoom.tempChanger.running = true
                        mainItem.height = window.height - topBar.height - bottomBar.height
                    } else {
                        GlobalState.selectedIndex = 3
                        GlobalState.previousSelectedIndex = GlobalState.currentViewIndex
                        GlobalState.selectedRoom.tempChanger.running = false
                        mainItem.height = window.height - topBar.height
                    }
                }
                function onLoadNext() {
                    if (GlobalState.selectedIndex !== GlobalState.currentViewIndex) {
                        switch(GlobalState.selectedIndex) {
                            case 1:
                                GlobalState.scheduleViewLoaded = false
                                mainView.source = "../../ScheduleView.qml"
                                break;
                            case 2:
                                mainView.source = "../../StatsView.qml"
                                break;
                            case 3:
                                mainView.source = "../../RoomView.qml"
                                break;
                            default:
                                GlobalState.placesLoaded = false
                                mainView.source = "../../PlacesView.qml"
                        }

                        GlobalState.currentViewIndex = GlobalState.selectedIndex
                    }
                }
            }
        }
    }

    BottomBar {
        id:bottomBar
        z: 10 // give precedence to bottom bar touch areas
        width: parent.width
        height: Theme.bottomBarHeight
        anchors.bottom: parent.bottom
        property int shift: !GlobalState.showMain ? -height : 0
        visible: shift > -height
        Behavior on shift { NumberAnimation { } }
        anchors.bottomMargin: shift
        onViewSwitched: handleViewSwitched(index)
    }

    LanguageDialog {
        id: languageDialog
        anchors.fill: parent
        z: 11
    }

    Component.onCompleted: {
        if(Qt.uiLanguage == "") {
            Qt.uiLanguage = "en_GB"
        }
    }
}