From: Sergio Villar Senin Date: Tue, 24 Apr 2007 13:24:03 +0000 (+0000) Subject: * Added new folder dialog X-Git-Tag: git_migration_finished~3806 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=c5637dfb0beccca9e090c874336a387277433ab6;hp=fc8e99317858ef896975d8899540d2ae39ea566b * Added new folder dialog * Added WID-INF036 * Added code to manage the new folder dialog pmo-trunk-r1651 --- diff --git a/src/gnome/modest-platform.c b/src/gnome/modest-platform.c index e6bab3a..e763f7d 100644 --- a/src/gnome/modest-platform.c +++ b/src/gnome/modest-platform.c @@ -27,11 +27,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include -#include + +#include "modest-platform.h" +#include "modest-mail-operation-queue.h" +#include "modest-runtime.h" gboolean modest_platform_init (void) @@ -116,5 +118,62 @@ modest_platform_get_icon (const gchar *name) const gchar* modest_platform_get_app_name (void) { - return ("modest"); + return ("Modest"); +} + +gboolean +modest_platform_run_new_folder_dialog (ModestWindow *parent_window, + TnyFolderStore *parent_folder) +{ + GtkWidget *dialog, *entry; + gchar *folder_name; + gboolean finished = FALSE; + 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), + GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + NULL); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), + gtk_label_new (_("Please enter a name for the new folder")), + FALSE, FALSE, 0); + + entry = gtk_entry_new_with_max_length (40); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), + entry, + 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))); + 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; + } + + /* Frees */ + g_object_unref (mail_op); + g_free (folder_name); + + return finished; } diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index 0542ff8..d09e0fa 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -48,6 +48,9 @@ #include #include +#include "modest-mail-operation-queue.h" +#include "modest-runtime.h" + gboolean modest_platform_init (void) { @@ -328,3 +331,139 @@ modest_platform_get_app_name (void) { return _("mcen_ap_name"); } + +static void +entry_insert_text (GtkEditable *editable, + const gchar *text, + gint length, + gint *position, + gpointer data) +{ + gchar *chars; + gint chars_length; + + chars = gtk_editable_get_chars (editable, 0, -1); + chars_length = strlen (chars); + + /* Show WID-INF036 */ + if (chars_length == 20) { + hildon_banner_show_information (gtk_widget_get_parent (GTK_WIDGET (data)), NULL, + _("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); + } + + /* Write the text in the entry */ + g_signal_handlers_block_by_func (editable, + (gpointer) entry_insert_text, data); + gtk_editable_insert_text (editable, text, length, position); + g_signal_handlers_unblock_by_func (editable, + (gpointer) entry_insert_text, data); + } + /* Do not allow further processing */ + g_signal_stop_emission_by_name (editable, "insert_text"); +} + +static void +entry_changed (GtkEditable *editable, + gpointer user_data) +{ + gchar *chars; + + chars = gtk_editable_get_chars (editable, 0, -1); + + /* Dimm OK button */ + if (strlen (chars) == 0) { + GtkWidget *ok_button; + GList *buttons; + + buttons = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (user_data)->action_area)); + ok_button = GTK_WIDGET (buttons->next->data); + gtk_widget_set_sensitive (ok_button, FALSE); + + g_list_free (buttons); + } + g_free (chars); +} + +gboolean +modest_platform_run_new_folder_dialog (ModestWindow *parent_window, + TnyFolderStore *parent_folder) +{ + GtkWidget *dialog, *entry, *label, *hbox; + gchar *folder_name; + gboolean finished = FALSE; + TnyFolder *new_folder; + ModestMailOperation *mail_op; + + /* Ask the user for the folder name */ + dialog = gtk_dialog_new_with_buttons (_("mcen_ti_new_folder"), + GTK_WINDOW (parent_window), + GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_OK, + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + /* Create label and entry */ + label = gtk_label_new (_("mcen_fi_new_folder_name")), + entry = gtk_entry_new_with_max_length (21); + gtk_entry_set_text (GTK_ENTRY (entry), _("mcen_ia_default_folder_name")); + gtk_entry_select_region (GTK_ENTRY (entry), 0, -1); + + /* Track entry changes */ + g_signal_connect (entry, + "insert-text", + G_CALLBACK (entry_insert_text), + dialog); + g_signal_connect (entry, + "changed", + G_CALLBACK (entry_changed), + dialog); + + /* Create the hbox */ + hbox = gtk_hbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, FALSE, 0); + + /* Add hbox to dialog */ + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), + hbox, FALSE, 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))); + 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; + } + + /* Frees */ + g_object_unref (mail_op); + g_free (folder_name); + + return finished; +} diff --git a/src/modest-platform.h b/src/modest-platform.h index 2748f7b..ffcd61a 100644 --- a/src/modest-platform.h +++ b/src/modest-platform.h @@ -30,9 +30,8 @@ #ifndef __MODEST_PLATFORM_H__ #define __MODEST_PLATFORM_H__ -#include -#include #include +#include "widgets/modest-window.h" G_BEGIN_DECLS @@ -111,6 +110,10 @@ 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); + G_END_DECLS #endif /* __MODEST_PLATFORM_UTILS_H__ */ diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 6dc7dab..cc73773 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -1266,27 +1266,10 @@ 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) { - gchar *folder_name; - - folder_name = ask_for_folder_name (GTK_WINDOW (main_window), - _("Please enter a name for the new folder")); - - if (folder_name != NULL && strlen (folder_name) > 0) { - TnyFolder *new_folder; - ModestMailOperation *mail_op; + /* Run the new folder dialog */ + while (!modest_platform_run_new_folder_dialog (MODEST_WINDOW (main_window), + parent_folder)); - 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); - g_object_unref (mail_op); - g_free (folder_name); - } g_object_unref (parent_folder); } } diff --git a/src/widgets/modest-folder-view.h b/src/widgets/modest-folder-view.h index ee38760..76186ce 100644 --- a/src/widgets/modest-folder-view.h +++ b/src/widgets/modest-folder-view.h @@ -104,7 +104,8 @@ void modest_folder_view_set_title (ModestFolderView *self, * modest_folder_view_get_selected: * @self: a #ModestFolderView * - * returns a new reference to the #TnyFolderStore that is already selected + * gets a new reference to the #TnyFolderStore that is already + * selected. The caller must free this reference * * Returns: the selected #TnyFolderStore or NULL if none is selected **/