[Xfce4-commits] <xfce4-weather-plugin:master> Refactor forecast summary code.

Harald Judt noreply at xfce.org
Tue Nov 27 16:46:39 CET 2012


Updating branch refs/heads/master
         to f17ba8c716dc2d11031bac86675fd8f603de5c10 (commit)
       from 65f4c0c70a5c6da9e16499c6f6073ced60cf0838 (commit)

commit f17ba8c716dc2d11031bac86675fd8f603de5c10
Author: Harald Judt <h.judt at gmx.at>
Date:   Mon Nov 26 18:49:27 2012 +0100

    Refactor forecast summary code.

 panel-plugin/weather-summary.c |  169 ++++++++++++++++++++-------------------
 1 files changed, 87 insertions(+), 82 deletions(-)

diff --git a/panel-plugin/weather-summary.c b/panel-plugin/weather-summary.c
index bb0bc9d..73c56d8 100644
--- a/panel-plugin/weather-summary.c
+++ b/panel-plugin/weather-summary.c
@@ -484,8 +484,8 @@ create_summary_tab(xfceweather_data *data)
 
 
 static GtkWidget *
-add_forecast_cell(const GtkWidget *widget,
-                  const GdkColor *color)
+wrap_forecast_cell(const GtkWidget *widget,
+                   const GdkColor *color)
 {
     GtkWidget *ebox;
 
@@ -521,22 +521,96 @@ add_forecast_header(const gchar *text,
     gtk_label_set_markup(GTK_LABEL(label), str);
     g_free(str);
     gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(label));
-    return add_forecast_cell(align, color);
+    return wrap_forecast_cell(align, color);
 }
 
 
 static GtkWidget *
