Old version of code expected that the temperatures given were always in
fahrenheit format. In many countries the unit used is however celcius.
(celcius
is also in ISO standard.)
Add therefore new API's for specifying the source format and
modify the code which printouts values to screen to make conversions if
needed between
celcius and fahrenheits:
EWeather_Temp eweather_source_temp_type_get(EWeather *eweather);
void eweather_source_temp_type_set(EWeather *eweather,
EWeather_Temp source_type);
double eweather_utils_source_to_target_converted_temperature_get(
EWeather *eweather, double orig_data);
>From 386f62c878358913efc7695ba60b7f80824088e2 Mon Sep 17 00:00:00 2001
From: Mika Laitio <[email protected]>
Date: Sun, 13 Mar 2011 00:22:47 +0200
Subject: [PATCH 3/3] Allow to specify whether data is given in celcius or
fahrenheit format.
Old version of code expected that the temperatures given were always in
fahrenheit format. In many countries the unit used is however celcius. (celcius
is also in ISO standard.)
Add therefore new API's for specifying the source format and
modify the code which printouts values to screen to make conversions if needed
between
celcius and fahrenheits:
EWeather_Temp eweather_source_temp_type_get(EWeather *eweather);
void eweather_source_temp_type_set(EWeather *eweather,
EWeather_Temp source_type);
double eweather_utils_source_to_target_converted_temperature_get(
EWeather *eweather, double orig_data);
Signed-off-by: Mika Laitio <[email protected]>
---
src/bin/eweather_test.c | 3 +++
src/lib/EWeather.h | 23 ++++++++++++++++++++++-
src/lib/EWeather_Plugins.h | 1 +
src/lib/eweather.c | 33 +++++++++++++++++++++++++++++++++
src/lib/eweather_smart.c | 22 +++++++---------------
5 files changed, 66 insertions(+), 16 deletions(-)
diff --git a/src/bin/eweather_test.c b/src/bin/eweather_test.c
index ac9be6f..74e5d0a 100644
--- a/src/bin/eweather_test.c
+++ b/src/bin/eweather_test.c
@@ -97,6 +97,9 @@ int main(int argc, char **argv)
}
}
eweather_data_format_prefix_count_set(eweather, 0);
+ //EWEATHER_TEMP_CELCIUS or EWEATHER_TEMP_FARENHEIT
+ eweather_source_temp_type_set(eweather, EWEATHER_TEMP_FARENHEIT);
+ eweather_temp_type_set(eweather, EWEATHER_TEMP_FARENHEIT);
evas_object_focus_set(ow, EINA_TRUE);
evas_object_event_callback_add(ow, EVAS_CALLBACK_KEY_UP,
diff --git a/src/lib/EWeather.h b/src/lib/EWeather.h
index 5a5adc9..cffd35a 100644
--- a/src/lib/EWeather.h
+++ b/src/lib/EWeather.h
@@ -60,7 +60,23 @@ EAPI void eweather_poll_time_set(EWeather
*eweather, int poll_time);
EAPI void eweather_code_set(EWeather *eweather, const char
*code);
+/**
+ * Returns the unit where the temperature values set are expected to be.
+ * (Celcius or Fahreinheit)
+ */
+EAPI EWeather_Temp eweather_source_temp_type_get(EWeather *eweather);
+/**
+ * Defines the unit where the temperature values set are expected to be.
+ * (Celcius or Fahreinheit)
+ */
+EAPI void eweather_source_temp_type_set(EWeather *eweather,
EWeather_Temp source_type);
+/**
+ * Returns the unit that is used for showing the temperatures.
+ */
EAPI EWeather_Temp eweather_temp_type_get(EWeather *eweather);
+/**
+ * Defines the unit that is used for showing the temperatures.
+ */
EAPI void eweather_temp_type_set(EWeather *eweather,
EWeather_Temp type);
EAPI void eweather_code_set(EWeather *eweather, const char *code);
EAPI int eweather_data_format_prefix_count_get(EWeather
*eweather);
@@ -80,7 +96,12 @@ EAPI const char * eweather_data_country_get(EWeather_Data
*eweather_data);
EAPI const char * eweather_data_date_get(EWeather_Data *eweather_data);
EAPI void eweather_callbacks_set(EWeather *eweather, Update_Cb
update_cb, void *data);
-EAPI double eweather_utils_celcius_get(double farenheit);
+EAPI double eweather_utils_celcius_get(double fahrenheit);
+/**
+ * Convert the temperature that is given by the user specific unit to unit
+ * that is used for representing the values.
+ */
+EAPI double
eweather_utils_source_to_target_converted_temperature_get(EWeather *eweather,
double orig_data);
#ifdef __cplusplus
}
diff --git a/src/lib/EWeather_Plugins.h b/src/lib/EWeather_Plugins.h
index 64367d3..f9f21d1 100644
--- a/src/lib/EWeather_Plugins.h
+++ b/src/lib/EWeather_Plugins.h
@@ -53,6 +53,7 @@ struct EWeather
int poll_time;
EWeather_Temp temp_type;
+ EWeather_Temp source_temp_type;
const char *code;
int data_format_prefix_count;
diff --git a/src/lib/eweather.c b/src/lib/eweather.c
index d694456..b34c89a 100644
--- a/src/lib/eweather.c
+++ b/src/lib/eweather.c
@@ -81,6 +81,16 @@ void eweather_data_format_prefix_count_set(EWeather
*eweather, int prefix_count)
eweather->data_format_prefix_count = prefix_count;
}
+void eweather_source_temp_type_set(EWeather *eweather, EWeather_Temp type)
+{
+ eweather->source_temp_type = type;
+}
+
+EWeather_Temp eweather_source_temp_type_get(EWeather *eweather)
+{
+ return eweather->source_temp_type;
+}
+
void eweather_temp_type_set(EWeather *eweather, EWeather_Temp type)
{
eweather->temp_type = type;
@@ -165,3 +175,26 @@ double eweather_utils_celcius_get(double farenheit)
return (farenheit - 32.) * 5./9.;
}
+static double eweather_utils_celcius_to_fahrenheit_get(double celcius)
+{
+ double ret_val = (celcius * 1.8) + 32.;
+}
+
+double eweather_utils_source_to_target_converted_temperature_get(EWeather
*eweather, double orig_data)
+{
+ EWeather_Temp src_temp_type;
+ EWeather_Temp trgt_temp_type;
+ double ret_val;
+
+ src_temp_type = eweather_source_temp_type_get(eweather);
+ trgt_temp_type = eweather_temp_type_get(eweather);
+
+ if (src_temp_type == trgt_temp_type)
+ ret_val = orig_data;
+ else if ((src_temp_type == EWEATHER_TEMP_FARENHEIT) &&
+ (trgt_temp_type == EWEATHER_TEMP_CELCIUS))
+ ret_val = eweather_utils_celcius_get(orig_data);
+ else
+ ret_val = eweather_utils_celcius_to_fahrenheit_get(orig_data);
+ return ret_val;
+}
diff --git a/src/lib/eweather_smart.c b/src/lib/eweather_smart.c
index 6f4a1bc..a6bc8d2 100644
--- a/src/lib/eweather_smart.c
+++ b/src/lib/eweather_smart.c
@@ -291,6 +291,7 @@ static void _eweather_update_cb(void *data, EWeather
*eweather)
int i = 0;
int pref_cnt;
const char temp_format[15];
+ double raw_temp;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
@@ -335,25 +336,16 @@ static void _eweather_update_cb(void *data, EWeather
*eweather)
else
snprintf(temp_format, sizeof(temp_format), "%%.%df°C",
pref_cnt);
- if(eweather_temp_type_get(eweather) == EWEATHER_TEMP_FARENHEIT)
- snprintf(buf, sizeof(buf), temp_format,
eweather_data_temp_get(e_data));
- else
- snprintf(buf, sizeof(buf), temp_format,
eweather_utils_celcius_get(eweather_data_temp_get(e_data)));
-
+ raw_temp = eweather_data_temp_get(e_data);
+ snprintf(buf, sizeof(buf), temp_format,
eweather_utils_source_to_target_converted_temperature_get(eweather, raw_temp));
edje_object_part_text_set(o_day, "text.temp", buf);
- if(eweather_temp_type_get(eweather) == EWEATHER_TEMP_FARENHEIT)
- snprintf(buf, sizeof(buf), temp_format,
eweather_data_temp_min_get(e_data));
- else
- snprintf(buf, sizeof(buf), temp_format,
eweather_utils_celcius_get(eweather_data_temp_min_get(e_data)));
-
+ raw_temp = eweather_data_temp_min_get(e_data);
+ snprintf(buf, sizeof(buf), temp_format,
eweather_utils_source_to_target_converted_temperature_get(eweather, raw_temp));
edje_object_part_text_set(o_day, "text.temp_min", buf);
- if(eweather_temp_type_get(eweather) == EWEATHER_TEMP_FARENHEIT)
- snprintf(buf, sizeof(buf), temp_format,
eweather_data_temp_max_get(e_data));
- else
- snprintf(buf, sizeof(buf), temp_format,
eweather_utils_celcius_get(eweather_data_temp_max_get(e_data)));
-
+ raw_temp = eweather_data_temp_max_get(e_data);
+ snprintf(buf, sizeof(buf), temp_format,
eweather_utils_source_to_target_converted_temperature_get(eweather, raw_temp));
edje_object_part_text_set(o_day, "text.temp_max", buf);
edje_object_part_text_set(o_day, "text.city",
eweather_data_city_get(e_data));
--
1.7.1
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel