* Added code to manage folder creation
authorSergio Villar Senin <svillar@igalia.com>
Tue, 24 Apr 2007 17:44:01 +0000 (17:44 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Tue, 24 Apr 2007 17:44:01 +0000 (17:44 +0000)
* Added confirmation dialog of delete folder

pmo-trunk-r1656

src/gnome/modest-platform.c
src/maemo/modest-platform.c
src/modest-platform.h
src/modest-ui-actions.c

index e763f7d..f89c112 100644 (file)
@@ -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;
 }
index aed9c8e..5280a21 100644 (file)
 #endif /*MODEST_HILDON_VERSION_0*/
 
 #include <tny-maemo-conic-device.h>
+#include <tny-folder.h>
 #include <gtk/gtkicontheme.h>
 #include <hildon-widgets/hildon-banner.h>
+#include <hildon-widgets/hildon-note.h>
 #include <gtk/gtkmenuitem.h>
 #include <gtk/gtkmain.h>
 #include <string.h>
 
-#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;
 }
index ffcd61a..557aee9 100644 (file)
 
 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
 
index cc73773..5a3ba73 100644 (file)
@@ -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));
 }