[Xfce4-commits] <xfce4-weather-plugin:master> Set up first design of the new config dialog.

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


Updating branch refs/heads/master
         to fd3dab2254e561db21a7c40045f5120481eb3642 (commit)
       from 613f4a23190fce19f0e2a342ed9fc7ab0b6603be (commit)

commit fd3dab2254e561db21a7c40045f5120481eb3642
Author: Harald Judt <h.judt at gmx.at>
Date:   Wed Nov 21 13:08:51 2012 +0100

    Set up first design of the new config dialog.
    
    Let's start with this non-functional concept and use it as a playground.
    While the code compiles, it breaks plugin configuration and can only be
    used with already configured plugin instances. Applying and saving
    options are disabled.

 panel-plugin/weather-config.c |  613 +++++++++++++++++++++++++++++++++--------
 panel-plugin/weather-config.h |   40 ++-
 panel-plugin/weather.c        |    6 +
 3 files changed, 529 insertions(+), 130 deletions(-)

diff --git a/panel-plugin/weather-config.c b/panel-plugin/weather-config.c
index 030c0af..c119720 100644
--- a/panel-plugin/weather-config.c
+++ b/panel-plugin/weather-config.c
@@ -32,7 +32,7 @@
 #include "weather-scrollbox.h"
 
 #define OPTIONS_N 13
-#define BORDER 8
+#define BORDER 4
 #define LOC_NAME_MAX_LEN 50
 
 
@@ -66,13 +66,13 @@ static cb_function cb = NULL;
 
 
 static void
-add_mdl_option(GtkListStore *mdl,
-               const gint opt)
+add_model_option(GtkListStore *model,
+                 const gint opt)
 {
     GtkTreeIter iter;
 
-    gtk_list_store_append(mdl, &iter);
-    gtk_list_store_set(mdl, &iter,
+    gtk_list_store_append(model, &iter);
+    gtk_list_store_set(model, &iter,
                        0, _(labeloptions[opt].name),
                        1, labeloptions[opt].number, -1);
 }
@@ -87,8 +87,8 @@ cb_addoption(GtkWidget *widget,
 
     dialog = (xfceweather_dialog *) data;
     history =
-        gtk_option_menu_get_history(GTK_OPTION_MENU(dialog->opt_xmloption));
-    add_mdl_option(dialog->mdl_xmloption, history);
+        gtk_option_menu_get_history(GTK_OPTION_MENU(dialog->options_datatypes));
+    add_model_option(dialog->model_datatypes, history);
 
     return FALSE;
 }
@@ -103,9 +103,9 @@ cb_deloption(GtkWidget *widget,
     GtkTreeIter iter;
 
     selection =
-        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->lst_xmloption));
+        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->list_datatypes));
     if (gtk_tree_selection_get_selected(selection, NULL, &iter))
-        gtk_list_store_remove(GTK_LIST_STORE(dialog->mdl_xmloption), &iter);
+        gtk_list_store_remove(GTK_LIST_STORE(dialog->model_datatypes), &iter);
 
     return FALSE;
 }
@@ -121,14 +121,14 @@ cb_upoption(GtkWidget *widget,
     GtkTreePath *path;
 
     selection =
-        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->lst_xmloption));
+        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->list_datatypes));
     if (gtk_tree_selection_get_selected(selection, NULL, &iter)) {
-        path = gtk_tree_model_get_path(GTK_TREE_MODEL(dialog->mdl_xmloption),
+        path = gtk_tree_model_get_path(GTK_TREE_MODEL(dialog->model_datatypes),
                                        &iter);
         if (gtk_tree_path_prev(path)) {
-            if (gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->mdl_xmloption),
+            if (gtk_tree_model_get_iter(GTK_TREE_MODEL(dialog->model_datatypes),
                                         &prev, path))
-                gtk_list_store_move_before(GTK_LIST_STORE(dialog->mdl_xmloption),
+                gtk_list_store_move_before(GTK_LIST_STORE(dialog->model_datatypes),
                                            &iter, &prev);
 
             gtk_tree_path_free(path);
@@ -148,12 +148,12 @@ cb_downoption(GtkWidget *widget,
     GtkTreeSelection *selection;
 
     selection =
-        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->lst_xmloption));
+        gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->list_datatypes));
     if (gtk_tree_selection_get_selected(selection, NULL, &iter)) {
         next = iter;
-        if (gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->mdl_xmloption),
+        if (gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->model_datatypes),
                                      &next))
-            gtk_list_store_move_after(GTK_LIST_STORE(dialog->mdl_xmloption),
+            gtk_list_store_move_after(GTK_LIST_STORE(dialog->model_datatypes),
                                       &iter, &next);
     }
 
