summaryrefslogtreecommitdiffstats
path: root/kweather/weather_icon.cpp
diff options
context:
space:
mode:
authorMavridis Philippe <[email protected]>2023-06-01 16:30:11 +0300
committerMavridis Philippe <[email protected]>2023-06-14 17:42:21 +0300
commitfe6de6f4bc8a0a7d86c2c3dc6413170214206cff (patch)
treed86bbc14c9c16c52b9d2b5b750de15ece38c7c5a /kweather/weather_icon.cpp
parent6b56a1befc9f510d4467cd5652cbb8fb49563070 (diff)
downloadtdetoys-fe6de6f4bc8a0a7d86c2c3dc6413170214206cff.tar.gz
tdetoys-fe6de6f4bc8a0a7d86c2c3dc6413170214206cff.zip
KWeather: improve icon loading and other fixes
- Fix pixelated icons (issue #19) - Fix "network offline" state - Add helper `bool weatherDataAvailable(TQString stationID)` DCOP function - Fix compatibility with old DCOP function signatures - Prevent double "Network is offline" strings in weather data. This commit introduces some new and renamed DCOP calls. Old function signatures are kept for compatibility, but are mraked as deprecated. Signed-off-by: Mavridis Philippe <[email protected]> (cherry picked from commit bc71670331e16b15fc30214cb85c409b8c91bb9c)
Diffstat (limited to 'kweather/weather_icon.cpp')
-rw-r--r--kweather/weather_icon.cpp125
1 files changed, 54 insertions, 71 deletions
diff --git a/kweather/weather_icon.cpp b/kweather/weather_icon.cpp
index 59f55da..bce9073 100644
--- a/kweather/weather_icon.cpp
+++ b/kweather/weather_icon.cpp
@@ -36,59 +36,67 @@ bool WeatherIconPrivate::usingIconTheme()
return m_useIconTheme;
}
-TQPair<TQString,TQString> WeatherIconPrivate::findIcon( TQStringList fallback )
+/** Returns the name of the best matching icon, either from the icon theme or the KWeather icons */
+struct WeatherSingleIconData WeatherIconPrivate::findIcon(TQStringList fallback, uint size)
{
+ struct WeatherSingleIconData iconData;
+
kdDebug(12006) << "[findIcon] Use icon theme? " << m_useIconTheme << endl;
- if( m_useIconTheme )
+ if (m_useIconTheme)
{
// Check in theme
- for ( TQStringList::Iterator icon = fallback.begin(); icon != fallback.end(); ++icon )
+ for (TQStringList::Iterator icon = fallback.begin(); icon != fallback.end(); ++icon)
{
kdDebug(12006) << "[findIcon] Searching for `" << *icon << "` in theme" << endl;
- TQString iPath = iconPath(*icon, true);
- if( !( iPath.isNull() ) )
+ TQString iPath = iconPath(*icon, size, true);
+ if (!iPath.isNull())
{
kdDebug(12006) << "[findIcon] Found `" << *icon << "` in theme: " << iPath << endl;
- return qMakePair(*icon, iPath);
+ iconData = { *icon, iPath, true, size };
+ return iconData;
}
}
}
// Check in kweather fallback
- for ( TQStringList::Iterator icon = fallback.begin(); icon != fallback.end(); ++icon )
+ for (TQStringList::Iterator icon = fallback.begin(); icon != fallback.end(); ++icon)
{
kdDebug(12006) << "[findIcon] Searching for `" << *icon << "` in kweather icons" << endl;
- TQString iPath = iconPath(*icon, false);
- if( !( iPath.isNull() ) )
+ TQString iPath = iconPath(*icon, size, false);
+ if (!iPath.isEmpty())
{
kdDebug(12006) << "[findIcon] Found `" << *icon << "` in kweather icons: " << iPath << endl;
- return qMakePair(*icon, iPath);
+ iconData = { *icon, iPath, false, size };
+ return iconData;
}
}
- return qMakePair(WeatherIcon::unknown(), iconPath(WeatherIcon::unknown()));
+
+ return WeatherIcon::unknown(size);
}
-TQString WeatherIconPrivate::iconPath( TQString icon, bool inTheme )
+TQString WeatherIconPrivate::iconPath( TQString icon, uint size, bool inTheme )
{
- if( inTheme )
- {
- return iconLoader->iconPath(icon, TDEIcon::Desktop, true);
+ TQString path = TQString::null;
+ if (inTheme) {
+ path = iconLoader->iconPath(icon, size, true);
+ if (path.isEmpty()) {
+ // maybe there is a scalable icon?
+ path = iconLoader->iconPath(icon, 0, true);
+ }
}
- else
- {
- return locate( "data", "kweather/" + icon + ".png" );
+ else {
+ path = locate( "data", "kweather/" + icon + ".png" );
}
+ return path;
}
-TQString WeatherIconPrivate::iconPath( TQString icon )
+TQString WeatherIconPrivate::iconPath( TQString icon, uint size )
{
- return iconPath(icon, m_useIconTheme);
+ return iconPath(icon, size, m_useIconTheme);
}
WeatherIcon::WeatherIcon( int condition, bool night )
{
- TQStringList fallback;
-
switch( condition )
{
case Sunny:
@@ -98,7 +106,6 @@ WeatherIcon::WeatherIcon( int condition, bool night )
fallback << "weather-clear-night"; //xdg, kweather
}
fallback << "weather-clear"; // xdg, kweather
-
break;
}
@@ -109,7 +116,6 @@ WeatherIcon::WeatherIcon( int condition, bool night )
fallback << "weather-fog-night"; // themes, kweather
}
fallback << "weather-fog"; // xdg, kweather
-
break;
}
@@ -126,14 +132,12 @@ WeatherIcon::WeatherIcon( int condition, bool night )
fallback << "weather-fog-night"; // themes, kweather
}
fallback << "weather-fog"; // xdg, kweather
-
break;
}
case Overcast:
{
fallback << "weather-overcast"; // xdg, kweather
-
break;
}
@@ -142,14 +146,12 @@ WeatherIcon::WeatherIcon( int condition, bool night )
fallback << "weather-hail"; // themes
fallback << "weather-freezing-rain"; // themes, kweather
fallback << "weather-snow"; // xdg, kweather
-
break;
}
case LightRain:
{
fallback << "weather-showers-scattered"; // xdg, kweather
-
break;
}
@@ -157,21 +159,13 @@ WeatherIcon::WeatherIcon( int condition, bool night )
{
fallback << "weather-snow-rain"; // themes, kweather
fallback << "weather-snow"; // xdg, kweather
-
break;
}
}
-
- TQPair<TQString,TQString> foundIcon = WeatherIconPrivate::instance()->findIcon(fallback);
- iconName = foundIcon.first;
- iconPath = foundIcon.second;
- return;
}
WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
{
- TQStringList fallback;
-
switch ( condition )
{
case Cloudy:
@@ -185,7 +179,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-few-clouds-night"; // xdg, kweather
}
fallback << "weather-few-clouds"; // xdg, kweather
-
break;
}
@@ -202,7 +195,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-few-clouds-night"; // xdg, kweather
}
fallback << "weather-few-clouds"; // xdg, kweather
-
break;
}
@@ -218,7 +210,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-few-clouds-night"; // xdg, kweather
}
fallback << "weather-few-clouds"; // xdg, kweather
-
break;
}
@@ -229,30 +220,23 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-ample-clouds-night"; // kweather
}
fallback << "weather-ample-clouds"; // kweather
-
fallback << "weather-many-clouds"; // themes, kweather
-
fallback << "weather-overcast"; // xdg, kweather
-
break;
}
case 5: {
fallback << "weather-many-clouds"; // themes, kweather
-
fallback << "weather-overcast"; // xdg, kweather
-
break;
}
default: {
fallback << "weather-clouds"; // themes, kweather
-
fallback << "weather-few-clouds"; // xdg, kweather
break;
}
}
-
break;
}
@@ -270,9 +254,7 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
{
fallback << "weather-showers-scattered-day"; // themes, kweather
}
-
fallback << "weather-showers-scattered"; // xdg, kweather
-
break;
}
@@ -286,9 +268,7 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
{
fallback << "weather-showers-day"; // themes, kweather
}
-
fallback << "weather-showers"; // xdg, kweather
-
break;
}
@@ -296,7 +276,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
default:
{
fallback << "weather-showers"; // xdg, kweather
-
break;
}
}
@@ -320,9 +299,7 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
}
fallback << "weather-snow-scattered"; // xdg, kweather
-
fallback << "weather-snow"; // workaround for some themes
-
break;
}
case 2:
@@ -348,9 +325,7 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
}
fallback << "weather-snow-scattered"; // xdg, kweather
-
fallback << "weather-snow"; // workaround for some themes
-
break;
}
@@ -364,21 +339,15 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
{
fallback << "weather-snow-ample-day"; // kweather
}
-
fallback << "weather-snow-ample"; // kweather
-
-
fallback << "weather-snow"; // xdg, kweather
-
break;
}
case 4:
{
fallback << "weather-snow-scattered"; // xdg, kweather
-
fallback << "weather-snow"; // workaround for some themes
-
break;
}
@@ -386,7 +355,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
default:
{
fallback << "weather-snow"; // xdg, kweather
-
break;
}
}
@@ -408,7 +376,6 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-storm-day"; // themes, kweather
}
fallback << "weather-storm"; // xdg, kweather
-
break;
}
@@ -433,28 +400,44 @@ WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength )
fallback << "weather-storm-day"; // themes, kweather
}
fallback << "weather-storm"; // xdg, kweather
-
break;
}
case 3:
default:
{
fallback << "weather-storm"; // xdg, kweather
-
break;
}
}
-
break;
}
+}
- TQPair<TQString,TQString> foundIcon = WeatherIconPrivate::instance()->findIcon(fallback);
- iconName = foundIcon.first;
- iconPath = foundIcon.second;
- return;
+// Unknown weather conditions
+WeatherIcon::WeatherIcon() {
+ fallback << "weather-none-available";
}
WeatherIcon::~WeatherIcon()
{
- iconName = TQString::null;
+}
+
+struct WeatherSingleIconData WeatherIcon::iconData(uint size) {
+ return WeatherIconPrivate::instance()->findIcon(fallback, size);
+}
+
+struct WeatherSingleIconData WeatherIcon::unknown(uint size) {
+ WeatherIcon *unknown = new WeatherIcon();
+ struct WeatherSingleIconData unknownData = unknown->iconData(size);
+ delete unknown;
+ return unknownData;
+}
+
+// convenience functions
+TQString WeatherIcon::name(uint size) {
+ return iconData(size).name;
+}
+
+TQString WeatherIcon::path(uint size) {
+ return iconData(size).path;
} \ No newline at end of file