Warning, /utilities/kweather/src/qml/WeatherHourDelegate.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Han Young <hanyoung@protonmail.com>
0003  * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 
0008 import QtQuick
0009 import QtQuick.Controls
0010 import QtQuick.Layouts
0011 import QtQuick.Shapes
0012 import org.kde.kirigami as Kirigami
0013 import org.kde.kweather
0014 
0015 Rectangle {
0016     implicitWidth: Kirigami.Units.gridUnit * 5
0017     implicitHeight: hourElement.height
0018     color: "transparent"
0019 
0020     property var weather
0021     property color textColor
0022     property color secondaryTextColor
0023     property alias mouseArea: mouse
0024 
0025     MouseArea {
0026         id: mouse
0027         anchors.fill: parent
0028     }
0029 
0030     // actual hour display
0031     ColumnLayout {
0032         id: hourElement
0033         anchors.left: parent.left
0034         anchors.right: parent.right
0035         anchors.leftMargin: Kirigami.Units.largeSpacing
0036         anchors.rightMargin: Kirigami.Units.largeSpacing
0037         spacing: Kirigami.Units.smallSpacing
0038 
0039         Kirigami.Icon {
0040             source: weather.weatherIcon
0041             Layout.preferredHeight: Kirigami.Units.iconSizes.medium
0042             Layout.preferredWidth: Kirigami.Units.iconSizes.medium
0043         }
0044         Label {
0045             Layout.fillWidth: true
0046             text: Formatter.formatTemperature(weather.temperature, settingsModel.temperatureUnits)
0047             font.pointSize: Kirigami.Theme.defaultFont.pointSize * 1.3
0048             color: textColor
0049             elide: Text.ElideRight
0050         }
0051         Item {
0052             Layout.fillWidth: true
0053             implicitHeight: descriptionTextMetrics.implicitHeight
0054 
0055             Label {
0056                 anchors.top: parent.top
0057                 anchors.left: parent.left
0058                 anchors.right: parent.right
0059                 text: weather.weatherDescription
0060                 color: textColor
0061                 wrapMode: Text.Wrap
0062                 elide: Text.ElideRight
0063                 maximumLineCount: 2
0064             }
0065 
0066             // ensure that the height of the reserved space for the labels is always two text lines
0067             Label {
0068                 id: descriptionTextMetrics
0069                 anchors.top: parent.top
0070                 anchors.left: parent.left
0071                 anchors.right: parent.right
0072                 visible: false
0073                 text: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
0074                 color: textColor
0075                 wrapMode: Text.Wrap
0076                 maximumLineCount: 2
0077             }
0078         }
0079 
0080         // precipitation
0081         RowLayout {
0082             Kirigami.Icon {
0083                 source: "raindrop"
0084                 Layout.preferredHeight: Kirigami.Units.iconSizes.small
0085                 Layout.preferredWidth: Kirigami.Units.iconSizes.small
0086                 color: settingsModel && settingsModel.forecastStyle === "Dynamic" ? weatherLocation.iconColor : Kirigami.Theme.textColor
0087                 isMask: true
0088             }
0089             Label {
0090                 color: secondaryTextColor
0091                 text: Formatter.formatPrecipitation(weather.precipitationAmount, settingsModel.precipitationUnits)
0092             }
0093         }
0094 
0095         // wind
0096         RowLayout {
0097             Kirigami.Icon {
0098                 source: "arrow-right"
0099                 Layout.preferredHeight: Kirigami.Units.iconSizes.small
0100                 Layout.preferredWidth: Kirigami.Units.iconSizes.small
0101                 color: settingsModel && settingsModel.forecastStyle === "Dynamic" ? weatherLocation.iconColor : Kirigami.Theme.textColor
0102                 isMask: true
0103             }
0104             Label {
0105                 color: secondaryTextColor
0106                 text: Formatter.formatWindSpeed(weather.windSpeed, settingsModel.speedUnits)
0107             }
0108         }
0109 
0110         Label {
0111             Layout.fillWidth: true
0112             font.weight: Font.Bold
0113             text: Formatter.formatHourlyCardDelegateTime(weather.date, weatherLocation.timeZone)
0114             color: textColor
0115             wrapMode: Text.Wrap
0116         }
0117     }
0118 }