@@ -246,6 +246,7 @@ sanitize_location_name(const gchar *location_name)
 void
 apply_options(xfceweather_dialog *dialog)
 {
+#if 0
     gint option;
     gboolean hasiter = FALSE;
     GtkTreeIter iter;
@@ -272,7 +273,7 @@ apply_options(xfceweather_dialog *dialog)
     data->lon =
         g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->txt_lon)));
     data->location_name =
-        g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->txt_loc_name)));
+        g_strdup(gtk_entry_get_text(GTK_ENTRY(dialog->text_loc_name)));
 
     /* force update of astronomical data */
     memset(&data->last_astro_update, 0, sizeof(data->last_astro_update));
@@ -284,20 +285,20 @@ apply_options(xfceweather_dialog *dialog)
     data->labels = g_array_new(FALSE, TRUE, sizeof(data_types));
     for (hasiter =
              gtk_tree_model_get_iter_first(GTK_TREE_MODEL
-                                           (dialog->mdl_xmloption),
+                                           (dialog->model_datatypes),
                                            &iter);
          hasiter == TRUE;
          hasiter =
-             gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->mdl_xmloption),
+             gtk_tree_model_iter_next(GTK_TREE_MODEL(dialog->model_datatypes),
                                       &iter)) {
-        gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->mdl_xmloption), &iter,
+        gtk_tree_model_get_value(GTK_TREE_MODEL(dialog->model_datatypes), &iter,
                                  1, &value);
         option = g_value_get_int(&value);
         g_array_append_val(data->labels, option);
         g_value_unset(&value);
     }
 
-    data->forecast_days = 
+    data->forecast_days =
         (gint) gtk_spin_button_get_value(GTK_SPIN_BUTTON
                                          (dialog->spin_forecast_days));
 
@@ -309,6 +310,7 @@ apply_options(xfceweather_dialog *dialog)
 
     if (cb)
         cb(data);
+#endif
 }
 
 
@@ -342,7 +344,7 @@ set_location_tooltip(xfceweather_dialog *dialog,
     else
         text = g_strdup(_("Please select a location "
                           "by using the \"Change\" button."));
-    gtk_widget_set_tooltip_text(dialog->txt_loc_name, text);
+    gtk_widget_set_tooltip_text(dialog->text_loc_name, text);
     g_free(text);
 }
 
@@ -354,30 +356,32 @@ auto_locate_cb(const gchar *loc_name,
                const unit_systems unit_system,
                gpointer user_data)
 {
+#if 0
     xfceweather_dialog *dialog = (xfceweather_dialog *) user_data;
 
     if (lat && lon && loc_name) {
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lat), lat);
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lon), lon);
-        gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), loc_name);
-        gtk_widget_set_sensitive(dialog->txt_loc_name, TRUE);
+        gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name), loc_name);
+        gtk_widget_set_sensitive(dialog->text_loc_name, TRUE);
         set_location_tooltip(dialog, lat, lon);
     } else {
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lat), "");
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lon), "");
-        gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), _("Unset"));
-        gtk_widget_set_sensitive(dialog->txt_loc_name, FALSE);
+        gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name), _("Unset"));
+        gtk_widget_set_sensitive(dialog->text_loc_name, FALSE);
     }
     gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->combo_unit_system),
                              unit_system);
+#endif
 }
 
 
 static void
 start_auto_locate(xfceweather_dialog *dialog)
 {
-    gtk_widget_set_sensitive(dialog->txt_loc_name, FALSE);
-    gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), _("Detecting..."));
+    gtk_widget_set_sensitive(dialog->text_loc_name, FALSE);
+    gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name), _("Detecting..."));
     weather_search_by_ip(dialog->wd->session, auto_locate_cb, dialog);
 }
 
@@ -394,12 +398,14 @@ cb_findlocation(GtkButton *button,
 
     gtk_widget_set_sensitive(GTK_WIDGET(button), FALSE);
     if (run_search_dialog(sdialog)) {
+#if 0
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lat), sdialog->result_lat);
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lon), sdialog->result_lon);
+#endif
         loc_name = sanitize_location_name(sdialog->result_name);
-        gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), loc_name);
+        gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name), loc_name);
         g_free(loc_name);
-        gtk_widget_set_sensitive(dialog->txt_loc_name, TRUE);
+        gtk_widget_set_sensitive(dialog->text_loc_name, TRUE);
         set_location_tooltip(dialog, sdialog->result_lat, sdialog->result_lon);
     }
     free_search_dialog(sdialog);
@@ -409,70 +415,139 @@ cb_findlocation(GtkButton *button,
 }
 
 
