diff options
| author | Nippy <nippy@rp1.hu> | 2026-05-08 19:50:49 +0200 |
|---|---|---|
| committer | Nippy <nippy@rp1.hu> | 2026-05-08 19:50:49 +0200 |
| commit | 3462bcc46ecf74f576ea4397f16492c16bd75b10 (patch) | |
| tree | c5ab7aef4498647e057bda8d49c11e5f9dda74c9 /raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml | |
| parent | 56616f693b4f263cbf0d47da43b67424efa6022d (diff) | |
| download | RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.tar.gz RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.zip | |
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml b/raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml new file mode 100644 index 0000000..5c57b65 --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/Modules/DankDash/WeatherForecastCard.qml @@ -0,0 +1,206 @@ +import QtQuick +import qs.Common +import qs.Services +import qs.Widgets + +Rectangle { + id: root + radius: Theme.cornerRadius + + property var date: null + property var daily: true + property var forecastData: null + property var dense: false + + readonly property bool isCurrent: { + if (daily) { + date ? WeatherService.calendarDayDifference(new Date(), date) === 0 : false; + } else { + date ? WeatherService.calendarHourDifference(new Date(), date) === 0 : false; + } + } + + readonly property string dateText: { + if (daily) + return root.forecastData?.day ?? "--"; + if (!root.forecastData?.rawTime) + return root.forecastData?.time ?? "--"; + try { + const date = new Date(root.forecastData.rawTime); + const format = SettingsData.use24HourClock ? "HH:mm" : "h:mm AP"; + return date.toLocaleTimeString(Qt.locale(), format); + } catch (e) { + return root.forecastData?.time ?? "--"; + } + } + + readonly property var minTemp: WeatherService.formatTemp(root.forecastData?.tempMin) + readonly property var maxTemp: WeatherService.formatTemp(root.forecastData?.tempMax) + readonly property string minMaxTempText: (minTemp ?? "--") + "/" + (maxTemp ?? "--") + + readonly property var temp: WeatherService.formatTemp(root.forecastData?.temp) + readonly property string tempText: temp ?? "--" + + readonly property var feelsLikeTemp: WeatherService.formatTemp(root.forecastData?.feelsLike) + readonly property string feelsLikeText: feelsLikeTemp ?? "--" + + readonly property var humidity: WeatherService.formatPercent(root.forecastData?.humidity) + readonly property string humidityText: humidity ?? "--" + + readonly property var wind: { + SettingsData.windSpeedUnit; + SettingsData.useFahrenheit; + return WeatherService.formatSpeed(root.forecastData?.wind); + } + readonly property string windText: wind ?? "--" + + readonly property var pressure: { + SettingsData.useFahrenheit; + return WeatherService.formatPressure(root.forecastData?.pressure); + } + readonly property string pressureText: pressure ?? "--" + + readonly property var precipitation: root.forecastData?.precipitationProbability + readonly property string precipitationText: precipitation + "%" ?? "--" + + readonly property var visibility: WeatherService.formatVisibility(root.forecastData?.visibility) + readonly property string visibilityText: visibility ?? "--" + + readonly property var values: daily ? [] : [ + { + "name"// 'name': "Temperature", + : + // 'text': root.tempText, + // 'icon': "thermometer" + // }, { + // 'name': "Feels Like", + // 'text': root.feelsLikeText, + // 'icon': "thermostat" + // }, { + I18n.tr("Humidity"), + "text": root.humidityText, + "icon": "humidity_low" + }, + { + "name": I18n.tr("Wind Speed"), + "text": root.windText, + "icon": "air" + }, + { + "name": I18n.tr("Pressure"), + "text": root.pressureText, + "icon": "speed" + }, + { + "name": I18n.tr("Precipitation Chance"), + "text": root.precipitationText, + "icon": "rainy" + }, + { + "name": I18n.tr("Visibility"), + "text": root.visibilityText, + "icon": "wb_sunny" + } + ] + + color: isCurrent ? Theme.withAlpha(Theme.primary, 0.1) : Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency) + border.color: isCurrent ? Theme.withAlpha(Theme.primary, 0.3) : "transparent" + border.width: isCurrent ? 1 : 0 + + Column { + anchors.centerIn: parent + spacing: Theme.spacingXS + + StyledText { + text: root.forecastData != null ? root.dateText : I18n.tr("Forecast Not Available") + font.pixelSize: Theme.fontSizeSmall + color: root.isCurrent ? Theme.primary : (root.forecastData ? Theme.surfaceText : Theme.outline) + font.weight: root.isCurrent ? Font.Medium : Font.Normal + anchors.horizontalCenter: parent.horizontalCenter + } + + Row { + anchors.horizontalCenter: parent.horizontalCenter + spacing: Theme.spacingM + visible: root.forecastData != null + + Column { + spacing: Theme.spacingXS + + DankIcon { + name: root.forecastData ? WeatherService.getWeatherIcon(root.forecastData.wCode || 0, root.forecastData.isDay ?? true) : "cloud" + size: Theme.iconSize + color: root.isCurrent ? Theme.primary : Theme.withAlpha(Theme.primary, 0.8) + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + text: root.daily ? root.minMaxTempText : root.tempText + font.pixelSize: Theme.fontSizeSmall + color: root.isCurrent ? Theme.primary : Theme.surfaceText + font.weight: Font.Medium + anchors.horizontalCenter: parent.horizontalCenter + } + + StyledText { + text: root.feelsLikeText + font.pixelSize: Theme.fontSizeSmall + color: root.isCurrent ? Theme.primary : Theme.surfaceText + font.weight: Font.Medium + anchors.horizontalCenter: parent.horizontalCenter + visible: !root.daily + } + } + + Column { + id: detailsColumn + spacing: 2 + visible: !root.dense + width: implicitWidth + + states: [ + State { + name: "dense" + when: root.dense + PropertyChanges { + target: detailsColumn + opacity: 0 + width: 0 + } + } + ] + + transitions: [ + Transition { + NumberAnimation { + properties: "opacity,width" + duration: Theme.shortDuration + easing.type: Theme.standardEasing + } + } + ] + + Repeater { + model: root.values.length + Row { + spacing: 2 + + DankIcon { + name: root.values[index].icon + size: 8 + color: Theme.withAlpha(Theme.surfaceText, 0.6) + anchors.verticalCenter: parent.verticalCenter + } + + StyledText { + text: root.values[index].text + font.pixelSize: Theme.fontSizeSmall - 2 + color: Theme.withAlpha(Theme.surfaceText, 0.6) + anchors.verticalCenter: parent.verticalCenter + } + } + } + } + } + } +} |