* Connect iUIManager actions to sort dialog.
* Store sort settings into gconf configuration parameters.
pmo-trunk-r1711
ModestWindowPrivate *parent_priv = NULL;
GtkWidget *reply_button = NULL, *menu = NULL;
GtkWidget *placeholder = NULL;
- GtkWidget *tool_item = NULL;
gint insert_index;
parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
/* Set homogeneous toolbar */
gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar),
set_homogeneous, NULL);
+
+ priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
+ priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
+ priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
+ priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+ gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
/* Add ProgressBar (Transfer toolbar) */
priv->progress_bar = modest_progress_bar_widget_new ();
gtk_widget_set_no_show_all (priv->progress_bar, TRUE);
placeholder = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ProgressBarView");
insert_index = gtk_toolbar_get_item_index(GTK_TOOLBAR (parent_priv->toolbar), GTK_TOOL_ITEM(placeholder));
- tool_item = GTK_WIDGET (gtk_tool_item_new ());
-/* gtk_widget_set_no_show_all (tool_item, TRUE); */
- gtk_container_add (GTK_CONTAINER (tool_item), priv->progress_bar);
-/* gtk_tool_item_set_expand (GTK_TOOL_ITEM (tool_item), TRUE); */
-/* gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (tool_item), TRUE); */
- gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (tool_item), insert_index);
+ gtk_container_add (GTK_CONTAINER (priv->progress_toolitem), priv->progress_bar);
+ gtk_toolbar_insert(GTK_TOOLBAR(parent_priv->toolbar), GTK_TOOL_ITEM (priv->progress_toolitem), insert_index);
- priv->progress_toolitem = tool_item;
- priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
- priv->refresh_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
- priv->sort_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
-
/* Add it to the observers list */
priv->progress_widgets = g_slist_prepend(priv->progress_widgets, priv->progress_bar);
set_toolbar_mode (ModestMainWindow *self,
ModestToolBarModes mode)
{
- ModestWindowPrivate *parent_priv;
ModestMainWindowPrivate *priv;
- GtkAction *sort_action, *refresh_action, *cancel_action;
g_return_if_fail (MODEST_IS_MAIN_WINDOW (self));
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
- parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
-
- cancel_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
- sort_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSort");
- refresh_action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/ToolbarSendReceive");
switch (mode) {
case TOOLBAR_MODE_NORMAL:
-/* gtk_action_set_visible (sort_action, TRUE); */
-/* gtk_action_set_visible (refresh_action, TRUE); */
-/* gtk_action_set_visible (cancel_action, FALSE); */
-/* gtk_widget_hide (priv->progress_toolitem); */
-/* gtk_widget_hide (priv->progress_bar); */
-
if (priv->sort_toolitem)
gtk_widget_show (priv->sort_toolitem);
if (priv->refresh_toolitem)
gtk_widget_show (priv->refresh_toolitem);
+ if (priv->progress_toolitem)
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
if (priv->progress_bar)
gtk_widget_hide (priv->progress_bar);
gtk_widget_hide (priv->cancel_toolitem);
break;
case TOOLBAR_MODE_TRANSFER:
-/* gtk_action_set_visible (sort_action, FALSE); */
-/* gtk_action_set_visible (refresh_action, FALSE); */
-/* gtk_action_set_visible (cancel_action, TRUE); */
-/* gtk_widget_show (priv->progress_toolitem); */
-/* gtk_widget_show (priv->progress_bar); */
-
if (priv->sort_toolitem)
gtk_widget_hide (priv->sort_toolitem);
if (priv->refresh_toolitem)
gtk_widget_hide (priv->refresh_toolitem);
+ if (priv->progress_toolitem)
+ gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
if (priv->progress_bar)
gtk_widget_show (priv->progress_bar);
gtk_widget_show (priv->cancel_toolitem);
break;
default:
-/* gtk_action_set_visible (sort_action, TRUE); */
-/* gtk_action_set_visible (refresh_action, TRUE); */
-/* gtk_action_set_visible (cancel_action, FALSE); */
-/* gtk_widget_hide (priv->progress_toolitem); */
-/* gtk_widget_hide (priv->progress_bar); */
-
if (priv->cancel_toolitem)
gtk_widget_show (priv->sort_toolitem);
{
GSList *tmp;
ModestMainWindowPrivate *priv;
-
+ ModestMailOperationId op_id;
+ ModestToolBarModes mode;
+
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ /* Get toolbar mode from operation id*/
+ op_id = modest_mail_operation_get_id (mail_op);
+ switch (op_id) {
+ case MODEST_MAIL_OPERATION_ID_SEND:
+ case MODEST_MAIL_OPERATION_ID_RECEIVE:
+ mode = TOOLBAR_MODE_TRANSFER;
+ break;
+ default:
+ mode = TOOLBAR_MODE_NORMAL;
+
+ }
+
+ /* Add operation observers and change toolbar if neccessary*/
tmp = priv->progress_widgets;
-
switch (type) {
case MODEST_MAIL_OPERATION_QUEUE_OPERATION_ADDED:
- set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_TRANSFER);
+ if (mode != TOOLBAR_MODE_NORMAL)
+ set_toolbar_mode (MODEST_MAIN_WINDOW(self), mode);
while (tmp) {
modest_progress_object_add_operation (MODEST_PROGRESS_OBJECT (tmp->data),
mail_op);
}
break;
case MODEST_MAIL_OPERATION_QUEUE_OPERATION_REMOVED:
- set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
+ if (mode != TOOLBAR_MODE_NORMAL)
+ set_toolbar_mode (MODEST_MAIN_WINDOW(self), TOOLBAR_MODE_NORMAL);
while (tmp) {
modest_progress_object_remove_operation (MODEST_PROGRESS_OBJECT (tmp->data),
mail_op);
#include <glib/gi18n.h>
#include <modest-platform.h>
#include <modest-runtime.h>
+#include <modest-main-window.h>
+#include <modest-header-view.h>
+
+#include <modest-hildon-includes.h>
+
#include <dbus_api/modest-dbus-callbacks.h>
#include <libosso.h>
-#include <modest-hildon-includes.h>
#include <tny-maemo-conic-device.h>
#include <tny-folder.h>
#include <gtk/gtkicontheme.h>
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,
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));
+}
MODEST_INFORMATION_DELETE_FOLDER,
} ModestInformationDialogType;
+typedef enum _ModestSortDialogType {
+ MODEST_SORT_HEADERS,
+} ModestSortDialogType;
+
/**
* modest_platform_platform_init:
*
**/
void modest_platform_run_information_dialog (GtkWindow *parent_window,
ModestInformationDialogType type);
+/**
+ * modest_platform_run_sort_dialog:
+ * @parent_window: the parent #GtkWindow of the dialog
+ * @type: the sort dialog type.
+ *
+ * shows a sort dialog
+ **/
+void modest_platform_run_sort_dialog (GtkWindow *parent_window,
+ ModestSortDialogType type);
/*
* modest_platform_connect_and_wait:
/* TODO: thick grain mail operation involving
a list of objects. Composite pattern ??? */
/* TODO: add confirmation dialog */
- mail_op = modest_mail_operation_new ();
+ mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_DELETE);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
modest_ui_actions_on_sort (GtkAction *action,
ModestWindow *window)
{
- ModestWindowMgr *mgr;
-
g_return_if_fail (MODEST_IS_WINDOW(window));
- /* Show sorting dialog */
- mgr = modest_runtime_get_window_mgr ();
-
+ if (MODEST_IS_MAIN_WINDOW (window)) {
+ GtkWidget *header_view;
+ header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window),
+ MODEST_WIDGET_TYPE_HEADER_VIEW);
+ if (!header_view)
+ return;
+
+ /* Show sorting dialog */
+ modest_platform_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
+ }
}
from = modest_account_mgr_get_from_string (account_mgr, account_name);
/* Create the mail operation */
- mail_operation = modest_mail_operation_new ();
+ mail_operation = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_SEND);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation);
modest_mail_operation_send_new_mail (mail_operation,
g_free (message);
if (response == GTK_RESPONSE_OK) {
- ModestMailOperation *mail_op = modest_mail_operation_new ();
+ ModestMailOperation *mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_DELETE);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
if (TNY_IS_FOLDER (src_folder)) {
- mail_op = modest_mail_operation_new ();
+ mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
ModestMailOperation *mail_op;
/* Create mail op */
- mail_op = modest_mail_operation_new ();
+ mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
TnyFolderType type;
ModestHeaderViewStyle style;
gint sort_colid;
-
+ GtkSortType sort_type;
+
folder = modest_header_view_get_folder (header_view);
if (!folder || modest_header_view_is_empty (header_view))
return TRUE; /* no non-empty folder: no settings */
* are also used in modest-init.
*/
sort_colid = modest_header_view_get_sort_column_id (header_view, type);
+ sort_type = modest_header_view_get_sort_type (header_view, type);
while (cursor) {
int col_id, width, sort;
width = gtk_tree_view_column_get_width (col);
sort = 0;
if (sort_colid == col_id)
- sort = 1;
+ sort = (sort_type == GTK_SORT_ASCENDING) ? 1:-1;
g_string_append_printf (str, "%d:%d:%d ", col_id, width, sort);
cursor = g_list_next (cursor);
GtkTreeModel *sortable;
cursor = data = modest_conf_get_string (conf, key, NULL);
- while (cursor && sscanf (cursor, "%u:%u:%u ", &col, &width, &sort) == 3) {
+ while (cursor && sscanf (cursor, "%d:%d:%d ", &col, &width, &sort) == 3) {
cols = g_list_append (cols, GINT_TO_POINTER(col));
colwidths = g_list_append (colwidths, GINT_TO_POINTER(width));
colsortables = g_list_append (colsortables, GINT_TO_POINTER(sort));
if (width > 0)
gtk_tree_view_column_set_max_width(GTK_TREE_VIEW_COLUMN(colcursor->data),
width);
- if (sort > 0) {
+ if (sort != 0) {
int colid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(colcursor->data), MODEST_HEADER_VIEW_COLUMN));
- modest_header_view_set_sort_column_id (header_view, colid, type);
+ GtkSortType sort_type = (sort == 1) ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING;
+ modest_header_view_set_sort_params (header_view, colid, sort_type, type);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
colid,
- GTK_SORT_DESCENDING);
+ sort_type);
gtk_tree_sortable_sort_column_changed (GTK_TREE_SORTABLE(sortable));
}
colcursor = g_list_next (colcursor);
TnyFolderMonitor *monitor;
GMutex *monitor_lock;
gint sort_colid[2][TNY_FOLDER_TYPE_NUM];
+ gint sort_type[2][TNY_FOLDER_TYPE_NUM];
};
#define MODEST_HEADER_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
priv->monitor = NULL;
priv->monitor_lock = g_mutex_new ();
- for (j=0; j < 2; j++)
- for (i=0; i < TNY_FOLDER_TYPE_NUM; i++)
+
+ /* Sort parameters */
+ for (j=0; j < 2; j++) {
+ for (i=0; i < TNY_FOLDER_TYPE_NUM; i++) {
priv->sort_colid[j][i] = -1;
+ priv->sort_type[j][i] = GTK_SORT_DESCENDING;
+ }
+ }
setup_drag_and_drop (GTK_TREE_VIEW (obj));
}
return gtk_tree_view_get_columns (GTK_TREE_VIEW(self));
}
+
gboolean
modest_header_view_is_empty (ModestHeaderView *self)
{
GList *cols, *cursor;
TnyList *headers;
guint sort_colid;
+ GtkSortType sort_type;
if (!modest_mail_operation_is_finished (mail_op))
return;
/* Restore sort column id */
type = modest_tny_folder_guess_folder_type (priv->folder);
sort_colid = modest_header_view_get_sort_column_id (self, type);
+ sort_type = modest_header_view_get_sort_type (self, type);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
sort_colid,
- GTK_SORT_ASCENDING);
+ sort_type);
/* Set new model */
modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
GList *cols, *cursor;
GtkTreeModel *sortable;
guint sort_colid;
+ GtkSortType sort_type;
priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
/* Restore sort column id */
type = modest_tny_folder_guess_folder_type (folder);
sort_colid = modest_header_view_get_sort_column_id (self, type);
+ sort_type = modest_header_view_get_sort_type (self, type);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
sort_colid,
- GTK_SORT_ASCENDING);
+ sort_type);
/* Set new model */
modest_header_view_set_model (GTK_TREE_VIEW (self), sortable);
}
void
-modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid, TnyFolderType type)
+modest_header_view_sort_by_column_id (ModestHeaderView *self,
+ guint sort_colid,
+ GtkSortType sort_type)
+{
+ ModestHeaderViewPrivate *priv = NULL;
+ GtkTreeModel *sortable = NULL;
+ TnyFolderType type;
+
+ /* Get model and private data */
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+ sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
+
+ /* Sort tree model */
+ type = modest_tny_folder_guess_folder_type (priv->folder);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sortable),
+ sort_colid,
+ sort_type);
+ /* Store new sort parameters */
+ modest_header_view_set_sort_params (self, sort_colid, sort_type, type);
+
+ /* Save GConf parameters */
+/* modest_widget_memory_save (modest_runtime_get_conf(), */
+/* G_OBJECT(self), "header-view"); */
+
+}
+
+void
+modest_header_view_set_sort_params (ModestHeaderView *self,
+ guint sort_colid,
+ GtkSortType sort_type,
+ TnyFolderType type)
{
ModestHeaderViewPrivate *priv;
ModestHeaderViewStyle style;
priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
priv->sort_colid[style][type] = sort_colid;
+ priv->sort_type[style][type] = sort_type;
}
gint
-modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type)
+modest_header_view_get_sort_column_id (ModestHeaderView *self,
+ TnyFolderType type)
{
ModestHeaderViewPrivate *priv;
ModestHeaderViewStyle style;
return priv->sort_colid[style][type];
}
+GtkSortType
+modest_header_view_get_sort_type (ModestHeaderView *self,
+ TnyFolderType type)
+{
+ ModestHeaderViewPrivate *priv;
+ ModestHeaderViewStyle style;
+
+ style = modest_header_view_get_style (self);
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+
+ return priv->sort_type[style][type];
+}
+
void
modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
{
g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, NULL);
/* Create the mail operation */
- mail_op = modest_mail_operation_new ();
+ mail_op = modest_mail_operation_new_with_id (MODEST_MAIL_OPERATION_ID_RECEIVE);
modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
mail_op);
gint val1, val2;
gchar *s1, *s2;
gint cmp;
+ gint sort_colid;
static int counter = 0;
g_return_val_if_fail (G_IS_OBJECT(user_data), 0);
signals[STATUS_UPDATE_SIGNAL],
0, _("Sorting..."), 0, 0);
}
- switch (col_id) {
-
- /* first one, we decide based on the time */
+ switch (col_id) {
case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
+ sort_colid = gtk_tree_view_column_get_sort_column_id (GTK_TREE_VIEW_COLUMN(user_data));
+ gtk_tree_model_get (tree_model, iter1,
+ sort_colid, &s1,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t1,
+ -1);
+ gtk_tree_model_get (tree_model, iter2,
+ sort_colid, &s2,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t2,
+ -1);
+ cmp = modest_text_utils_utf8_strcmp (s1, s2, TRUE);
+ g_free (s1);
+ g_free (s2);
+
+ return cmp ? cmp : t1 - t2;
+
+ break;
+
case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE:
&t2,-1);
return t1 - t2;
- case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
gtk_tree_model_get (tree_model, iter1,
return cmp ? cmp : t1 - t2;
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG:
+ gtk_tree_model_get (tree_model, iter1, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &val1,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t1, -1);
+ gtk_tree_model_get (tree_model, iter2, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &val2,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &t2, -1);
+
+ int flag_sort = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(user_data), MODEST_HEADER_VIEW_FLAG_SORT));
+ switch (flag_sort) {
+ case TNY_HEADER_FLAG_ATTACHMENTS:
+ cmp = (val1 & TNY_HEADER_FLAG_ATTACHMENTS) -
+ (val2 & TNY_HEADER_FLAG_ATTACHMENTS);
+ break;
+ case TNY_HEADER_FLAG_PRIORITY:
+ cmp = (val1 & TNY_HEADER_FLAG_PRIORITY) -
+ (val2 & TNY_HEADER_FLAG_PRIORITY);
+ break;
+ default:
+ cmp = (val1 & TNY_HEADER_FLAG_PRIORITY) -
+ (val2 & TNY_HEADER_FLAG_PRIORITY);
+ }
+
+ return cmp ? cmp : t1 - t2;
default:
return &iter1 - &iter2; /* oughhhh */
}
};
#define MODEST_HEADER_VIEW_COLUMN "header-view-column"
+#define MODEST_HEADER_VIEW_FLAG_SORT "header-view-flags-sort"
typedef enum _ModestHeaderViewColumn {
MODEST_HEADER_VIEW_COLUMN_FROM = 0,
* with g_object_get_data MODEST_HEADER_VIEW_COLUMN (#define),
* and which contains the corresponding ModestHeaderViewColumn
*
- * Returns: newly allocated list of column ids, or NULL in case of no columns or error
+ * Returns: newly allocated list of #GtkTreeViewColumns objects, or NULL in case of no columns or error
* You must free the list with g_list_free
*/
GList* modest_header_view_get_columns (ModestHeaderView *self);
modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type);
/**
- * modest_header_view_get_sort_column_id:
+ * modest_header_view_get_sort_type:
+ * @self: a #ModestHeaderView
+ * @type: #TnyFolderType type
+ *
+ * Gets the selected sort type.
+ **/
+GtkSortType
+modest_header_view_get_sort_type (ModestHeaderView *self, TnyFolderType type);
+
+/**
+ * modest_header_view_set_sort_params:
* @self: a #ModestHeaderView
* @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
* @type: #TnyFolderType type
*
- * Sets the logical columnd id for sorting.
+ * Sets the logical columnd id and sort type for sorting operations.
**/
void
-modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid, TnyFolderType type);
+modest_header_view_set_sort_params (ModestHeaderView *self, guint sort_colid, GtkSortType sort_type, TnyFolderType type);
+/**
+ * modest_header_view_set_sort_params:
+ * @self: a #ModestHeaderView
+ * @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
+ *
+ * Sorts headers treeview by logical column id, @sort_colid, using a
+ * @sort_type sorting method. In addition, new headder settings will be
+ * stored in @self object.
+ **/
+void
+modest_header_view_sort_by_column_id (ModestHeaderView *self,
+ guint sort_colid,
+ GtkSortType sort_type);
G_END_DECLS