-xfceweather_dialog *
-create_config_dialog(xfceweather_data *data,
-                     GtkWidget *vbox)
+static GtkWidget *
+create_location_page(xfceweather_dialog *dialog)
 {
-    xfceweather_dialog *dialog;
-    GtkWidget *vbox2, *vbox3, *hbox, *hbox2, *label;
-    GtkWidget *button_add, *button_del, *button_up, *button_down;
-    GtkWidget *image, *button, *scroll;
-    GtkSizeGroup *sg, *sg_buttons;
-    GtkTreeViewColumn *column;
-    GtkCellRenderer *renderer;
-    data_types type;
-    guint i;
-    gint n;
-
-    sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-    sg_buttons = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-    dialog = g_slice_new0(xfceweather_dialog);
-    dialog->wd = (xfceweather_data *) data;
-    dialog->dialog = gtk_widget_get_toplevel(vbox);
-
-    /* system of measurement */
-    label = gtk_label_new_with_mnemonic(_("System of _Measurement:"));
+    GtkWidget *palign, *page, *hbox, *vbox, *table, *label, *image, *frame;
+    GtkWidget *button_loc_change, *button_alt_lookup, *button_timezone_lookup;
+    GtkSizeGroup *sg_label, *sg_spin, *sg_button;
+
+    palign = gtk_alignment_new(0.5, 0.5, 1, 1);
+    gtk_container_set_border_width(GTK_CONTAINER(palign), BORDER);
+    page = gtk_vbox_new(FALSE, BORDER);
+    gtk_container_add(GTK_CONTAINER(palign), page);
+    sg_label = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    sg_spin = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    sg_button = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+    /* location name */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Location _name:"));
     gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    dialog->combo_unit_system = gtk_combo_box_new_text();
-    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_system),
-                              _("Imperial"));
-    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_system),
-                              _("Metric"));
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER);
+    dialog->text_loc_name = gtk_entry_new();
     gtk_label_set_mnemonic_widget(GTK_LABEL(label),
-                                  GTK_WIDGET(dialog->combo_unit_system));
-    gtk_combo_box_set_active(GTK_COMBO_BOX(dialog->combo_unit_system),
-                             dialog->wd->unit_system);
+                                  GTK_WIDGET(dialog->text_loc_name));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->text_loc_name, TRUE, TRUE, 0);
+    button_loc_change = gtk_button_new_with_mnemonic(_("Chan_ge..."));
+    image = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_BUTTON);
+    gtk_button_set_image(GTK_BUTTON(button_loc_change), image);
+    g_signal_connect(G_OBJECT(button_loc_change), "clicked",
+                     G_CALLBACK(cb_findlocation), dialog);
+    gtk_box_pack_start(GTK_BOX(hbox), button_loc_change,
+                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, BORDER);
+
+    /* latitude */
+    vbox = gtk_vbox_new(FALSE, BORDER);
     hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Latitud_e:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER);
+    dialog->spin_lat = gtk_spin_button_new_with_range(-90, 90, 1);
+    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_lat), 6);
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->spin_lat));
+    gtk_size_group_add_widget(sg_spin, dialog->spin_lat);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->spin_lat, FALSE, FALSE, 0);
+    label = gtk_label_new("°");
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_system, TRUE, TRUE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
-    gtk_size_group_add_widget(sg, label);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER);
 
