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

Reply via email to