summaryrefslogtreecommitdiffstats
path: root/kweather/weather_icon.cpp
diff options
context:
space:
mode:
authorMavridis Philippe <mavridisf@gmail.com>2021-11-13 14:17:53 +0200
committerMavridis Philippe <mavridisf@gmail.com>2022-01-14 12:36:53 +0200
commit0e7033dd09c78eed673bfcde768483f6ad925ff7 (patch)
treea4f4484e6c154ff28c5d67697d6de976807fbf83 /kweather/weather_icon.cpp
parent5fea80f5693a74ee736300944c0c7204a663b92b (diff)
downloadtdetoys-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.cpp171
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());
+ }
+}