-    /* location */
-    label = gtk_label_new_with_mnemonic(_("L_ocation:"));
-    dialog->txt_lat = gtk_entry_new();
-    dialog->txt_lon = gtk_entry_new();
-    dialog->txt_loc_name = gtk_entry_new();
+    /* longitude */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("L_ongitude:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER);
+    dialog->spin_lon = gtk_spin_button_new_with_range(-180, 180, 1);
+    gtk_spin_button_set_digits(GTK_SPIN_BUTTON(dialog->spin_lon), 6);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_lon), 0);
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->spin_lon));
+    gtk_size_group_add_widget(sg_spin, dialog->spin_lon);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->spin_lon, FALSE, FALSE, 0);
+    label = gtk_label_new("°");
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER);
+    gtk_box_pack_start(GTK_BOX(page), vbox, FALSE, FALSE, 0);
+
+    /* altitude */
+    frame = gtk_frame_new(_("Corrections"));
+    table = gtk_table_new(2, 4, FALSE);
+    gtk_table_set_row_spacings(GTK_TABLE(table), BORDER*2);
+    gtk_table_set_col_spacings(GTK_TABLE(table), BORDER/2);
+    label = gtk_label_new_with_mnemonic(_("_Altitude:"));
     gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    dialog->spin_alt = gtk_spin_button_new_with_range(-420, 10000, 1);
     gtk_label_set_mnemonic_widget(GTK_LABEL(label),
-                                  GTK_WIDGET(dialog->txt_loc_name));
+                                  GTK_WIDGET(dialog->spin_alt));
+    dialog->label_alt_unit = gtk_label_new(_("meters"));
+    gtk_misc_set_alignment(GTK_MISC(dialog->label_alt_unit), 0, 0.5);
+    button_alt_lookup =
+        gtk_button_new_with_mnemonic(_("Lookup altitu_de"));
+    gtk_size_group_add_widget(sg_button, button_alt_lookup);
+    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
+    gtk_table_attach_defaults(GTK_TABLE(table),
+                              dialog->spin_alt, 1, 2, 0, 1);
+    gtk_table_attach_defaults(GTK_TABLE(table),
+                              dialog->label_alt_unit, 2, 3, 0, 1);
+    gtk_table_attach_defaults(GTK_TABLE(table),
+                              button_alt_lookup, 3, 4, 0, 1);
+
+    /* timezone */
+    label = gtk_label_new_with_mnemonic(_("_Timezone:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    dialog->spin_timezone = gtk_spin_button_new_with_range(-24, 24, 1);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_timezone), 0);
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->spin_timezone));
+    button_timezone_lookup =
+        gtk_button_new_with_mnemonic(_("Lookup time_zone"));
+    gtk_size_group_add_widget(sg_button, button_timezone_lookup);
+    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+    gtk_table_attach_defaults(GTK_TABLE(table),
+                              dialog->spin_timezone, 1, 2, 1, 2);
+    gtk_table_attach_defaults(GTK_TABLE(table),
+                              button_timezone_lookup, 3, 4, 1, 2);
+    gtk_container_add(GTK_CONTAINER(frame), table);
+    gtk_container_set_border_width(GTK_CONTAINER(table), BORDER);
+    gtk_box_pack_start(GTK_BOX(page), frame, FALSE, FALSE, BORDER);
+
+#if 0
+    dialog->spin_lon = gtk_spin_button_new_with_range(-90, 90, 1.000000);
     if (dialog->wd->lat != NULL && strlen(dialog->wd->lat) > 0)
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lat),
                            dialog->wd->lat);
     else
-        gtk_widget_set_sensitive(dialog->txt_loc_name, FALSE);
+        gtk_widget_set_sensitive(dialog->text_loc_name, FALSE);
     if (dialog->wd->lon != NULL && strlen(dialog->wd->lon) > 0)
         gtk_entry_set_text(GTK_ENTRY(dialog->txt_lon),
                            dialog->wd->lon);
     else
-        gtk_widget_set_sensitive(dialog->txt_loc_name, FALSE);
+        gtk_widget_set_sensitive(dialog->text_loc_name, FALSE);
     if (dialog->wd->location_name != NULL)
-        gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name),
+        gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name),
                            dialog->wd->location_name);
     else
-        gtk_entry_set_text(GTK_ENTRY(dialog->txt_loc_name), _("Unset"));
-    gtk_entry_set_max_length(GTK_ENTRY(dialog->txt_loc_name), LOC_NAME_MAX_LEN);
+        gtk_entry_set_text(GTK_ENTRY(dialog->text_loc_name), _("Unset"));
+    gtk_entry_set_max_length(GTK_ENTRY(dialog->text_loc_name), LOC_NAME_MAX_LEN);
     set_location_tooltip(dialog, dialog->wd->lat, dialog->wd->lon);
     if ((dialog->wd->lat == NULL || dialog->wd->lon == NULL) ||
         (! strlen(dialog->wd->lat) || ! strlen(dialog->wd->lon)))
