X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-wizard-dialog.c;h=930090ac6cbae6ef546e98e497e48e67479bd9d3;hp=eca8b2ec61167a099f585f69c2d9ad595e4485d2;hb=d54e0da879b16a8af8eae3dec80c0a405b21146a;hpb=e4f8cf4c72ba268ddb81c59bf9c4b6057b1cb3f8 diff --git a/src/widgets/modest-wizard-dialog.c b/src/widgets/modest-wizard-dialog.c index eca8b2e..930090a 100644 --- a/src/widgets/modest-wizard-dialog.c +++ b/src/widgets/modest-wizard-dialog.c @@ -97,6 +97,8 @@ static void make_buttons_sensitive (ModestWizardDialog *wizard_dialog, static gboolean invoke_before_next_vfunc (ModestWizardDialog *wizard_dialog); static void invoke_enable_buttons_vfunc (ModestWizardDialog *wizard_dialog); +static void invoke_update_model_vfunc (ModestWizardDialog *wizard_dialog); +static gboolean invoke_save_vfunc (ModestWizardDialog *wizard_dialog); enum { PROP_ZERO, @@ -159,6 +161,11 @@ class_init (ModestWizardDialogClass *wizard_dialog_class) object_class->get_property = get_property; object_class->finalize = finalize; + wizard_dialog_class->before_next = NULL; + wizard_dialog_class->update_model = NULL; + wizard_dialog_class->save = NULL; + wizard_dialog_class->enable_buttons = NULL; + /** * ModestWizardDialog:wizard-name: * @@ -276,10 +283,14 @@ init (ModestWizardDialog *wizard_dialog) priv->autotitle = TRUE; /* Build wizard layout */ - gtk_box_pack_start_defaults (GTK_BOX (dialog->vbox), GTK_WIDGET (priv->box)); - gtk_box_pack_start_defaults (GTK_BOX (priv->box), GTK_WIDGET (vbox)); - if (priv->image) - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (priv->image), FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (dialog->vbox), GTK_WIDGET (priv->box), TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (priv->box), GTK_WIDGET (vbox), FALSE, FALSE, 0); + gtk_widget_show (vbox); + gtk_widget_show (GTK_WIDGET (priv->box)); + if (priv->image) { + gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (priv->image), TRUE, TRUE, 0); + gtk_widget_show (priv->image); + } /* Add response buttons: finish, previous, next, cancel */ #ifdef MODEST_TOOLKIT_HILDON1 @@ -303,12 +314,12 @@ init (ModestWizardDialog *wizard_dialog) /* Set initial button states: previous and finish buttons are disabled */ make_buttons_sensitive (wizard_dialog, FALSE, FALSE, TRUE); - /* Show all the internal widgets */ - gtk_widget_show_all (GTK_WIDGET (dialog->vbox)); + gtk_widget_show (GTK_WIDGET (dialog->vbox)); /* connect to dialog's response signal */ g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (response), NULL); + } #if GTK_CHECK_VERSION(2, 10, 0) /* These signals were added in GTK+ 2.10: */ @@ -342,6 +353,17 @@ static void on_notebook_page_removed(GtkNotebook *notebook, #endif /* GTK_CHECK_VERSION */ static void +on_notebook_switch_page (GtkNotebook *notebook, + GtkNotebookPage *page, + guint page_num, + ModestWizardDialog *self) +{ + g_return_if_fail (MODEST_IS_WIZARD_DIALOG(self)); + + create_title (self); +} + +static void connect_to_notebook_signals(ModestWizardDialog* dialog) { #if GTK_CHECK_VERSION(2, 10, 0) /* These signals were added in GTK+ 2.10: */ @@ -355,6 +377,8 @@ connect_to_notebook_signals(ModestWizardDialog* dialog) g_signal_connect (G_OBJECT (priv->notebook), "page-removed", G_CALLBACK (on_notebook_page_removed), dialog); #endif /* GTK_CHECK_VERSION */ + g_signal_connect_after (G_OBJECT (priv->notebook), "switch-page", + G_CALLBACK (on_notebook_switch_page), dialog); } @@ -411,7 +435,7 @@ set_property (GObject *object, * and remove borders) to make it look like a nice wizard widget */ gtk_notebook_set_show_tabs (priv->notebook, FALSE); gtk_notebook_set_show_border (priv->notebook, FALSE); - gtk_box_pack_start_defaults (GTK_BOX( priv->box), GTK_WIDGET (priv->notebook)); + gtk_box_pack_start (GTK_BOX( priv->box), GTK_WIDGET (priv->notebook), TRUE, TRUE, 0); /* Show the notebook so that a gtk_widget_show on the dialog is * all that is required to display the dialog correctly */ @@ -466,48 +490,33 @@ create_title (ModestWizardDialog *wizard_dialog) gchar *str = NULL; ModestWizardDialogPrivate *priv = NULL; GtkNotebook *notebook = NULL; + gint pages, current; + const gchar *steps; g_return_if_fail (MODEST_IS_WIZARD_DIALOG(wizard_dialog)); g_return_if_fail (wizard_dialog->priv != NULL); - priv = wizard_dialog->priv; + priv = wizard_dialog->priv; notebook = priv->notebook; if (!notebook) return; /* Get page information, we'll need that when creating title */ - gint pages = gtk_notebook_get_n_pages (notebook); + pages = gtk_notebook_get_n_pages (notebook); if (pages == 0) - return; - - gint current = gtk_notebook_get_current_page (priv->notebook); + return; + + current = gtk_notebook_get_current_page (priv->notebook); if (current < 0) - current = 0; - - /* the welcome title on the initial page */ - /* This is the standard wizard title, with, e.g., 1/4 at the end, - * but the Modest UI spec does not want this. */ - /* - if (current == 0) { - str = g_strdup_printf (_HL("ecdg_ti_wizard_welcome"), - priv->wizard_name, pages); - } else { - */ - const gchar *steps = gtk_notebook_get_tab_label_text (notebook, - gtk_notebook_get_nth_page (notebook, current)); - - /* This is the standard wizard title, with, e.g., 1/4 at the end, - * but the Modest UI spec does not want this. - */ - /* - str = g_strdup_printf (_HL("ecdg_ti_wizard_step"), - priv->wizard_name, current + 1, pages, steps); - */ - - str = g_strdup_printf ((steps&&*steps)?_HL("%s: %s"):_HL("%s"), - priv->wizard_name, steps); - /* } */ + current = 0; + + steps = gtk_notebook_get_tab_label_text (notebook, + gtk_notebook_get_nth_page (notebook, current)); + + str = g_strdup_printf ((steps&&*steps)?_HL("%s%s %s"):_HL("%s"), + priv->wizard_name, _HL("ecdg_ti_caption_separator"), + steps); /* Update the dialog to display the generated title */ gtk_window_set_title (GTK_WINDOW (wizard_dialog), str); @@ -705,6 +714,30 @@ invoke_enable_buttons_vfunc (ModestWizardDialog *wizard_dialog) } } +static void +invoke_update_model_vfunc (ModestWizardDialog *wizard_dialog) +{ + ModestWizardDialogClass *klass = MODEST_WIZARD_DIALOG_GET_CLASS (wizard_dialog); + + /* Call the vfunc, which may be overridden by derived classes: */ + if (klass->update_model) { + (*(klass->update_model)) (wizard_dialog); + } +} + +static gboolean +invoke_save_vfunc (ModestWizardDialog *wizard_dialog) +{ + ModestWizardDialogClass *klass = MODEST_WIZARD_DIALOG_GET_CLASS (wizard_dialog); + + /* Call the vfunc, which may be overridden by derived classes: */ + if (klass->save) { + return (*(klass->save)) (wizard_dialog); + } else { + return TRUE; + } +} + void modest_wizard_dialog_set_response_override_handler (ModestWizardDialog *wizard_dialog, ModestWizardDialogResponseOverrideFunc callback) @@ -713,3 +746,19 @@ modest_wizard_dialog_set_response_override_handler (ModestWizardDialog *wizard_d priv->override_func = callback; } + +void +modest_wizard_dialog_update_model (ModestWizardDialog *wizard_dialog) +{ + g_return_if_fail (MODEST_IS_WIZARD_DIALOG (wizard_dialog)); + + invoke_update_model_vfunc (wizard_dialog); +} + +gboolean +modest_wizard_dialog_save (ModestWizardDialog *wizard_dialog) +{ + g_return_val_if_fail (MODEST_IS_WIZARD_DIALOG (wizard_dialog), FALSE); + + return invoke_save_vfunc (wizard_dialog); +}