X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgnome%2Fmodest-gnome-global-settings-dialog.c;h=600999d063bec931e34924fa89bfd9b1cf033093;hb=2ce1e036cfbf6ded802897028f4b3b5ababa29e2;hp=ba50f274cad6c2accfd3f18ad32ff5f0c3c9ed39;hpb=0edd0f0c6813c947ecab591cd50c857a1eebfafd;p=modest diff --git a/src/gnome/modest-gnome-global-settings-dialog.c b/src/gnome/modest-gnome-global-settings-dialog.c index ba50f27..600999d 100644 --- a/src/gnome/modest-gnome-global-settings-dialog.c +++ b/src/gnome/modest-gnome-global-settings-dialog.c @@ -42,6 +42,8 @@ #include #include "widgets/modest-global-settings-dialog-priv.h" #include "widgets/modest-combo-box.h" +#include "modest-runtime.h" +#include "modest-defs.h" #include "gnome/modest-gnome-global-settings-dialog.h" #include "widgets/modest-ui-constants.h" @@ -60,8 +62,10 @@ enum { LAST_SIGNAL }; +static void modest_gnome_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self); static GtkWidget* create_updating_page (ModestGnomeGlobalSettingsDialog *self); static GtkWidget* create_composing_page (ModestGnomeGlobalSettingsDialog *self); +static ModestConnectedVia current_connection (void); typedef struct _ModestGnomeGlobalSettingsDialogPrivate ModestGnomeGlobalSettingsDialogPrivate; struct _ModestGnomeGlobalSettingsDialogPrivate { @@ -109,6 +113,8 @@ modest_gnome_global_settings_dialog_class_init (ModestGnomeGlobalSettingsDialogC gobject_class->finalize = modest_gnome_global_settings_dialog_finalize; g_type_class_add_private (gobject_class, sizeof(ModestGnomeGlobalSettingsDialogPrivate)); + + MODEST_GLOBAL_SETTINGS_DIALOG_CLASS (klass)->current_connection_func = current_connection; } static void @@ -119,6 +125,8 @@ modest_gnome_global_settings_dialog_init (ModestGnomeGlobalSettingsDialog *self) ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); + gtk_dialog_set_has_separator (GTK_DIALOG (self), FALSE); + ppriv->updating_page = create_updating_page (self); ppriv->composing_page = create_composing_page (self); @@ -129,7 +137,16 @@ modest_gnome_global_settings_dialog_init (ModestGnomeGlobalSettingsDialog *self) gtk_label_new (_("mcen_ti_options_composing"))); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (self)->vbox), ppriv->notebook); - gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->vbox), MODEST_MARGIN_HALF); + gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (self)->vbox), 12); + gtk_container_set_border_width (GTK_CONTAINER (self), 12); + gtk_window_set_default_size (GTK_WINDOW (self), 480, -1); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->action_area), 0); + + /* Add the buttons: */ + gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_SAVE, GTK_RESPONSE_OK); + gtk_widget_show_all (ppriv->notebook); } @@ -143,7 +160,12 @@ modest_gnome_global_settings_dialog_finalize (GObject *obj) GtkWidget* modest_gnome_global_settings_dialog_new (void) { - return GTK_WIDGET(g_object_new(MODEST_TYPE_GNOME_GLOBAL_SETTINGS_DIALOG, NULL)); + GtkWidget *self = GTK_WIDGET(g_object_new(MODEST_TYPE_GNOME_GLOBAL_SETTINGS_DIALOG, NULL)); + + /* Load settings */ + modest_gnome_global_settings_dialog_load_settings (MODEST_GLOBAL_SETTINGS_DIALOG (self)); + + return self; } @@ -163,14 +185,14 @@ add_to_table (GtkTable *table, gtk_table_attach (table, left, 0, 1, n_rows, n_rows + 1, - GTK_SHRINK|GTK_FILL, - GTK_SHRINK|GTK_FILL, + GTK_FILL, + GTK_FILL, 0, 0); gtk_table_attach (table, right, 1, 2, n_rows, n_rows + 1, - GTK_EXPAND|GTK_FILL, - GTK_SHRINK|GTK_FILL, + GTK_EXPAND | GTK_FILL, + GTK_FILL, 0, 0); } @@ -185,6 +207,7 @@ create_label (const gchar *text) label_name = g_strdup_printf ("%s:", text); label = gtk_label_new (label_name); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); g_free (label_name); return label; @@ -197,36 +220,46 @@ static GtkWidget* create_updating_page (ModestGnomeGlobalSettingsDialog *self) { GtkWidget *vbox, *table_update, *table_limit; - GtkWidget *label, *check, *combo, *spin; - ModestPairList *list; + GtkWidget *label; + ModestGlobalSettingsDialogPrivate *ppriv; - vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_DEFAULT); + ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); + + vbox = gtk_vbox_new (FALSE, 0); table_update = gtk_table_new (3, 2, FALSE); table_limit = gtk_table_new (2, 2, FALSE); /* FIXME: set proper values (HIG) */ - gtk_table_set_row_spacings (GTK_TABLE (table_update), 6); + gtk_table_set_row_spacings (GTK_TABLE (table_update), 3); gtk_table_set_col_spacings (GTK_TABLE (table_update), 12); - gtk_table_set_row_spacings (GTK_TABLE (table_limit), 6); + gtk_table_set_row_spacings (GTK_TABLE (table_limit), 3); gtk_table_set_col_spacings (GTK_TABLE (table_limit), 12); /* Autoupdate */ label = create_label (_("mcen_fi_options_autoupdate")); - check = gtk_check_button_new (); - add_to_table (GTK_TABLE (table_update), label, check); + ppriv->auto_update = gtk_check_button_new (); + add_to_table (GTK_TABLE (table_update), label, ppriv->auto_update); /* Connected via */ label = create_label (_("mcen_fi_options_connectiontype")); - list = _modest_global_settings_dialog_get_connected_via (); - combo = modest_combo_box_new (list, g_int_equal); - modest_pair_list_free (list); - add_to_table (GTK_TABLE (table_update), label, combo); + + /* Note: This ModestPairList* must exist for as long as the combo + * that uses it, because the ModestComboBox uses the ID opaquely, + * so it can't know how to manage its memory. */ + ppriv->connect_via_list = _modest_global_settings_dialog_get_connected_via (); + ppriv->connect_via = modest_combo_box_new (ppriv->connect_via_list, g_int_equal); + + add_to_table (GTK_TABLE (table_update), label, ppriv->connect_via); /* Update interval */ label = create_label (_("mcen_fi_options_updateinterval")); - list = _modest_global_settings_dialog_get_update_interval (); - combo = modest_combo_box_new (list, g_int_equal); - modest_pair_list_free (list); - add_to_table (GTK_TABLE (table_update), label, combo); + + /* Note: This ModestPairList* must exist for as long as the combo + * that uses it, because the ModestComboBox uses the ID opaquely, + * so it can't know how to manage its memory. */ + ppriv->update_interval_list = _modest_global_settings_dialog_get_update_interval (); + ppriv->update_interval = modest_combo_box_new (ppriv->update_interval_list, g_int_equal); + + add_to_table (GTK_TABLE (table_update), label, ppriv->update_interval); /* Add to vbox */ gtk_box_pack_start (GTK_BOX (vbox), table_update, FALSE, FALSE, MODEST_MARGIN_HALF); @@ -236,16 +269,17 @@ create_updating_page (ModestGnomeGlobalSettingsDialog *self) /* Limits */ label = create_label (_("mcen_fi_advsetup_sizelimit")); - spin = gtk_spin_button_new (GTK_ADJUSTMENT (gtk_adjustment_new (1000, 1, 5000, 1, 1, 16)), - 1, 0); - add_to_table (GTK_TABLE (table_limit), label, spin); + ppriv->size_limit = gtk_spin_button_new (GTK_ADJUSTMENT (gtk_adjustment_new (1000, 1, 5000, 1, 1, 16)), + 1, 0); + add_to_table (GTK_TABLE (table_limit), label, ppriv->size_limit); label = create_label (_("mcen_fi_options_playsound")); - check = gtk_check_button_new (); - add_to_table (GTK_TABLE (table_limit), label, check); + ppriv->play_sound = gtk_check_button_new (); + add_to_table (GTK_TABLE (table_limit), label, ppriv->play_sound); /* Add to vbox */ gtk_box_pack_start (GTK_BOX (vbox), table_limit, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); return vbox; } @@ -257,28 +291,116 @@ static GtkWidget* create_composing_page (ModestGnomeGlobalSettingsDialog *self) { GtkWidget *vbox, *table; - GtkWidget *label, *check, *combo; - ModestPairList *list; + GtkWidget *label; vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_DEFAULT); table = gtk_table_new (2, 2, FALSE); /* FIXME: set proper values */ - gtk_table_set_row_spacings (GTK_TABLE (table), 6); + gtk_table_set_row_spacings (GTK_TABLE (table), 3); gtk_table_set_col_spacings (GTK_TABLE (table), 12); /* Update interval */ label = create_label (_("mcen_fi_options_messageformat")); - list = _modest_global_settings_dialog_get_msg_formats (); - combo = modest_combo_box_new (list, g_int_equal); - modest_pair_list_free (list); - add_to_table (GTK_TABLE (table), label, combo); - label = create_label (_("mcen_va_options_include_original_inreply")); - check = gtk_check_button_new (); - add_to_table (GTK_TABLE (table), label, check); + ModestGlobalSettingsDialogPrivate *ppriv = + MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); + + /* Note: This ModestPairList* must exist for as long as the combo + * that uses it, because the ModestComboBox uses the ID opaquely, + * so it can't know how to manage its memory. */ + ppriv->msg_format_list = _modest_global_settings_dialog_get_msg_formats (); + ppriv->msg_format = modest_combo_box_new (ppriv->msg_format_list, g_int_equal); + + add_to_table (GTK_TABLE (table), label, ppriv->msg_format); /* Add to vbox */ - gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); return vbox; } + +static ModestConnectedVia +current_connection (void) +{ + return MODEST_CONNECTED_VIA_ANY; +} + +static void +modest_gnome_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self) +{ + ModestConf *conf; + gboolean checked; + gint combo_id, value; + GError *error = NULL; + ModestGlobalSettingsDialogPrivate *priv; + + priv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); + conf = modest_runtime_get_conf (); + + /* Autoupdate */ + checked = modest_conf_get_bool (conf, MODEST_CONF_AUTO_UPDATE, &error); + if (error) { + g_clear_error (&error); + error = NULL; + checked = FALSE; + } + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->auto_update), checked); + priv->initial_state.auto_update = checked; + + /* Connected by */ + combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, &error); + if (error) { + g_error_free (error); + error = NULL; + combo_id = MODEST_CONNECTED_VIA_WLAN_OR_WIMAX; + } + modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->connect_via), + (gpointer) &combo_id); + priv->initial_state.connect_via = combo_id; + + /* Update interval */ + combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_INTERVAL, &error); + if (error) { + g_error_free (error); + error = NULL; + combo_id = MODEST_UPDATE_INTERVAL_15_MIN; + } + modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->update_interval), + (gpointer) &combo_id); + priv->initial_state.update_interval = combo_id; + + /* Size limit */ + value = modest_conf_get_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, &error); + if (error) { + g_error_free (error); + error = NULL; + value = 1000; + } + /* It's better to do this in the subclasses, but it's just one + line, so we'll leave it here for the moment */ + gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->size_limit), value); + priv->initial_state.size_limit = value; + + /* Play sound */ + checked = modest_conf_get_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, &error); + if (error) { + g_error_free (error); + error = NULL; + checked = FALSE; + } + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->play_sound), checked); + priv->initial_state.play_sound = checked; + + /* Msg format */ + checked = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error); + if (error) { + g_error_free (error); + error = NULL; + combo_id = MODEST_FILE_FORMAT_FORMATTED_TEXT; + } + combo_id = (checked) ? MODEST_FILE_FORMAT_FORMATTED_TEXT : MODEST_FILE_FORMAT_PLAIN_TEXT; + modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->msg_format), + (gpointer) &combo_id); + priv->initial_state.prefer_formatted_text = checked; +}