@@ -485,12 +560,205 @@ create_config_dialog(xfceweather_data *data,
                      G_CALLBACK(cb_findlocation), dialog);
     hbox = gtk_hbox_new(FALSE, BORDER);
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), dialog->txt_loc_name, TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->text_loc_name, TRUE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+#endif
+
+    g_object_unref(G_OBJECT(sg_label));
+    g_object_unref(G_OBJECT(sg_button));
+    return palign;
+}
+
+
+static GtkWidget *
+create_units_page(xfceweather_dialog *dialog)
+{
+    GtkWidget *palign, *page, *hbox, *vbox, *label;
+    GtkSizeGroup *sg_label, *sg_combo;
+
+    palign = gtk_alignment_new(0.5, 0.5, 1, 1);
+    gtk_container_set_border_width(GTK_CONTAINER(palign), BORDER);
+    page = gtk_vbox_new(FALSE, BORDER);
+    gtk_container_add(GTK_CONTAINER(palign), page);
+
+    sg_label = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    sg_combo = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    vbox = gtk_vbox_new(FALSE, BORDER);
+
+    /* temperature */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("_Temperature:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER/2);
+    dialog->combo_unit_temperature = gtk_combo_box_new_text();
+    gtk_size_group_add_widget(sg_combo, dialog->combo_unit_temperature);
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_temperature),
+                              _("Celcius"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_temperature),
+                              _("Fahrenheit"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_unit_temperature));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_temperature,
+                       TRUE, TRUE, BORDER/2);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER/2);
+
+    /* atmospheric pressure */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Atmospheric _pressure:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER/2);
+    dialog->combo_unit_pressure = gtk_combo_box_new_text();
+    gtk_size_group_add_widget(sg_combo, dialog->combo_unit_pressure);
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_pressure),
+                              _("Hectopascals (hPa)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_pressure),
+                              _("Inches of mercury (inHg)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_pressure),
+                              _("Pound-force per square inch (psi)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_pressure),
+                              _("Torr (mmHg)"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_unit_pressure));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_pressure,
+                       TRUE, TRUE, BORDER/2);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER/2);
+
+    /* wind speed */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("_Wind speed:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER/2);
+    dialog->combo_unit_windspeed = gtk_combo_box_new_text();
+    gtk_size_group_add_widget(sg_combo, dialog->combo_unit_windspeed);
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_windspeed),
+                              _("Kilometers per hour (km/h)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_windspeed),
+                              _("Miles per hour (mph)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_windspeed),
+                              _("Meters per second (m/s)"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_unit_windspeed));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_windspeed,
+                       TRUE, TRUE, BORDER/2);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER/2);
+
+    /* precipitations */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Prec_ipitations:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER/2);
+    dialog->combo_unit_precipitations = gtk_combo_box_new_text();
+    gtk_size_group_add_widget(sg_combo, dialog->combo_unit_precipitations);
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_precipitations),
+                              _("Millimeters (mm)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_precipitations),
+                              _("Inches (in)"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_unit_precipitations));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_precipitations,
+                       TRUE, TRUE, BORDER/2);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER/2);
+
+    /* altitude */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Altitu_de:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg_label, label);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, BORDER/2);
+    dialog->combo_unit_altitude = gtk_combo_box_new_text();
+    gtk_size_group_add_widget(sg_combo, dialog->combo_unit_altitude);
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_altitude),
+                              _("Meters (m)"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_unit_altitude),
+                              _("Feet (ft)"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_unit_altitude));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_unit_altitude,
+                       TRUE, TRUE, BORDER/2);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, BORDER/2);
+
+    gtk_box_pack_start(GTK_BOX(page), vbox, FALSE, FALSE, 0);
+    g_object_unref(G_OBJECT(sg_label));
+    g_object_unref(G_OBJECT(sg_combo));
+    return palign;
+}
+
+
+static GtkWidget *
+create_appearance_page(xfceweather_dialog *dialog)
+{
+    GtkWidget *palign, *page, *hbox, *vbox, *label;
+    GtkSizeGroup *sg;
+
+    palign = gtk_alignment_new(0.5, 0.5, 1, 1);
+    gtk_container_set_border_width(GTK_CONTAINER(palign), BORDER);
+    page = gtk_vbox_new(TRUE, BORDER);
+    gtk_container_add(GTK_CONTAINER(palign), page);
+    sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+    /* icon theme */
+    vbox = gtk_vbox_new(FALSE, BORDER);
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("_Icon theme:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg, label);
+    dialog->combo_icon_theme = gtk_combo_box_new_text();
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_icon_theme),
+                              "Liquid");
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_icon_theme));
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_icon_theme,
+                       TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+
+    /* tooltip style */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("_Tooltip style:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg, label);
+    dialog->combo_tooltip_style = gtk_combo_box_new_text();
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_tooltip_style),
+                              _("Verbose"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_tooltip_style),
+                              _("Simple"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_tooltip_style));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_tooltip_style,
+                       TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), vbox, FALSE, FALSE, 0);
+
+    /* forecast layout */
+    vbox = gtk_vbox_new(FALSE, BORDER);
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("_Forecast layout:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg, label);
+    dialog->combo_forecast_layout = gtk_combo_box_new_text();
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_forecast_layout),
+                              _("Horizontal"));
+    gtk_combo_box_append_text(GTK_COMBO_BOX(dialog->combo_forecast_layout),
+                              _("Vertical"));
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->combo_forecast_layout));
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->combo_forecast_layout,
+                       TRUE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
     /* number of days shown in forecast */
