Updating branch refs/heads/master to 9ca6225dcf29e1a1a6cc13e1036305cd58d6c426 (commit) from 1837efa6ad628a5d0211649e8d2c95ad1ca94f2e (commit)
commit 9ca6225dcf29e1a1a6cc13e1036305cd58d6c426 Author: Harald Judt <h.j...@gmx.at> Date: Tue Jun 26 01:49:19 2012 +0200 Initial version of the new forecast tab. Make the weather forecast tab work again! panel-plugin/weather-summary.c | 342 ++++++++++++++++++---------------------- 1 files changed, 157 insertions(+), 185 deletions(-) diff --git a/panel-plugin/weather-summary.c b/panel-plugin/weather-summary.c index 94dbb74..527fb94 100644 --- a/panel-plugin/weather-summary.c +++ b/panel-plugin/weather-summary.c @@ -321,168 +321,157 @@ create_summary_tab (xfceweather_data *data) return frame; } -static GtkWidget * -make_forecast (xml_weather *weatherdata, - units unit) -{ - GtkWidget *item_vbox, *temp_hbox, *icon_hbox, - *label, *icon_d, *icon_n, *box_d, *box_n; - GdkPixbuf *icon; - gchar *str, *day, *wind; - - item_vbox = gtk_vbox_new (FALSE, 0); -#if 0 - DBG ("this day %s", weatherdata->day); - - gtk_container_set_border_width (GTK_CONTAINER (item_vbox), 6); - - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - - day = translate_day (get_data_f (weatherdata, WDAY)); - str = g_strdup_printf ("<b>%s</b>", day ? day : get_data_f (weatherdata, WDAY)); - g_free (day); - - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - - gtk_box_pack_start (GTK_BOX (item_vbox), label, FALSE, FALSE, 0); - - icon_hbox = gtk_hbox_new (FALSE, 0); - - icon = get_icon (get_data_f (weatherdata, ICON_D), 48); - icon_d = gtk_image_new_from_pixbuf (icon); - box_d = gtk_event_box_new (); - gtk_event_box_set_visible_window (GTK_EVENT_BOX (box_d), FALSE); - gtk_container_add (GTK_CONTAINER (box_d), icon_d); - - if (G_LIKELY (icon)) - g_object_unref (G_OBJECT (icon)); - - icon = get_icon (get_data_f (weatherdata, ICON_N), 48); - icon_n = gtk_image_new_from_pixbuf (icon); - box_n = gtk_event_box_new (); - gtk_event_box_set_visible_window (GTK_EVENT_BOX (box_n), FALSE); - gtk_container_add (GTK_CONTAINER (box_n), icon_n); - - if (G_LIKELY (icon)) - g_object_unref (G_OBJECT (icon)); - - if (G_UNLIKELY (!tooltips)) - tooltips = gtk_tooltips_new (); - - str = g_strdup_printf (_("Day: %s"), - translate_desc (get_data_f (weatherdata, TRANS_D))); - gtk_tooltips_set_tip (tooltips, box_d, str, NULL); - g_free (str); - - str = g_strdup_printf (_("Night: %s"), - translate_desc (get_data_f (weatherdata, TRANS_N))); - gtk_tooltips_set_tip (tooltips, box_n, str, NULL); - g_free (str); - - gtk_box_pack_start (GTK_BOX (icon_hbox), box_d, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (icon_hbox), box_n, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (item_vbox), icon_hbox, FALSE, FALSE, 0); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - gtk_label_set_markup (GTK_LABEL (label), _("<b>Precipitation</b>")); - gtk_box_pack_start (GTK_BOX (item_vbox), label, FALSE, FALSE, 0); - - temp_hbox = gtk_hbox_new (FALSE, 0); - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("%s %%", get_data_f (weatherdata, PPCP_D)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("%s %%", get_data_f (weatherdata, PPCP_N)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (item_vbox), temp_hbox, FALSE, FALSE, 0); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - gtk_label_set_markup (GTK_LABEL (label), _("<b>Temperature</b>")); - gtk_box_pack_start (GTK_BOX (item_vbox), label, FALSE, FALSE, 0); - - temp_hbox = gtk_hbox_new (FALSE, 0); - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("<span foreground=\"red\">%s</span> %s", - get_data_f (weatherdata, TEMP_MAX), get_unit (unit, - TEMP)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("<span foreground=\"blue\">%s</span> %s", - get_data_f (weatherdata, TEMP_MIN), get_unit (unit, - TEMP)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (item_vbox), temp_hbox, FALSE, FALSE, 0); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - gtk_label_set_markup (GTK_LABEL (label), _("<b>Wind</b>")); - gtk_box_pack_start (GTK_BOX (item_vbox), label, FALSE, FALSE, 0); - - temp_hbox = gtk_hbox_new (FALSE, 0); - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - - wind = translate_wind_direction (get_data_f (weatherdata, W_DIRECTION_D)); - gtk_label_set_markup (GTK_LABEL (label), - wind ? wind : get_data_f (weatherdata, - W_DIRECTION_D)); - g_free (wind); +GtkWidget * +add_forecast_cell(GtkWidget *widget, GdkColor *color) { + GtkWidget *ebox; + ebox = gtk_event_box_new(); + if (color == NULL) + gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), FALSE); + else { + gtk_event_box_set_visible_window(GTK_EVENT_BOX(ebox), TRUE); + gtk_widget_modify_bg(GTK_WIDGET(ebox), GTK_STATE_NORMAL, color); + } + gtk_widget_show(GTK_WIDGET(ebox)); + gtk_container_add(GTK_CONTAINER(ebox), GTK_WIDGET(widget)); + return ebox; +} - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); +GtkWidget * +add_forecast_header(gchar *text, gdouble angle, GdkColor *color) +{ + gchar *str; + GtkWidget *label, *box; - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); + box = gtk_vbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(box), 4); + gtk_widget_show(GTK_WIDGET(box)); - wind = translate_wind_direction (get_data_f (weatherdata, W_DIRECTION_N)); - gtk_label_set_markup (GTK_LABEL (label), - wind ? wind : get_data_f (weatherdata, - W_DIRECTION_N)); - g_free (wind); + label = gtk_label_new(NULL); + gtk_label_set_angle(label, angle); + gtk_widget_show(label); + str = g_strdup_printf("<span foreground=\"white\"><b>%s</b></span>", text ? text : ""); + gtk_label_set_markup(GTK_LABEL(label), str); + g_free(str); + gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(label), + TRUE, FALSE, 2); + return add_forecast_cell(box, color); +} - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (item_vbox), temp_hbox, FALSE, FALSE, 0); - - /* speed */ - temp_hbox = gtk_hbox_new (FALSE, 2); - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("%s %s", get_data_f (weatherdata, W_SPEED_D), - get_unit (unit, WIND_SPEED)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - - label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); - str = g_strdup_printf ("%s %s", get_data_f (weatherdata, W_SPEED_N), - get_unit (unit, WIND_SPEED)); - gtk_label_set_markup (GTK_LABEL (label), str); - g_free (str); - gtk_box_pack_start (GTK_BOX (temp_hbox), label, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (item_vbox), temp_hbox, FALSE, FALSE, 0); - - DBG ("Done"); -#endif - return item_vbox; +static GtkWidget * +make_forecast (xfceweather_data *data, + units unit) +{ + GtkWidget *ebox, *table, *scrolled, *day_label; + GtkWidget *forecast_box, *box, *label, *image; + GdkPixbuf *icon; + GdkColor lightbg = {0, 0xeaea, 0xeaea, 0xeaea}; + GdkColor darkbg = {0, 0x6666, 0x6666, 0x6666}; + gint num_days = 5, i, weekday, daytime; + gchar *dayname, *value; + xml_time *fcdata; + time_t now_t = time(NULL), fcday_t; + struct tm tm_fcday; + + table = gtk_table_new(num_days + 1, 5, FALSE); + gtk_table_set_row_spacings(GTK_TABLE(table), 0); + gtk_table_set_col_spacings(GTK_TABLE(table), 0); + gtk_widget_show(GTK_WIDGET(table)); + + /* empty upper left corner */ + box = gtk_vbox_new(FALSE, 0); + gtk_widget_show(GTK_WIDGET(box)); + gtk_table_attach_defaults(GTK_TABLE(table), + add_forecast_cell(box, NULL), + 0, 1, 0, 1); + + /* daytime headers */ + gtk_table_attach_defaults(GTK_TABLE(table), + add_forecast_header(_("Morning"), 0.0, &darkbg), + 1, 2, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), + add_forecast_header(_("Afternoon"), 0.0, &darkbg), + 2, 3, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), + add_forecast_header(_("Evening"), 0.0, &darkbg), + 3, 4, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), + add_forecast_header(_("Night"), 0.0, &darkbg), + 4, 5, 0, 1); + + for (i = 0; i < num_days; i++) { + /* Forecast day headers */ + tm_fcday = *localtime(&now_t); + fcday_t = time_calc_day(tm_fcday, i); + weekday = localtime(&fcday_t)->tm_wday; + if (i == 0) + dayname = _("Today"); + else if (i == 1) + dayname = _("Tomorrow"); + else + dayname = translate_day(weekday); + + if (i % 2) + box = add_forecast_header(dayname, 90.0, &darkbg); + else + box = add_forecast_header(dayname, 90.0, &darkbg); + + gtk_table_attach_defaults(GTK_TABLE(table), GTK_WIDGET(box), + 0, 1, i+1, i+2); + + /* Get forecast data for each daytime */ + for (daytime = MORNING; daytime <= NIGHT; daytime++) { + forecast_box = gtk_vbox_new(FALSE, 0); + if (i % 2) + box = add_forecast_cell(forecast_box, NULL); + else + box = add_forecast_cell(forecast_box, &lightbg); + + fcdata = make_forecast_data(data->weatherdata, i, daytime); + if (fcdata != NULL) { + if (fcdata->location != NULL) { + icon = get_icon(get_data(fcdata, SYMBOL), 48, (daytime == NIGHT)); + 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)); + + value = g_strdup_printf(" %s ", + translate_desc(get_data(fcdata, SYMBOL), + (daytime == NIGHT))); + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), value); + gtk_widget_show(GTK_WIDGET(label)); + gtk_box_pack_start(GTK_BOX(forecast_box), GTK_WIDGET(label), + TRUE, TRUE, 0); + g_free(value); + + value = g_strdup_printf(" %s %s ", + get_data(fcdata, TEMPERATURE), + get_unit(fcdata, data->unit, TEMPERATURE)); + label = gtk_label_new(value); + gtk_widget_show(GTK_WIDGET(label)); + gtk_box_pack_start(GTK_BOX(forecast_box), GTK_WIDGET(label), + TRUE, TRUE, 0); + g_free(value); + + value = g_strdup_printf(" %s %s %s ", + translate_wind_direction(get_data(fcdata, WIND_DIRECTION)), + get_data(fcdata, WIND_SPEED), + get_unit(fcdata, data->unit, WIND_SPEED)); + label = gtk_label_new(value); + gtk_widget_show(GTK_WIDGET(label)); + gtk_box_pack_start(GTK_BOX(forecast_box), label, TRUE, TRUE, 0); + g_free(value); + } + xml_time_free(fcdata); + } + gtk_table_attach_defaults(GTK_TABLE(table), + GTK_WIDGET(box), + 1+daytime, 2+daytime, i+1, i+2); + } + } + return table; } @@ -490,34 +479,17 @@ make_forecast (xml_weather *weatherdata, static GtkWidget * create_forecast_tab (xfceweather_data *data) { - GtkWidget *widg = gtk_hbox_new (FALSE, 0); + GtkWidget *box; guint i; - gtk_container_set_border_width (GTK_CONTAINER (widg), 6); -#if 0 - if (data->weatherdata && data->weatherdata->dayf) - { - for (i = 0; i < XML_WEATHER_DAYF_N - 1; i++) - { - if (!data->weatherdata->dayf[i]) - break; - - DBG ("%s", data->weatherdata->dayf[i]->day); - - gtk_box_pack_start (GTK_BOX (widg), - make_forecast (data->weatherdata->dayf[i], data->unit), FALSE, - FALSE, 0); - gtk_box_pack_start (GTK_BOX (widg), gtk_vseparator_new (), TRUE, - TRUE, 0); - } - - if (data->weatherdata->dayf[i]) - gtk_box_pack_start (GTK_BOX (widg), - make_forecast (data->weatherdata->dayf[i], data->unit), FALSE, FALSE, - 0); - } -#endif - return widg; + box = gtk_vbox_new (FALSE, 0); + gtk_widget_show(box); + gtk_container_set_border_width (GTK_CONTAINER (box), 6); + if (data->weatherdata) + gtk_box_pack_start (GTK_BOX (box), + make_forecast (data, data->unit), + FALSE, FALSE, 0); + return box; } static void _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits