diff options
author | Mavridis Philippe <[email protected]> | 2023-06-01 16:30:11 +0300 |
---|---|---|
committer | Mavridis Philippe <[email protected]> | 2023-06-14 17:42:21 +0300 |
commit | fe6de6f4bc8a0a7d86c2c3dc6413170214206cff (patch) | |
tree | d86bbc14c9c16c52b9d2b5b750de15ece38c7c5a /kweather/weather_icon.cpp | |
parent | 6b56a1befc9f510d4467cd5652cbb8fb49563070 (diff) | |
download | tdetoys-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.cpp | 125 |
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 |