diff options
author | Mavridis Philippe <mavridisf@gmail.com> | 2021-11-13 14:17:53 +0200 |
---|---|---|
committer | Mavridis Philippe <mavridisf@gmail.com> | 2022-01-14 12:36:53 +0200 |
commit | 0e7033dd09c78eed673bfcde768483f6ad925ff7 (patch) | |
tree | a4f4484e6c154ff28c5d67697d6de976807fbf83 /kweather/weather_icon.cpp | |
parent | 5fea80f5693a74ee736300944c0c7204a663b92b (diff) | |
download | tdetoys-0e7033dd09c78eed673bfcde768483f6ad925ff7.tar.gz tdetoys-0e7033dd09c78eed673bfcde768483f6ad925ff7.zip |
KWeather: updated icon handling.
The newly added class abstracts away icon names from the main code
and has the ability to fall back to "safer" icon choices so as to
ensure (if possible) icon theme consistency.
Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
Diffstat (limited to 'kweather/weather_icon.cpp')
-rw-r--r-- | kweather/weather_icon.cpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/kweather/weather_icon.cpp b/kweather/weather_icon.cpp new file mode 100644 index 0000000..3c61213 --- /dev/null +++ b/kweather/weather_icon.cpp @@ -0,0 +1,171 @@ +#include <kiconloader.h> + +#include "weather_icon.h" + +WeatherIcon::WeatherIcon( int condition, bool night ) + : iconLoader() +{ + TQString name; + + switch( condition ) + { + + case Sunny: + { + name = "weather-clear"; + iconName = ( night ? name.append("-night") : name ); + return; + } + + case Fog: + { + name = "weather-fog"; + if( night && iconExists( TQString(name.latin1()).append("-night")) ) + { + name.append("-night"); + } + iconName = name; + return; + } + + case Mist: + { + name = "weather-mist"; + if( night && iconExists( TQString(name.latin1()).append("-night")) ) + { + name.append("-night"); + } + iconName = name; + return; + } + + case Overcast: { iconName = "weather-overcast"; return; } + case Hail: { iconName = "weather-freezing-rain"; return; } + case LightRain: { iconName = "weather-showers-scattered"; return; } + case Sleet: { iconName = "weather-snow-rain"; return; } + } +} + +WeatherIcon::WeatherIcon( int condition, bool night, unsigned int strength ) + : iconLoader() +{ + TQString name; + + switch ( condition ) + { + case Cloudy: + { + switch ( strength ) + { + case 1: { name = "weather-few-clouds"; break; } + + case 2: + { + name = "weather-moderate-clouds"; + if (! iconExists(name) ) + { + name = "weather-few-clouds"; + } + break; + } + + case 3: { name = "weather-clouds"; break; } + + case 4: + { + name = "weather-ample-clouds"; + if (! iconExists(name) ) + { + name = "weather-clouds"; + } + break; + } + + case 5: { iconName = "weather-many-clouds"; return; } + default: { iconName = "weather-clouds"; return; } + } + + iconName = name.append( night ? "-night" : "" ); + return; + } + + case Showers: + { + switch ( strength ) + { + case 1: { name = "weather-showers-scattered"; break; } + case 2: { name = "weather-showers"; break; } + case 3: + default: { iconName = "weather-showers"; return; } + } + + iconName = name.append( night ? "-night" : "-day" ); + return; + } + + case Snow: + { + switch( strength ) + { + case 1: { name = "weather-snow-scattered"; break; } + case 2: + { + name = "weather-snow-moderate"; + if (! iconExists( TQString(name.latin1()).append("-day")) ) + { + name = "weather-snow-scattered"; + } + break; + } + case 3: + { + name = "weather-snow-ample"; + if ( iconExists( TQString(name.latin1()).append("-day") ) ) + break; + } + case 4: { iconName = "weather-snow-scattered"; return; } + case 5: + default: { iconName = "weather-snow"; return; } + } + + iconName = name.append( night ? "-night" : "-day" ); + return; + } + + case Thunderstorm: + switch ( strength ) + { + case 1: { name = "weather-storm"; break; } + case 2: + { + name = "weather-storm-moderate"; + if (! iconExists( TQString(name.latin1()).append("-day")) ) + { + name = "weather-storm"; + } + break; + } + case 3: + default: { iconName = "weather-storm"; return; } + } + + iconName = name.append( night ? "-night" : "-day" ); + return; + } +} + +WeatherIcon::~WeatherIcon() +{} + + +bool WeatherIcon::iconExists( TQString& icon, bool inTheme ) +{ + if ( inTheme ) + { + return iconLoader->theme()->iconPath(icon, TDEIcon::SizeMedium, TDEIcon::MatchExact).isValid(); + } + else + { + return !(iconLoader->iconPath(icon, TDEIcon::SizeMedium, true).isNull()); + } +} |