nosignal-shell/modules/lock/weather/Forecast.qml
Foxlike Creature 94ad40c5c5
fix: missing colon in 24h lock forecast time (#1520)
Co-authored-by: FoxlikeCreature <safonovkirill113@gmail.com>
2026-06-08 13:06:46 +10:00

105 lines
3.4 KiB
QML

import QtQuick
import QtQuick.Layouts
import M3Shapes
import Caelestia
import Caelestia.Config
import qs.components
import qs.services
StyledRect {
id: root
color: Colours.layer(Colours.palette.m3surfaceContainerHigh, 2)
radius: Tokens.rounding.extraLargeIncreased
implicitHeight: header.anchors.margins + header.implicitHeight + Tokens.spacing.medium + layout.implicitHeight + layout.anchors.bottomMargin
RowLayout {
id: header
anchors.left: parent.left
anchors.top: parent.top
anchors.margins: Tokens.padding.largeIncreased
spacing: Tokens.spacing.small
MaterialIcon {
Layout.topMargin: Math.round(fontInfo.pointSize * 0.12)
text: "schedule"
fontStyle: Tokens.font.icon.builders.medium.weight(title.font.weight).build()
}
StyledText {
id: title
text: qsTr("Hourly forecast")
font: Tokens.font.title.medium
}
}
RowLayout {
id: layout
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.bottomMargin: Tokens.padding.largeIncreased
anchors.margins: Tokens.padding.large
spacing: Tokens.spacing.small
Repeater {
model: CUtils.clamp(Math.floor((layout.width + layout.spacing) / (Tokens.sizes.lock.forecastItemWidth + layout.spacing)), 0, Weather.hourlyForecast.length)
ColumnLayout {
id: hour
required property int index
readonly property var cond: Weather.hourlyForecast[index]
Layout.fillWidth: true
spacing: Tokens.spacing.extraSmall
MaterialShape {
Layout.alignment: Qt.AlignHCenter
implicitSize: temp.implicitHeight + Tokens.padding.medium * 2
shape: MaterialShape.Cookie4Sided
color: Qt.alpha(Colours.palette.m3primary, hour.index === 0 ? 1 : 0)
Behavior on color {
CAnim {}
}
StyledText {
id: temp
anchors.centerIn: parent
text: Weather.formatTemp(hour.cond.tempC).slice(0, -1) // Remove C/F
color: hour.index === 0 ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface
font: Tokens.font.title.medium
}
}
MaterialIcon {
Layout.alignment: Qt.AlignHCenter
text: hour.cond.icon
color: Colours.palette.m3secondary
fontStyle: Tokens.font.icon.large
}
StyledText {
Layout.alignment: Qt.AlignHCenter
text: hour.cond.precipChance + "%"
color: Colours.palette.m3primary
}
StyledText {
Layout.topMargin: Tokens.spacing.extraSmall
Layout.alignment: Qt.AlignHCenter
text: hour.index === 0 ? qsTr("Now") : Qt.formatDateTime(new Date(hour.cond.timestamp.replace("T", " ")), GlobalConfig.services.useTwelveHourClock ? "ha" : "hh:00")
color: Colours.palette.m3onSurfaceVariant
font: Tokens.font.body.medium
}
}
}
}
}