C
Qt Quick Ultralite Thermostat Demo
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
import QtQuick 2.15
import QtQuick.Templates 2.15
import QtQuickUltralite.Extras 2.0
import Thermo 1.0
Item {
id: root
Connections {
target: GlobalState
function onSelectedRoomChanged(selectedRoom: Room) {
tempSliderAnimations.enabled = GlobalState.scheduleViewLoaded;
timeSlider.roomSwitched();
tempSlider.value = GlobalState.selectedRoom.temperature;
}
}
Column {
id: columnItem
anchors.fill: parent
spacing: Theme.sliderSpacing
y: Theme.roomScheduleTopMargin
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.sliderLabelSpacing
width: Theme.sliderWidth
StaticText {
anchors.left: parent.left
anchors.right: parent.right
color: "#3c94eb"
font.pixelSize: Theme.sliderLabelFontSize
//% "Set interval time"
text: qsTrId("id-setintervaltime")
}
TimeIntervalSlider {
id: timeSlider
height: sliderContainer.height
width: Theme.sliderWidth
}
}
Column {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.sliderLabelSpacing
width: Theme.sliderWidth
StaticText {
id: tempText
anchors.left: parent.left
anchors.right: parent.right
color: "#3c94eb"
font.pixelSize: Theme.sliderLabelFontSize
//% "Set temperature"
text: qsTrId("id-settemperature")
}
Item {
id: sliderContainer
height: tempSlider.handle.height + tempSlider.topPadding + tempSlider.bottomPadding
Slider {
id: tempSlider
anchors.verticalCenter: parent.verticalCenter
from: Units.fahrenheitToTemperatureUnit(50)
height: sliderContainer.height + 20 // to improve touchability
implicitWidth: Theme.sliderWidth
stepSize: 1
to: Units.fahrenheitToTemperatureUnit(90)
value: GlobalState.selectedRoom.temperature
background: Image {
anchors.verticalCenter: parent.verticalCenter
source: "scrollbar-temperature-track.png"
}
handle: Item {
height: Theme.sliderHandleSize
width: Theme.sliderHandleSize
x: tempSlider.leftPadding + tempSlider.visualPosition * (tempSlider.availableWidth - width)
y: (tempSlider.height - height) / 2
Behavior on x {
id: tempSliderAnimations
enabled: GlobalState.scheduleViewLoaded
NumberAnimation {
onRunningChanged: {
if (!running) {
tempSliderAnimations.enabled = false;
}
}
}
}
Image {
anchors.centerIn: parent
anchors.verticalCenterOffset: 6 // account for shadow
source: "slider-handle.png"
}
Row {
anchors.bottom: parent.top
anchors.bottomMargin: 4
anchors.horizontalCenter: parent.horizontalCenter
spacing: 2
Text {
color: "#3d464d"
font.pixelSize: Theme.sliderHandleLabelFontSize
text: tempSlider.value.toString()
}
StaticText {
color: "#3d464d"
font.pixelSize: Theme.sliderHandleLabelFontSize
text: Units.temperatureSymbol
}
}
}
onMoved: GlobalState.selectedRoom.temperature = value
}
}
}
}
}