2007-04-30 Murray Cumming <murrayc@murrayc.com>
[modest] / src / maemo / modest-platform.c
index 5280a21..8d6ba12 100644 (file)
 #include <config.h>
 #include <glib/gi18n.h>
 #include <modest-platform.h>
-#include <dbus_api/modest-dbus-callbacks.h>
-#include <libosso.h>
+#include <modest-runtime.h>
+#include <modest-main-window.h>
+#include <modest-header-view.h>
 
-#ifdef MODEST_HILDON_VERSION_0
-#include <osso-mime.h>
-#include <osso-uri.h>
-#else
-#include <hildon-mime.h>
-#include <hildon-uri.h>
-#endif /*MODEST_HILDON_VERSION_0*/
+#include <modest-hildon-includes.h>
 
+#include <dbus_api/modest-dbus-callbacks.h>
+#include <libosso.h>
 #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>
@@ -396,6 +391,106 @@ entry_changed (GtkEditable *editable,
        g_free (chars);
 }
 
+static void
+launch_sort_headers_dialog (GtkWindow *parent_window,
+                           HildonSortDialog *dialog)
+{
+       ModestHeaderView *header_view = NULL;
+       GList *cols = NULL;
+       GList *tmp = NULL;
+       GtkSortType sort_type;
+       gint sort_key;
+       gint result;
+       
+       /* Get header window */
+       if (MODEST_IS_MAIN_WINDOW (parent_window)) {
+               header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(parent_window),
+                                                                                     MODEST_WIDGET_TYPE_HEADER_VIEW));
+       }
+       if (!header_view) return;
+
+       /* Add sorting keys */
+       cols = modest_header_view_get_columns (header_view);    
+       if (cols == NULL) return;
+       int num_cols = g_list_length(cols);
+       int sort_ids[num_cols];
+       int sort_model_ids[num_cols];
+       GtkTreeViewColumn *sort_cols[num_cols];
+       for (tmp=cols; tmp; tmp=tmp->next) {
+               gint col_id = GPOINTER_TO_INT (g_object_get_data(G_OBJECT(tmp->data), MODEST_HEADER_VIEW_COLUMN));
+               switch (col_id) {
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_attachment"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_HEADER_FLAG_ATTACHMENTS;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_priority"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_HEADER_FLAG_PRIORITY;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_TO_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FROM_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN;
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN,
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
+                       sort_key = hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"));
+                       sort_ids[sort_key] = col_id;
+                       sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN,
+                       sort_cols[sort_key] = tmp->data;
+                       break;
+               default:
+                       return;
+               }
+       }
+       
+       /* Launch dialogs */
+       result = gtk_dialog_run (GTK_DIALOG (dialog));
+       if (result == GTK_RESPONSE_OK) {
+               sort_key = hildon_sort_dialog_get_sort_key (dialog);
+               sort_type = hildon_sort_dialog_get_sort_order (dialog);
+               if (sort_ids[sort_key] == MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG)
+                       g_object_set_data(G_OBJECT(sort_cols[sort_key]), 
+                                         MODEST_HEADER_VIEW_FLAG_SORT, 
+                                         GINT_TO_POINTER(sort_model_ids[sort_key]));
+               
+               else
+                       gtk_tree_view_column_set_sort_column_id (sort_cols[sort_key], sort_model_ids[sort_key]);
+               
+               modest_header_view_sort_by_column_id (header_view, sort_ids[sort_key], sort_type);
+       }
+       
+       /* free */
+       g_list_free(cols);      
+}
+
+
+
 gint
 modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
                                       TnyFolderStore *parent_folder,
@@ -459,28 +554,76 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
 
 gint
 modest_platform_run_confirmation_dialog (GtkWindow *parent_window,
-                                        ModestConfirmationDialogType type,
-                                        gpointer user_data)
+                                        const gchar *message)
 {
        GtkWidget *dialog;
        gint response;
+
+       dialog = hildon_note_new_confirmation (parent_window, message);
+
+       response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+       gtk_widget_destroy (GTK_WIDGET (dialog));
+
+       return response;
+}
+
+void
+modest_platform_run_information_dialog (GtkWindow *parent_window,
+                                       ModestInformationDialogType type)
+{
+       GtkWidget *dialog;
        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));
+       case MODEST_INFORMATION_CREATE_FOLDER:
+               message = _("mail_in_ui_folder_create_error");
+               break;
+       case MODEST_INFORMATION_DELETE_FOLDER:
+               message = _("mail_in_ui_folder_delete_error");
                break;
        };
 
-       dialog = hildon_note_new_confirmation (parent_window, message);
+       dialog = hildon_note_new_information (parent_window, message);
 
-       response = gtk_dialog_run (GTK_DIALOG (dialog));
+       gtk_dialog_run (GTK_DIALOG (dialog));
 
        gtk_widget_destroy (GTK_WIDGET (dialog));
-       g_free (message);
+}
 
-       return response;
+gboolean modest_platform_connect_and_wait (GtkWindow *parent_window)
+{
+       TnyDevice *device = modest_runtime_get_device();
+       
+       if (tny_device_is_online (device))
+               return TRUE;
+               
+       /* TODO: Block on the result: */
+       gboolean request_sent = tny_maemo_conic_device_connect (TNY_MAEMO_CONIC_DEVICE (device), NULL);
+       if (!request_sent)
+               return FALSE;
+
+       return TRUE;
+}
+
+void
+modest_platform_run_sort_dialog (GtkWindow *parent_window,
+                                ModestSortDialogType type)
+{
+       GtkWidget *dialog = NULL;
+
+       /* Build dialog */
+       dialog = hildon_sort_dialog_new (parent_window);
+       gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
+       
+       /* Fill sort keys */
+       switch (type) {
+       case MODEST_SORT_HEADERS:
+               launch_sort_headers_dialog (parent_window, 
+                                           HILDON_SORT_DIALOG(dialog));
+               break;
+       }
+       
+       /* Free */
+       gtk_widget_destroy (GTK_WIDGET (dialog));
 }