-    label = gtk_label_new_with_mnemonic(_("Number of _forecast days:"));
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new_with_mnemonic(_("Number of forecast _days:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    gtk_size_group_add_widget(sg, label);
     dialog->spin_forecast_days =
         gtk_spin_button_new_with_range(1, MAX_FORECAST_DAYS, 1);
     gtk_spin_button_set_value(GTK_SPIN_BUTTON(dialog->spin_forecast_days),
@@ -498,97 +766,202 @@ create_config_dialog(xfceweather_data *data,
                               ? dialog->wd->forecast_days : 5);
     gtk_label_set_mnemonic_widget(GTK_LABEL(label),
                                   GTK_WIDGET(dialog->spin_forecast_days));
-    hbox = gtk_hbox_new(FALSE, BORDER);
     gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
     gtk_box_pack_start(GTK_BOX(hbox),
                        dialog->spin_forecast_days, FALSE, FALSE, 0);
     gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
-    gtk_size_group_add_widget(sg, label);
+    gtk_box_pack_start(GTK_BOX(page), vbox, FALSE, FALSE, 0);
+
+    /* round temperature */
+    vbox = gtk_vbox_new(FALSE, BORDER);
+    dialog->check_round_values =
+        gtk_check_button_new_with_mnemonic(_("_Round values"));
+    gtk_box_pack_start(GTK_BOX(vbox), dialog->check_round_values,
+                       FALSE, FALSE, 0);
+
+    /* interpolate data */
+    dialog->check_interpolate_data =
+        gtk_check_button_new_with_mnemonic(_("Interpolate _data"));
+    gtk_box_pack_start(GTK_BOX(vbox), dialog->check_interpolate_data,
+                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), vbox, FALSE, FALSE, 0);
+
+    g_object_unref(G_OBJECT(sg));
+    return palign;
+}
+
+
+static GtkWidget *
+create_scrollbox_page(xfceweather_dialog *dialog)
+{
+    GtkWidget *palign, *page, *hbox, *table, *scroll, *label, *image;
+    GtkSizeGroup *sg_misc, *sg_button;
+    GtkWidget *button_add, *button_del, *button_up, *button_down;
+    GtkTreeViewColumn *column;
+    GtkCellRenderer *renderer;
+    GdkColor color;
+    data_types type;
+    guint i;
+    gint n;
+
+    palign = gtk_alignment_new(0.5, 0, 1, 1);
+    gtk_container_set_border_width(GTK_CONTAINER(palign), BORDER);
+    page = gtk_vbox_new(FALSE, BORDER);
+    gtk_container_add(GTK_CONTAINER(palign), page);
+    sg_misc = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+
+    /* show scrollbox */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    dialog->check_scrollbox_show =
+        gtk_check_button_new_with_mnemonic("Show scroll_box");
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->check_scrollbox_show,
+                       TRUE, TRUE, 0);
+
+    /* values to show at once (multiple lines) */
+    label = gtk_label_new_with_mnemonic(_("L_ines:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+    dialog->spin_scrollbox_lines = gtk_spin_button_new_with_range(1, 6, 1);
+    gtk_label_set_mnemonic_widget(GTK_LABEL(label),
+                                  GTK_WIDGET(dialog->spin_scrollbox_lines));
+    gtk_size_group_add_widget(sg_misc, dialog->spin_scrollbox_lines);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->spin_scrollbox_lines,
+                       FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0);
+
+    /* font and color */
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    label = gtk_label_new(_("Font and Color:"));
+    gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
+    gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
+    dialog->button_scrollbox_font =
+        gtk_button_new_with_mnemonic(_("Select _font"));
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->button_scrollbox_font,
+                       TRUE, TRUE, 0);
+    gdk_color_parse("#000000", &color);
+    dialog->button_scrollbox_color =
+        gtk_color_button_new_with_color(&color);
+    gtk_size_group_add_widget(sg_misc, dialog->button_scrollbox_color);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->button_scrollbox_color,
+                       FALSE, FALSE, 0 );
+    gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0);
+
+    //g_signal_connect(dialog->button_scrollbox_color, "color-set", cb, base);
+
 
     /* labels and buttons */
-    dialog->opt_xmloption = make_label();
-    dialog->mdl_xmloption = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
-    dialog->lst_xmloption =
-        gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->mdl_xmloption));
+    hbox = gtk_hbox_new(FALSE, BORDER);
+    sg_button = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+    dialog->options_datatypes = make_label();
+    dialog->model_datatypes = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+    dialog->list_datatypes =
+        gtk_tree_view_new_with_model(GTK_TREE_MODEL(dialog->model_datatypes));
     renderer = gtk_cell_renderer_text_new();
     column =
-        gtk_tree_view_column_new_with_attributes(_("_Labels to display"),
+        gtk_tree_view_column_new_with_attributes(_("Labels to _display"),
                                                  renderer, "text", 0, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(dialog->lst_xmloption), column);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(dialog->list_datatypes), column);
+    gtk_widget_set_size_request(dialog->options_datatypes, 300, -1);
 
     /* button "add" */
     button_add = gtk_button_new_with_mnemonic(_("_Add"));
     image = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
     gtk_button_set_image(GTK_BUTTON(button_add), image);
