From 0e7033dd09c78eed673bfcde768483f6ad925ff7 Mon Sep 17 00:00:00 2001 From: Mavridis Philippe Date: Sat, 13 Nov 2021 14:17:53 +0200 Subject: 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 --- kweather/weather_icon.cpp | 171 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 kweather/weather_icon.cpp (limited to 'kweather/weather_icon.cpp') 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 + +#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()); + } +} -- cgit v1.2.1