summaryrefslogtreecommitdiffstats
path: root/kweather/metar_parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kweather/metar_parser.cpp')
-rw-r--r--kweather/metar_parser.cpp86
1 files changed, 49 insertions, 37 deletions
diff --git a/kweather/metar_parser.cpp b/kweather/metar_parser.cpp
index 44e2c73..c7baa62 100644
--- a/kweather/metar_parser.cpp
+++ b/kweather/metar_parser.cpp
@@ -28,6 +28,7 @@ email : jratke@comcast.net
#include "metar_parser.h"
#include "stationdatabase.h"
+#include "weather_icon.h"
#include "sun.h"
// Temperature conversion macros
@@ -257,7 +258,7 @@ bool MetarParser::parseCurrent(const TQString &s)
if (sCode.contains("DZ"))
{
phenomena = i18n("Drizzle");
- weatherInfo.theWeather = "light_rain";
+ weatherInfo.theWeather = iconName( WeatherIcon::LightRain, false );
}
else if (sCode.contains("RA"))
{
@@ -272,32 +273,32 @@ bool MetarParser::parseCurrent(const TQString &s)
else if (sCode.contains("SG"))
{
phenomena = i18n("Snow Grains");
- weatherInfo.theWeather = "snow4";
+ weatherInfo.theWeather = iconName( WeatherIcon::Snow, false, 4 );
}
else if (sCode.contains("IC"))
{
phenomena = i18n("Ice Crystals");
- weatherInfo.theWeather = "hail";
+ weatherInfo.theWeather = iconName( WeatherIcon::Hail, false );
}
else if (sCode.contains("PE"))
{
phenomena = i18n("Ice Pellets");
- weatherInfo.theWeather = "hail";
+ weatherInfo.theWeather = iconName( WeatherIcon::Hail, false );
}
else if (s.contains("GR"))
{
phenomena = i18n("Hail");
- weatherInfo.theWeather = "hail";
+ weatherInfo.theWeather = iconName( WeatherIcon::Hail, false );
}
else if (sCode.contains("GS"))
{
phenomena = i18n("Small Hail Pellets");
- weatherInfo.theWeather = "hail";
+ weatherInfo.theWeather = iconName( WeatherIcon::Hail, false );
}
else if (s.contains("UP"))
{
phenomena = i18n("Unknown Precipitation");
- weatherInfo.theWeather = iconName("shower1");
+ weatherInfo.theWeather = iconName( WeatherIcon::Showers, isNight(weatherInfo.reportLocation), 1);
}
else if (sCode.contains("BR"))
{
@@ -721,24 +722,25 @@ bool MetarParser::parseStationNeedsMaintenance(const TQString &s)
void MetarParser::calcCurrentIcon()
{
- // Default to overcast clouds
- if ( weatherInfo.clouds == -1 )
- weatherInfo.clouds = 64;
+ bool night = isNight( weatherInfo.reportLocation );
if (weatherInfo.theWeather.isEmpty())
{
+
if (weatherInfo.clouds == 0)
- weatherInfo.theWeather = iconName("sunny");
+ weatherInfo.theWeather = iconName( WeatherIcon::Sunny, night );
else if (weatherInfo.clouds > 0 && weatherInfo.clouds <= 2)
- weatherInfo.theWeather = iconName("cloudy1");
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 1 );
else if ( weatherInfo.clouds > 2 && weatherInfo.clouds <= 4)
- weatherInfo.theWeather = iconName("cloudy2");
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 2 );
else if ( weatherInfo.clouds > 4 && weatherInfo.clouds <= 8)
- weatherInfo.theWeather = iconName("cloudy3");
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 3 );
else if ( weatherInfo.clouds > 8 && weatherInfo.clouds < 63)
- weatherInfo.theWeather = iconName( "cloudy4" );
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 4 );
+ else if (weatherInfo.clouds < 0)
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, weatherInfo.clouds);
else
- weatherInfo.theWeather = "cloudy5";
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 5 );
}
else if (weatherInfo.theWeather == "tstorm")
{
@@ -746,11 +748,11 @@ void MetarParser::calcCurrentIcon()
weatherInfo.clouds = 30;
if (weatherInfo.clouds >= 0 && weatherInfo.clouds <= 10)
- weatherInfo.theWeather = iconName("tstorm1");
+ weatherInfo.theWeather = iconName( WeatherIcon::Thunderstorm, night, 1 );
else if ( weatherInfo.clouds > 10 && weatherInfo.clouds <= 20)
- weatherInfo.theWeather = iconName("tstorm2");
+ weatherInfo.theWeather = iconName( WeatherIcon::Thunderstorm, night, 2 );
else
- weatherInfo.theWeather = "tstorm3";
+ weatherInfo.theWeather = iconName( WeatherIcon::Thunderstorm, night, 3 );
}
else if (weatherInfo.theWeather == "shower")
{
@@ -758,11 +760,11 @@ void MetarParser::calcCurrentIcon()
weatherInfo.clouds = 30;
if (weatherInfo.clouds >= 0 && weatherInfo.clouds <= 10)
- weatherInfo.theWeather = iconName("shower1");
+ weatherInfo.theWeather = iconName( WeatherIcon::Showers, night, 1 );
else if ( weatherInfo.clouds > 10 && weatherInfo.clouds <= 20)
- weatherInfo.theWeather = iconName("shower2");
+ weatherInfo.theWeather = iconName( WeatherIcon::Showers, night, 2 );
else
- weatherInfo.theWeather = "shower3";
+ weatherInfo.theWeather = iconName( WeatherIcon::Showers, night, 3 );
}
else if (weatherInfo.theWeather == "snow")
{
@@ -770,22 +772,22 @@ void MetarParser::calcCurrentIcon()
weatherInfo.clouds = 30;
if (weatherInfo.clouds >= 0 && weatherInfo.clouds <= 8)
- weatherInfo.theWeather = iconName("snow1");
+ weatherInfo.theWeather = iconName( WeatherIcon::Snow, night, 1 );
else if ( weatherInfo.clouds > 8 && weatherInfo.clouds <= 16)
- weatherInfo.theWeather = iconName("snow2");
+ weatherInfo.theWeather = iconName( WeatherIcon::Snow, night, 2 );
else if (weatherInfo.clouds > 16 && weatherInfo.clouds <= 24)
- weatherInfo.theWeather = iconName("snow3");
+ weatherInfo.theWeather = iconName( WeatherIcon::Snow, night, 3 );
else
- weatherInfo.theWeather = "snow5";
+ weatherInfo.theWeather = iconName( WeatherIcon::Snow, night, 5 );
}
- else if (isNight(weatherInfo.reportLocation) && weatherInfo.theWeather == "mist")
- weatherInfo.theWeather = "mist_night";
- else if (isNight(weatherInfo.reportLocation) && weatherInfo.theWeather == "fog")
- weatherInfo.theWeather = "fog_night";
else if ( weatherInfo.theWeather == "mist" || weatherInfo.theWeather == "fog" )
{
if ( weatherInfo.clouds >= 63 )
- weatherInfo.theWeather = "cloudy5";
+ weatherInfo.theWeather = iconName( WeatherIcon::Cloudy, night, 5 );
+ else if ( weatherInfo.theWeather == "mist" )
+ weatherInfo.theWeather = iconName( WeatherIcon::Mist, night );
+ else if ( weatherInfo.theWeather == "fog" )
+ weatherInfo.theWeather = iconName( WeatherIcon::Fog, night );
}
kdDebug(12006) << "Clouds: " << weatherInfo.clouds << ", Icon: "
@@ -861,13 +863,23 @@ bool MetarParser::isNight(const TQString &stationID) const
}
}
-TQString MetarParser::iconName( const TQString &icon ) const
+TQString MetarParser::iconName( int condition, bool night, int strength ) const
{
- TQString _iconName = icon;
-
- if ( isNight( weatherInfo.reportLocation ) )
- _iconName += "_night";
-
+ TQString _iconName;
+ if( strength != 0 )
+ {
+ // Simple
+ WeatherIcon* wi = new WeatherIcon( condition, night, strength );
+ _iconName = wi->name();
+ delete wi;
+ }
+ else
+ {
+ // Ranged
+ WeatherIcon* wi = new WeatherIcon( condition, night );
+ _iconName = wi->name();
+ delete wi;
+ }
return _iconName;
}