-    gtk_size_group_add_widget(sg_buttons, button_add);
-    hbox = gtk_hbox_new(FALSE, BORDER);
-    gtk_box_pack_start(GTK_BOX(hbox), dialog->opt_xmloption, TRUE, TRUE, 0);
+    gtk_size_group_add_widget(sg_button, button_add);
+    gtk_box_pack_start(GTK_BOX(hbox), dialog->options_datatypes, TRUE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(hbox), button_add, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0);
+    g_signal_connect(G_OBJECT(button_add), "clicked",
+                     G_CALLBACK(cb_addoption), dialog);
+
+    /* labels to display */
     hbox = gtk_hbox_new(FALSE, BORDER);
     scroll = gtk_scrolled_window_new(NULL, NULL);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll),
                                    GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-    gtk_container_add(GTK_CONTAINER(scroll), dialog->lst_xmloption);
+    gtk_container_add(GTK_CONTAINER(scroll), dialog->list_datatypes);
     gtk_box_pack_start(GTK_BOX(hbox), scroll, TRUE, TRUE, 0);
 
     /* button "remove" */
+    table = gtk_table_new(4, 1, TRUE);
     button_del = gtk_button_new_with_mnemonic(_("_Remove"));
     image = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_BUTTON);
     gtk_button_set_image(GTK_BUTTON(button_del), image);
-    gtk_size_group_add_widget(sg_buttons, button_del);
+    gtk_size_group_add_widget(sg_button, button_del);
+    gtk_table_attach_defaults(GTK_TABLE(table), button_del, 0, 1, 0, 1);
+    g_signal_connect(G_OBJECT(button_del), "clicked",
+                     G_CALLBACK(cb_deloption), dialog);
 
     /* button "move up" */
     button_up = gtk_button_new_with_mnemonic(_("Move _Up"));
     image = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_BUTTON);
     gtk_button_set_image(GTK_BUTTON(button_up), image);
-    gtk_size_group_add_widget(sg_buttons, button_up);
+    gtk_size_group_add_widget(sg_button, button_up);
+    gtk_table_attach_defaults(GTK_TABLE(table), button_up, 0, 1, 2, 3);
+    g_signal_connect(G_OBJECT(button_up), "clicked",
+                     G_CALLBACK(cb_upoption), dialog);
 
     /* button "move down" */
     button_down = gtk_button_new_with_mnemonic(_("Move _Down"));
     image = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_BUTTON);
     gtk_button_set_image(GTK_BUTTON(button_down), image);
-    gtk_size_group_add_widget(sg_buttons, button_down);
+    gtk_size_group_add_widget(sg_button, button_down);
+    gtk_table_attach_defaults(GTK_TABLE(table), button_down, 0, 1, 3, 4);
+    g_signal_connect(G_OBJECT(button_down), "clicked",
+                     G_CALLBACK(cb_downoption), dialog);
 
-    vbox2 = gtk_vbox_new(FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox2), button_del, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox2), button_up, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox2), button_down, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
-    gtk_widget_set_size_request(dialog->lst_xmloption, -1, 120);
+    gtk_box_pack_start(GTK_BOX(hbox), table, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(page), hbox, FALSE, FALSE, 0);
 
