qtdeclarative/examples/quickcontrols/wearable/Wearable/WeatherPage.qml

331 lines
12 KiB
QML

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import WearableStyle
import "weather.js" as WeatherData
Item {
Flickable {
id: flick
anchors.fill:parent
anchors.margins: 15
anchors.topMargin: 40 + 15
contentWidth: width
contentHeight: column.height
Column {
id: column
spacing: 10
Item {
width: flick.contentWidth
height: 100
Row {
id: townName
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: parent.top
width: childrenRect.width
height: childrenRect.height
spacing: 10
Image {
id: sunIcon
source: (wDataCntr.weatherData
&& wDataCntr.weatherData.weather
&& wDataCntr.weatherData.weather[0]
&& wDataCntr.weatherData.weather[0].icon) ?
UIStyle.iconPath("weather-" + WeatherData.iconSelect(wDataCntr.weatherData.weather[0].icon)) : ""
width: 64
height: width
sourceSize.width: width
sourceSize.height: height
}
Text {
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.name) ?
wDataCntr.weatherData.name : ""
anchors.verticalCenter: sunIcon.verticalCenter
color: UIStyle.textColor
font: UIStyle.h1
}
}
Text {
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: townName.bottom
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.weather
&& wDataCntr.weatherData.weather[0]
&& wDataCntr.weatherData.weather[0].main) ?
wDataCntr.weatherData.weather[0].main : ""
color: UIStyle.textColor
font: UIStyle.h3
}
}
ListItem {
width: flick.contentWidth
height: 92
Image {
id: thermoimage
anchors.left: parent.left
anchors.top: parent.top
anchors.leftMargin: 20
anchors.topMargin: 17
source: UIStyle.iconPath("thermometer")
}
Text {
anchors.left: thermoimage.right
anchors.verticalCenter: thermoimage.verticalCenter
anchors.leftMargin: 5
text: qsTr("Temperature")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.right: parent.right
anchors.verticalCenter: thermoimage.verticalCenter
anchors.rightMargin: 20
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.main
&& wDataCntr.weatherData.main.temp) ?
WeatherData.formatTemp(wDataCntr.weatherData.main.temp) : ""
font: UIStyle.h3
color: UIStyle.textColor
}
Text {
id: maxtxt
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.leftMargin: 20
anchors.bottomMargin: 17
text: qsTr("Max")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.left: maxtxt.right
anchors.verticalCenter: maxtxt.verticalCenter
anchors.leftMargin: 10
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.main
&& wDataCntr.weatherData.main.temp_max) ?
WeatherData.formatTemp(wDataCntr.weatherData.main.temp_max) : ""
font: UIStyle.h3
color: UIStyle.textColor
}
Text {
id: mintxt
anchors.horizontalCenter: maxtxt.horizontalCenter
anchors.verticalCenter: maxtxt.verticalCenter
anchors.horizontalCenterOffset: parent.width / 2
text: qsTr("Min")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.left: mintxt.right
anchors.verticalCenter: mintxt.verticalCenter
anchors.leftMargin: 10
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.main
&& wDataCntr.weatherData.main.temp_min) ?
WeatherData.formatTemp(wDataCntr.weatherData.main.temp_min) : ""
font: UIStyle.h3
color: UIStyle.textColor
}
}
ListItem {
width: flick.contentWidth
height: 50
Image {
id: sunriseIcon
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 20
anchors.topMargin: 17
source: UIStyle.iconPath("sunrise")
}
Text {
id: sunriseText
anchors.left: sunriseIcon.right
anchors.verticalCenter: sunriseIcon.verticalCenter
anchors.leftMargin: 5
text: qsTr("Sunrise")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.left: sunriseText.right
anchors.verticalCenter: sunriseText.verticalCenter
anchors.leftMargin: 15
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.sys
&& wDataCntr.weatherData.sys.sunrise) ?
WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunrise) : ""
font: UIStyle.h3
color: UIStyle.textColor
}
Image {
id: sunsetIcon
anchors.right: sunsetText.left
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: 5
source: UIStyle.iconPath("sunset")
}
Text {
id: sunsetText
anchors.right: sunsetValue.left
anchors.verticalCenter: sunsetIcon.verticalCenter
anchors.rightMargin: 15
text: qsTr("Sunset")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
id: sunsetValue
anchors.right: parent.right
anchors.verticalCenter: sunsetText.verticalCenter
anchors.rightMargin: 20
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.sys
&& wDataCntr.weatherData.sys.sunset) ?
WeatherData.getTimeHMS(wDataCntr.weatherData.sys.sunset) : ""
font: UIStyle.h3
color: UIStyle.textColor
}
}
ListItem {
width: flick.contentWidth
height: 50
Image {
id: windIcon
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 20
anchors.topMargin: 17
source: UIStyle.iconPath("wind")
}
Text {
id: windText
anchors.left: windIcon.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 5
text: qsTr("Wind")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: 20
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.wind
&& wDataCntr.weatherData.wind.speed) ?
Math.round(wDataCntr.weatherData.wind.speed * 1.61) + " km/h" : ""
font: UIStyle.h3
color: UIStyle.textColor
}
}
ListItem {
width: flick.contentWidth
height: 50
Image {
id: humidityIcon
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 20
anchors.topMargin: 17
source: UIStyle.iconPath("drop")
}
Text {
id: humidityText
anchors.left: humidityIcon.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 5
text: qsTr("Humidity")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: 20
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.main
&& wDataCntr.weatherData.main.humidity) ?
wDataCntr.weatherData.main.humidity + " %" : ""
font: UIStyle.h3
color: UIStyle.textColor
}
}
ListItem {
width: flick.contentWidth
height: 50
Image {
id: pressureIcon
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 20
anchors.topMargin: 17
source: UIStyle.iconPath("pressure")
}
Text {
id: pressureText
anchors.left: pressureIcon.right
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 5
text: qsTr("HPA")
font: UIStyle.h4
color: UIStyle.textColor
}
Text {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: 20
text: (wDataCntr.weatherData
&& wDataCntr.weatherData.main
&& wDataCntr.weatherData.main.pressure) ?
Math.round(wDataCntr.weatherData.main.pressure) + " hpa" : ""
font: UIStyle.h3
color: UIStyle.textColor
}
}
}
}
QtObject {
id: wDataCntr
property var weatherData
}
Component.onCompleted: {
WeatherData.requestWeatherData(wDataCntr)
}
}