-make_forecast(xfceweather_data *data)
+add_forecast_cell(xfceweather_data *data,
+                  gint day,
+                  gint daytime)
 {
-    GtkWidget *table, *ebox, *box, *align;
-    GtkWidget *forecast_box, *label, *image;
+    GtkWidget *box, *label, *image;
     GdkPixbuf *icon;
     const GdkColor black = {0, 0x0000, 0x0000, 0x0000};
+    gchar *wind_speed, *wind_direction, *value, *rawvalue;
+    xml_time *fcdata;
+
+    box = gtk_vbox_new(FALSE, 0);
+
+    fcdata = make_forecast_data(data->weatherdata, day, daytime);
+    if (fcdata == NULL)
+        return box;
+
+    if (fcdata->location == NULL) {
+        xml_time_free(fcdata);
+        return box;
+    }
+
+    /* symbol */
+    rawvalue = get_data(fcdata, data->units, SYMBOL, FALSE);
+    icon = get_icon(data->icon_theme, rawvalue, 48, (daytime == NIGHT));
+    g_free(rawvalue);
+    image = gtk_image_new_from_pixbuf(icon);
+    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(image), TRUE, TRUE, 0);
+    if (G_LIKELY(icon))
+        g_object_unref(G_OBJECT(icon));
+
+    /* symbol description */
+    rawvalue = get_data(fcdata, data->units, SYMBOL, FALSE);
+    value = g_strdup_printf("%s",
+                            translate_desc(rawvalue, (daytime == NIGHT)));
+    g_free(rawvalue);
+    label = gtk_label_new(NULL);
+    gtk_label_set_markup(GTK_LABEL(label), value);
+    if (!(day % 2))
+        gtk_widget_modify_fg(GTK_WIDGET(label), GTK_STATE_NORMAL, &black);
+    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(label), TRUE, TRUE, 0);
+    g_free(value);
+
+    /* temperature */
+    rawvalue = get_data(fcdata, data->units,
+                        TEMPERATURE, data->round);
+    value = g_strdup_printf("%s %s", rawvalue,
+                            get_unit(data->units, TEMPERATURE));
+    g_free(rawvalue);
+    label = gtk_label_new(value);
+    if (!(day % 2))
+        gtk_widget_modify_fg(GTK_WIDGET(label), GTK_STATE_NORMAL, &black);
+    gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(label), TRUE, TRUE, 0);
+    g_free(value);
+
+    /* wind direction and speed */
+    rawvalue = get_data(fcdata, data->units, WIND_DIRECTION, FALSE);
+    wind_direction = translate_wind_direction(rawvalue);
+    wind_speed = get_data(fcdata, data->units, WIND_SPEED, data->round);
+    value = g_strdup_printf("%s %s %s", wind_direction, wind_speed,
+                            get_unit(data->units, WIND_SPEED));
+    g_free(wind_speed);
+    g_free(wind_direction);
+    g_free(rawvalue);
+    label = gtk_label_new(value);
+    if (!(day % 2))
+        gtk_widget_modify_fg(GTK_WIDGET(label), GTK_STATE_NORMAL, &black);
+    gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
+    g_free(value);
+
+    gtk_widget_set_size_request(GTK_WIDGET(box), 150, -1);
+
+    xml_time_free(fcdata);
+    return box;
+}
+
+
+static GtkWidget *
+make_forecast(xfceweather_data *data)
+{
+    GtkWidget *table, *ebox, *box, *align;
+    GtkWidget *forecast_box;
     const GdkColor lightbg = {0, 0xeaea, 0xeaea, 0xeaea};
     const GdkColor darkbg = {0, 0x6666, 0x6666, 0x6666};
     gint i, weekday, daytime;
-    gchar *dayname, *wind_speed, *wind_direction, *value, *rawvalue;
-    xml_time *fcdata;
+    gchar *dayname;
     struct tm fcday_tm;
     time_t now_t = time(NULL), fcday_t;
 
@@ -547,7 +621,7 @@ make_forecast(xfceweather_data *data)
     /* empty upper left corner */
     box = gtk_vbox_new(FALSE, 0);
     gtk_table_attach_defaults(GTK_TABLE(table),
-                              add_forecast_cell(box, &darkbg),
+                              wrap_forecast_cell(box, &darkbg),
                               0, 1, 0, 1);
 
     /* daytime headers */
@@ -584,84 +658,15 @@ make_forecast(xfceweather_data *data)
 
         /* get forecast data for each daytime */
         for (daytime = MORNING; daytime <= NIGHT; daytime++) {
-            forecast_box = gtk_vbox_new(FALSE, 0);
+            forecast_box = add_forecast_cell(data, i, daytime);
             align = gtk_alignment_new(0.5, 0.5, 1, 1);
             gtk_container_set_border_width(GTK_CONTAINER(align), 4);
             gtk_container_add(GTK_CONTAINER(align), GTK_WIDGET(forecast_box));
             if (i % 2)
-                ebox = add_forecast_cell(align, NULL);
+                ebox = wrap_forecast_cell(align, NULL);
             else
-                ebox = add_forecast_cell(align, &lightbg);
-
-            fcdata = make_forecast_data(data->weatherdata, i, daytime);
-            if (fcdata != NULL) {
-                if (fcdata->location != NULL) {
-                    rawvalue = get_data(fcdata, data->units, SYMBOL, FALSE);
-                    icon = get_icon(data->icon_theme, rawvalue, 48,
-                                    (daytime == NIGHT));
-                    g_free(rawvalue);
-                    image = gtk_image_new_from_pixbuf(icon);
-                    gtk_box_pack_start(GTK_BOX(forecast_box), GTK_WIDGET(image),
-                                       TRUE, TRUE, 0);
-                    if (G_LIKELY(icon))
-                        g_object_unref(G_OBJECT(icon));
-
-                    rawvalue = get_data(fcdata, data->units, SYMBOL, FALSE);
-                    value =
-                        g_strdup_printf("%s",
-                                        translate_desc(rawvalue,
-                                                       (daytime == NIGHT)));
-                    g_free(rawvalue);
-                    label = gtk_label_new(NULL);
-                    gtk_label_set_markup(GTK_LABEL(label), value);
-                    if (!(i % 2))
-                        gtk_widget_modify_fg(GTK_WIDGET(label),
-                                             GTK_STATE_NORMAL, &black);
-                    gtk_box_pack_start(GTK_BOX(forecast_box), GTK_WIDGET(label),
-                                       TRUE, TRUE, 0);
-                    g_free(value);
-
-                    rawvalue = get_data(fcdata, data->units,
-                                        TEMPERATURE, data->round);
-                    value = g_strdup_printf("%s %s",
-                                            rawvalue,
-                                            get_unit(data->units,
-                                                     TEMPERATURE));
-                    g_free(rawvalue);
-                    label = gtk_label_new(value);
-                    if (!(i % 2))
-                        gtk_widget_modify_fg(GTK_WIDGET(label),
-                                             GTK_STATE_NORMAL, &black);
-                    gtk_box_pack_start(GTK_BOX(forecast_box), GTK_WIDGET(label),
-                                       TRUE, TRUE, 0);
-                    g_free(value);
-
-                    rawvalue = get_data(fcdata, data->units,
-                                        WIND_DIRECTION, FALSE);
-                    wind_direction = translate_wind_direction(rawvalue);
-                    wind_speed = get_data(fcdata, data->units,
-                                          WIND_SPEED, data->round);
-                    value = g_strdup_printf("%s %s %s",
-                                            wind_direction,
-                                            wind_speed,
-                                            get_unit(data->units,
-                                                     WIND_SPEED));
-                    g_free(wind_speed);
-                    g_free(wind_direction);
-                    g_free(rawvalue);
-                    label = gtk_label_new(value);
-                    if (!(i % 2))
-                        gtk_widget_modify_fg(GTK_WIDGET(label),
-                                             GTK_STATE_NORMAL, &black);
-                    gtk_box_pack_start(GTK_BOX(forecast_box), label,
-                                       TRUE, TRUE, 0);
-                    g_free(value);
-
-                    gtk_widget_set_size_request(GTK_WIDGET(forecast_box),
-                                                150, -1);
-                }
-                xml_time_free(fcdata);
-            }
+                ebox = wrap_forecast_cell(align, &lightbg);
+
             gtk_table_attach_defaults(GTK_TABLE(table),
                                       GTK_WIDGET(ebox),
                                       1+daytime, 2+daytime, i+1, i+2);


More information about the Xfce4-commits mailing list