-    if (data->labels->len > 0) {
-        for (i = 0; i < data->labels->len; i++) {
-            type = g_array_index(data->labels, data_types, i);
+    if (dialog->wd->labels->len > 0) {
+        for (i = 0; i < dialog->wd->labels->len; i++) {
+            type = g_array_index(dialog->wd->labels, data_types, i);
 
             if ((n = option_i(type)) != -1)
-                add_mdl_option(dialog->mdl_xmloption, n);
+                add_model_option(dialog->model_datatypes, n);
         }
     }
 
-    g_object_unref(G_OBJECT(sg));
-    g_object_unref(G_OBJECT(sg_buttons));
-
-    g_signal_connect(G_OBJECT(button_add), "clicked",
-                     G_CALLBACK(cb_addoption), dialog);
-    g_signal_connect(G_OBJECT(button_del), "clicked",
-                     G_CALLBACK(cb_deloption), dialog);
-    g_signal_connect(G_OBJECT(button_up), "clicked",
-                     G_CALLBACK(cb_upoption), dialog);
-    g_signal_connect(G_OBJECT(button_down), "clicked",
-                     G_CALLBACK(cb_downoption), dialog);
-
-    dialog->chk_animate_transition =
+    dialog->check_scrollbox_animate =
         gtk_check_button_new_with_mnemonic(_("Animate _transitions between labels"));
     gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON
-                                 (dialog->chk_animate_transition),
+                                 (dialog->check_scrollbox_animate),
                                  dialog->wd->animation_transitions);
-    gtk_box_pack_start(GTK_BOX(vbox), dialog->chk_animate_transition,
+    gtk_box_pack_start(GTK_BOX(page), dialog->check_scrollbox_animate,
                        FALSE, FALSE, 0);
 
-    gtk_widget_show_all(vbox);
+    g_object_unref(G_OBJECT(sg_misc));
+    g_object_unref(G_OBJECT(sg_button));
+    return palign;
+}
+
+
+xfceweather_dialog *
+create_config_dialog(xfceweather_data *data,
+                     GtkWidget *vbox)
+{
+    xfceweather_dialog *dialog;
+    GtkWidget *notebook;
 
+    dialog = g_slice_new0(xfceweather_dialog);
+    dialog->wd = (xfceweather_data *) data;
+    dialog->dialog = gtk_widget_get_toplevel(vbox);
+
+    notebook = gtk_notebook_new();
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                             create_location_page(dialog),
+                             gtk_label_new_with_mnemonic("_Location"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                             create_units_page(dialog),
+                             gtk_label_new_with_mnemonic("_Units"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                             create_appearance_page(dialog),
+                             gtk_label_new_with_mnemonic("_Appearance"));
+    gtk_notebook_append_page(GTK_NOTEBOOK(notebook),
+                             create_scrollbox_page(dialog),
+                             gtk_label_new_with_mnemonic("_Scrollbox"));
+    gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
+    gtk_widget_show_all(vbox);
     return dialog;
 }
 
diff --git a/panel-plugin/weather-config.h b/panel-plugin/weather-config.h
index acbad73..4fba442 100644
--- a/panel-plugin/weather-config.h
+++ b/panel-plugin/weather-config.h
@@ -28,20 +28,40 @@ typedef struct {
 
 typedef struct {
     GtkWidget *dialog;
-    GtkWidget *combo_unit_system;
-    GtkWidget *txt_lat;
-    GtkWidget *txt_lon;
-    GtkWidget *txt_loc_name;
-    GtkWidget *spin_forecast_days;
 
-    GtkWidget *tooltip_yes;
-    GtkWidget *tooltip_no;
+    /* location page */
+    GtkWidget *text_loc_name;
+    GtkWidget *spin_lat;
+    GtkWidget *spin_lon;
+    GtkWidget *spin_alt;
+    GtkWidget *label_alt_unit;
+    GtkWidget *spin_timezone;
+
+    /* units page */
+    GtkWidget *combo_unit_temperature;
+    GtkWidget *combo_unit_pressure;
+    GtkWidget *combo_unit_windspeed;
+    GtkWidget *combo_unit_precipitations;
+    GtkWidget *combo_unit_altitude;
 
-    GtkWidget *opt_xmloption;
-    GtkWidget *lst_xmloption;
-    GtkListStore *mdl_xmloption;
+    /* appearance page */
+    GtkWidget *combo_icon_theme;
+    GtkWidget *combo_tooltip_style;
+    GtkWidget *combo_forecast_layout;
+    GtkWidget *spin_forecast_days;
+    GtkWidget *check_round_values;
+    GtkWidget *check_interpolate_data;
 
     GtkWidget *chk_animate_transition;
+    /* scrollbox page */
+    GtkWidget *check_scrollbox_show;
+    GtkWidget *spin_scrollbox_lines;
+    GtkWidget *button_scrollbox_font;
+    GtkWidget *button_scrollbox_color;
+    GtkWidget *options_datatypes;        /* labels to choose from */
+    GtkWidget *list_datatypes;           /* labels to show */
+    GtkListStore *model_datatypes;       /* model for labels */
+    GtkWidget *check_scrollbox_animate;
 
     xfceweather_data *wd;
 } xfceweather_dialog;
diff --git a/panel-plugin/weather.c b/panel-plugin/weather.c
index 03c7e87..8be3e75 100644
--- a/panel-plugin/weather.c
+++ b/panel-plugin/weather.c
@@ -712,15 +712,21 @@ xfceweather_dialog_response(GtkWidget *dlg,
                       PLUGIN_WEBSITE);
     } else {
         weather_debug("Applying configuration options.");
+#if 0
         apply_options(dialog);
+#endif
         weather_dump(weather_dump_plugindata, data);
 
         gtk_widget_destroy(dlg);
+#if 0
         gtk_list_store_clear(dialog->mdl_xmloption);
+#endif
         g_slice_free(xfceweather_dialog, dialog);
 
         xfce_panel_plugin_unblock_menu(data->plugin);
+#if 0
         xfceweather_write_config(data->plugin, data);
+#endif
 
         xfceweather_set_visibility(data);
     }


More information about the Xfce4-commits mailing list