From: Sergio Villar Senin Date: Tue, 24 Apr 2007 17:44:01 +0000 (+0000) Subject: * Added code to manage folder creation X-Git-Tag: git_migration_finished~3801 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=50e7fce7784beb3539aaa2888db3afb6dfef1f9c * Added code to manage folder creation * Added confirmation dialog of delete folder pmo-trunk-r1656 --- diff --git a/src/gnome/modest-platform.c b/src/gnome/modest-platform.c index e763f7d..f89c112 100644 --- a/src/gnome/modest-platform.c +++ b/src/gnome/modest-platform.c @@ -121,19 +121,21 @@ modest_platform_get_app_name (void) return ("Modest"); } -gboolean -modest_platform_run_new_folder_dialog (ModestWindow *parent_window, - TnyFolderStore *parent_folder) +gint +modest_platform_run_new_folder_dialog (GtkWindow *parent_window, + TnyFolderStore *parent_folder, + gchar *suggested_name, + gchar **folder_name) { GtkWidget *dialog, *entry; - gchar *folder_name; gboolean finished = FALSE; + gint result; TnyFolder *new_folder; ModestMailOperation *mail_op; /* Ask the user for the folder name */ dialog = gtk_dialog_new_with_buttons (_("New Folder Name"), - GTK_WINDOW (parent_window), + parent_window, GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, @@ -150,30 +152,26 @@ modest_platform_run_new_folder_dialog (ModestWindow *parent_window, TRUE, FALSE, 0); gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); - - if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_REJECT) { - gtk_widget_destroy (dialog); - return TRUE; - } - folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); + result = gtk_dialog_run (GTK_DIALOG(dialog)); + if (result == GTK_RESPONSE_ACCEPT) + *folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); + gtk_widget_destroy (dialog); - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - new_folder = modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name); - if (new_folder) { - g_object_unref (new_folder); - finished = TRUE; - } + return result; +} - /* Frees */ - g_object_unref (mail_op); - g_free (folder_name); +gint +modest_platform_run_confirmation_dialog (GtkWindow *parent_window, + ModestConfirmationDialogType type, + gpointer user_data) +{ + switch (type) { + case MODEST_CONFIRMATION_DELETE_FOLDER: + break; + }; - return finished; + /* TODO implement confirmation dialog */ + return GTK_RESPONSE_CANCEL; } diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index aed9c8e..5280a21 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -42,15 +42,14 @@ #endif /*MODEST_HILDON_VERSION_0*/ #include +#include #include #include +#include #include #include #include -#include "modest-mail-operation-queue.h" -#include "modest-runtime.h" - gboolean modest_platform_init (void) { @@ -351,14 +350,17 @@ entry_insert_text (GtkEditable *editable, _("mcen_ib_maxchar_reached")); } else { if (chars_length == 0) { - GtkWidget *ok_button; - GList *buttons; - - /* Show OK button */ - buttons = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (data)->action_area)); - ok_button = GTK_WIDGET (buttons->next->data); - gtk_widget_set_sensitive (ok_button, TRUE); - g_list_free (buttons); + /* A blank space is not valid as first character */ + if (strcmp (text, " ")) { + GtkWidget *ok_button; + GList *buttons; + + /* Show OK button */ + buttons = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (data)->action_area)); + ok_button = GTK_WIDGET (buttons->next->data); + gtk_widget_set_sensitive (ok_button, TRUE); + g_list_free (buttons); + } } /* Write the text in the entry */ @@ -394,19 +396,18 @@ entry_changed (GtkEditable *editable, g_free (chars); } -gboolean -modest_platform_run_new_folder_dialog (ModestWindow *parent_window, - TnyFolderStore *parent_folder) +gint +modest_platform_run_new_folder_dialog (GtkWindow *parent_window, + TnyFolderStore *parent_folder, + gchar *suggested_name, + gchar **folder_name) { GtkWidget *dialog, *entry, *label, *hbox; - gchar *folder_name; - gboolean finished = FALSE; - TnyFolder *new_folder; - ModestMailOperation *mail_op; + gint result; /* Ask the user for the folder name */ dialog = gtk_dialog_new_with_buttons (_("mcen_ti_new_folder"), - GTK_WINDOW (parent_window), + parent_window, GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, @@ -415,9 +416,15 @@ modest_platform_run_new_folder_dialog (ModestWindow *parent_window, NULL); /* Create label and entry */ - label = gtk_label_new (_("mcen_fi_new_folder_name")), + label = gtk_label_new (_("mcen_fi_new_folder_name")); + /* TODO: check that the suggested name does not exist */ + /* We set 21 as maximum because we want to show WID-INF036 + when the user inputs more that 20 */ entry = gtk_entry_new_with_max_length (21); - gtk_entry_set_text (GTK_ENTRY (entry), _("mcen_ia_default_folder_name")); + if (suggested_name) + gtk_entry_set_text (GTK_ENTRY (entry), suggested_name); + else + gtk_entry_set_text (GTK_ENTRY (entry), _("mcen_ia_default_folder_name")); gtk_entry_select_region (GTK_ENTRY (entry), 0, -1); /* Track entry changes */ @@ -441,29 +448,39 @@ modest_platform_run_new_folder_dialog (ModestWindow *parent_window, gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); - if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_REJECT) { - gtk_widget_destroy (dialog); - return TRUE; - } + result = gtk_dialog_run (GTK_DIALOG(dialog)); + if (result == GTK_RESPONSE_ACCEPT) + *folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); - folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); gtk_widget_destroy (dialog); - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - - new_folder = modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name); - if (new_folder) { - g_object_unref (new_folder); - finished = TRUE; - } + return result; +} + +gint +modest_platform_run_confirmation_dialog (GtkWindow *parent_window, + ModestConfirmationDialogType type, + gpointer user_data) +{ + GtkWidget *dialog; + gint response; + gchar *message = NULL; + TnyFolder *folder; + + switch (type) { + case MODEST_CONFIRMATION_DELETE_FOLDER: + folder = TNY_FOLDER (user_data); + message = g_strdup_printf (_("mcen_nc_delete_folder_text"), + tny_folder_get_name (folder)); + break; + }; + + dialog = hildon_note_new_confirmation (parent_window, message); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); - /* Frees */ - g_object_unref (mail_op); - g_free (folder_name); + gtk_widget_destroy (GTK_WIDGET (dialog)); + g_free (message); - return finished; + return response; } diff --git a/src/modest-platform.h b/src/modest-platform.h index ffcd61a..557aee9 100644 --- a/src/modest-platform.h +++ b/src/modest-platform.h @@ -35,6 +35,10 @@ G_BEGIN_DECLS +typedef enum _ModestConfirmationDialogType { + MODEST_CONFIRMATION_DELETE_FOLDER, +} ModestConfirmationDialogType; + /** * modest_platform_platform_init: * @@ -111,8 +115,28 @@ GdkPixbuf* modest_platform_get_icon (const gchar *name); const gchar* modest_platform_get_app_name (void); -gboolean modest_platform_run_new_folder_dialog (ModestWindow *parent_window, - TnyFolderStore *parent); +/** + * modest_platform_run_new_folder_dialog: + * @parent_window: a #GtkWindow + * @parent: the parent of the new folder + * @suggested_name: the suggested name for the new folder + * @folder_name: the folder name selected by the user for the new folder + * + * runs a "new folder" confirmation dialog. The dialog will suggest a + * folder name which depends of the platform if the #suggested_name + * parametter is NULL. If the user input a valid folder name it's + * returned in the #folder_name attribute. + * + * Returns: the #GtkResponseType returned by the dialog + **/ +gint modest_platform_run_new_folder_dialog (GtkWindow *parent_window, + TnyFolderStore *parent, + gchar *suggested_name, + gchar **folder_name); + +gint modest_platform_run_confirmation_dialog (GtkWindow *parent_window, + ModestConfirmationDialogType type, + gpointer user_data); G_END_DECLS diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index cc73773..5a3ba73 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -1266,9 +1266,44 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_windo parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (parent_folder) { + gboolean finished = FALSE; + gint result; + gchar *folder_name = NULL, *suggested_name = NULL; + /* Run the new folder dialog */ - while (!modest_platform_run_new_folder_dialog (MODEST_WINDOW (main_window), - parent_folder)); + while (!finished) { + result = modest_platform_run_new_folder_dialog (GTK_WINDOW (main_window), + parent_folder, + suggested_name, + &folder_name); + + if (result == GTK_RESPONSE_REJECT) { + finished = TRUE; + } else { + ModestMailOperation *mail_op = modest_mail_operation_new (); + TnyFolder *new_folder; + + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + + new_folder = modest_mail_operation_create_folder (mail_op, + parent_folder, + (const gchar *) folder_name); + if (new_folder) { + g_object_unref (new_folder); + finished = TRUE; + } else { + const GError *error; + error = modest_mail_operation_get_error (mail_op); + g_printerr ("%s", error->message); + /* TODO: check error and follow proper actions */ +/* suggested_name = X; */ + } + g_object_unref (mail_op); + } + g_free (folder_name); + folder_name = NULL; + } g_object_unref (parent_folder); } @@ -1317,8 +1352,8 @@ static void delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) { TnyFolderStore *folder; - ModestMailOperation *mail_op; GtkWidget *folder_view; + gint response; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -1328,13 +1363,21 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) return; folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); - - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); - modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), move_to_trash); - g_object_unref (G_OBJECT (mail_op)); + /* Ask the user */ + response = modest_platform_run_confirmation_dialog (GTK_WINDOW (main_window), + MODEST_CONFIRMATION_DELETE_FOLDER, + folder); + + if (response == GTK_RESPONSE_OK) { + ModestMailOperation *mail_op = modest_mail_operation_new (); + + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), move_to_trash); + g_object_unref (G_OBJECT (mail_op)); + } + g_object_unref (G_OBJECT (folder)); }