File indexing completed on 2024-05-19 05:55:48
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Han Young <hanyoung@protonmail.com> 0003 * SPDX-FileCopyrightText: 2020 Devin Lin <espidev@gmail.com> 0004 * SPDX-FileCopyrightText: 2021 Nicolas Fella <nicolas.fella@gmx.de> 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "temperaturechartdata.h" 0010 0011 #include <QDateTimeAxis> 0012 #include <QPointF> 0013 #include <QSplineSeries> 0014 #include <QValueAxis> 0015 0016 #include "global.h" 0017 0018 QVariantList TemperatureChartData::weatherData() const 0019 { 0020 return m_weatherData; 0021 } 0022 0023 void TemperatureChartData::setWeatherData(const QVariantList &weatherData) 0024 { 0025 m_weatherData = weatherData; 0026 Q_EMIT weatherDataChanged(); 0027 0028 updateData(); 0029 } 0030 0031 void TemperatureChartData::updateData() 0032 { 0033 if (!m_series) { 0034 return; 0035 } 0036 0037 m_series->clear(); 0038 0039 QList<QPointF> result; 0040 result.reserve(m_weatherData.size()); 0041 0042 double minTemp = std::numeric_limits<double>::max(); 0043 double maxTemp = std::numeric_limits<double>::min(); 0044 0045 for (const QVariant &dayVariant : std::as_const(m_weatherData)) { 0046 const auto day = dayVariant.value<KWeatherCore::DailyWeatherForecast>(); 0047 0048 const double dayMinTemp = KWeather::convertTemp(day.minTemp(), KWeatherSettings::self()->temperatureUnits()); 0049 const double dayMaxTemp = KWeather::convertTemp(day.maxTemp(), KWeatherSettings::self()->temperatureUnits()); 0050 0051 result.append(QPointF(day.date().startOfDay().toMSecsSinceEpoch(), dayMaxTemp)); 0052 minTemp = std::min<double>(dayMinTemp, minTemp); 0053 maxTemp = std::max<double>(dayMaxTemp, maxTemp); 0054 } 0055 0056 // make enough room for the curve 0057 m_maxTempLimit = maxTemp + 5; 0058 m_minTempLimit = minTemp - 5; 0059 0060 Q_EMIT maxTempLimitChanged(); 0061 Q_EMIT minTempLimitChanged(); 0062 0063 m_series->replace(result); 0064 0065 if (!m_weatherData.isEmpty()) { 0066 m_axisX->setRange(m_weatherData.first().value<KWeatherCore::DailyWeatherForecast>().date().startOfDay(), 0067 m_weatherData.last().value<KWeatherCore::DailyWeatherForecast>().date().startOfDay()); 0068 } 0069 } 0070 0071 void TemperatureChartData::initSeries(QAbstractSeries *series) 0072 { 0073 m_series = static_cast<QSplineSeries *>(series); 0074 updateData(); 0075 } 0076 0077 void TemperatureChartData::initAxes(QObject *axisX, QObject *axisY) 0078 { 0079 m_axisX = static_cast<QDateTimeAxis *>(axisX); 0080 m_axisY = static_cast<QValueAxis *>(axisY); 0081 } 0082 0083 double TemperatureChartData::maxTempLimit() const 0084 { 0085 return m_maxTempLimit; 0086 } 0087 double TemperatureChartData::minTempLimit() const 0088 { 0089 return m_minTempLimit; 0090 } 0091 0092 #include "moc_temperaturechartdata.cpp"