From b93b64adaaf2947f8b35889981af6ad96b18fd31 Mon Sep 17 00:00:00 2001 From: Javier Fernandez Garcia-Boente Date: Fri, 20 Apr 2007 12:42:56 +0000 Subject: [PATCH] * Add two new columns to show compact Sent/Received date. This change was required to keep compatibility with 1-row style view. * Change configuration header setting to load new compact columns. * Use strftime to build date/time strings. * Parse special character in subjects and mail addresses for allowing pango markup tags to format two style rows view. pmo-trunk-r1612 --- src/modest-runtime.c | 4 +- src/modest-text-utils.c | 3 - src/widgets/modest-header-view-priv.h | 3 + src/widgets/modest-header-view-render.c | 121 ++++++++++++++++++++++--------- src/widgets/modest-header-view.c | 23 +++++- src/widgets/modest-header-view.h | 3 + 6 files changed, 115 insertions(+), 42 deletions(-) diff --git a/src/modest-runtime.c b/src/modest-runtime.c index 386c5c2..9c6d626 100644 --- a/src/modest-runtime.c +++ b/src/modest-runtime.c @@ -79,7 +79,7 @@ static const FolderCols INBOX_COLUMNS_DETAILS[] = { static const FolderCols INBOX_COLUMNS_TWOLINES[] = { {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40}, {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, 180}, - {MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE, 240} + {MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, 240} }; static const FolderCols OUTBOX_COLUMNS_DETAILS[] = { @@ -100,7 +100,7 @@ static const FolderCols OUTBOX_COLUMNS_TWOLINES[] = { static const FolderCols SENT_COLUMNS_TWOLINES[] = { {MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, 40}, {MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT,180}, - {MODEST_HEADER_VIEW_COLUMN_SENT_DATE, 240} + {MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, 240} }; #ifdef MODEST_PLATFORM_MAEMO diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index f411a1d..9b0cef4 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -204,15 +204,12 @@ gsize modest_text_utils_strftime(char *s, gsize max, const char *fmt, time_t timet) { struct tm tm; -/* static GDate date; */ /* does not work on old maemo glib: * g_date_set_time_t (&date, timet); */ -/* g_date_set_time (&date, (GTime) timet); */ localtime_r (&timet, &tm); -/* return g_date_strftime (s, max, fmt, (const GDate*) &date); */ return strftime(s, max, fmt, &tm); } diff --git a/src/widgets/modest-header-view-priv.h b/src/widgets/modest-header-view-priv.h index 5c1bc1e..9a2a985 100644 --- a/src/widgets/modest-header-view-priv.h +++ b/src/widgets/modest-header-view-priv.h @@ -52,6 +52,9 @@ void _modest_header_view_header_cell_data (GtkTreeViewColumn *column, GtkCellR GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data); void _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data); +void _modest_header_view_compact_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + GtkTreeModel *tree_model, GtkTreeIter *iter, + gpointer user_data); void _modest_header_view_size_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data); void _modest_header_view_status_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, diff --git a/src/widgets/modest-header-view-render.c b/src/widgets/modest-header-view-render.c index 4b14de3..b3a83f7 100644 --- a/src/widgets/modest-header-view-render.c +++ b/src/widgets/modest-header-view-render.c @@ -37,19 +37,67 @@ static gchar * -_pango_parse_string (const gchar *string) { +_pango_replace_string (const gchar *string, + const gchar *in, + const gchar *out) +{ gchar **tmp = NULL; - gchar *parsed_string = NULL; + gchar *new_string = NULL; gchar *tmp_string = NULL; guint i = 0; - tmp = g_strsplit(string, "&", 0); - parsed_string = g_strdup(tmp[i]); + /* Split data */ + if (string == NULL) return g_strdup(""); + tmp = g_strsplit(string, in, 0); + if (tmp[0] == NULL) return g_strdup(string); + + /* Replace and concat data*/ + new_string = g_strdup(tmp[0]); for (i = 1; tmp[i] != NULL; i++) { - tmp_string = g_strconcat (parsed_string, "&", tmp[i], NULL); - g_free(parsed_string); - parsed_string = g_strdup(tmp_string); + tmp_string = g_strconcat (new_string, out, tmp[i], NULL); + g_free(new_string); + new_string = g_strdup(tmp_string); + g_free(tmp_string); } + + /* Free */ + g_strfreev(tmp); + + return new_string; +} + +static gchar * +_pango_parse_string (const gchar *string) +{ + gchar *parsed_string = NULL; + gchar *tmp = NULL; + + if (string == NULL) return g_strdup(""); + parsed_string = g_strdup(string); + + /* Check for '&' special character */ + tmp = g_strdup(parsed_string); + g_free(parsed_string); + parsed_string = _pango_replace_string (tmp, "&", "&"); + g_free(tmp); + + /* Check for '<' special character */ + tmp = g_strdup(parsed_string); + g_free(parsed_string); + parsed_string = _pango_replace_string (tmp, "<", "<"); + g_free(tmp); + + /* Check for '>' special character */ + tmp = g_strdup(parsed_string); + g_free(parsed_string); + parsed_string = _pango_replace_string (tmp, ">", ">"); + g_free(tmp); + + /* Check for ''' special character */ + tmp = g_strdup(parsed_string); + g_free(parsed_string); + parsed_string = _pango_replace_string (tmp, "'", "'"); + g_free(tmp); return parsed_string; } @@ -176,34 +224,15 @@ _modest_header_view_compact_flag_cell_data (GtkTreeViewColumn *column, GtkCellRe GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data) { TnyHeaderFlags flags; + GdkPixbuf* pixbuf = NULL; gtk_tree_model_get (tree_model, iter, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, -1); - - if (flags & TNY_HEADER_FLAG_ATTACHMENTS) { - if (flags & TNY_HEADER_FLAG_HIGH_PRIORITY) - g_object_set (G_OBJECT (renderer), "pixbuf", - get_pixbuf_for_compact_flag (flags), - NULL); - else if (flags & TNY_HEADER_FLAG_LOW_PRIORITY) - g_object_set (G_OBJECT (renderer), "pixbuf", - get_pixbuf_for_compact_flag (flags), - NULL); - else - g_object_set (G_OBJECT (renderer), "pixbuf", - get_pixbuf_for_compact_flag (flags), - NULL); - } - else { - if (flags & TNY_HEADER_FLAG_HIGH_PRIORITY) - g_object_set (G_OBJECT (renderer), "pixbuf", - get_pixbuf_for_compact_flag (flags), - NULL); - else if (flags & TNY_HEADER_FLAG_LOW_PRIORITY) - g_object_set (G_OBJECT (renderer), "pixbuf", - get_pixbuf_for_compact_flag (flags), - NULL); - } + + pixbuf = get_pixbuf_for_compact_flag (flags); + if (pixbuf != NULL) + g_object_set (G_OBJECT (renderer), "pixbuf", pixbuf, NULL); + } void @@ -225,6 +254,33 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer { TnyHeaderFlags flags; guint date, date_col; + gchar *display_date = NULL; + gboolean received = GPOINTER_TO_INT(user_data); + + if (received) + date_col = TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN; + else + date_col = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN; + + gtk_tree_model_get (tree_model, iter, + TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, + date_col, &date, + -1); + + display_date = modest_text_utils_get_display_date (date); + g_object_set (G_OBJECT(renderer), "text", display_date, NULL); + + set_common_flags (renderer, flags); + g_free (display_date); +} + +void +_modest_header_view_compact_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + GtkTreeModel *tree_model, GtkTreeIter *iter, + gpointer user_data) +{ + TnyHeaderFlags flags; + guint date, date_col; gchar *display_date = NULL, *tmp_date = NULL; gboolean received = GPOINTER_TO_INT(user_data); @@ -247,7 +303,6 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer g_free (display_date); } - void _modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gboolean is_sender) diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index adc2d06..85d5f78 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -331,23 +331,38 @@ modest_header_view_set_columns (ModestHeaderView *self, const GList *columns) break; case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE: - column = get_new_column (_("Received"), renderer_compact_date, FALSE, + column = get_new_column (_("Received"), renderer_header, TRUE, TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN, TRUE, (GtkTreeCellDataFunc)_modest_header_view_date_cell_data, GINT_TO_POINTER(TRUE)); - gtk_tree_view_column_set_fixed_width (column, 130); break; - case MODEST_HEADER_VIEW_COLUMN_SENT_DATE: - column = get_new_column (_("Sent"), renderer_compact_date, FALSE, + case MODEST_HEADER_VIEW_COLUMN_SENT_DATE: + column = get_new_column (_("Sent"), renderer_header, TRUE, TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, TRUE, (GtkTreeCellDataFunc)_modest_header_view_date_cell_data, GINT_TO_POINTER(FALSE)); + break; + + case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE: + column = get_new_column (_("Received"), renderer_compact_date, FALSE, + TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN, + TRUE, + (GtkTreeCellDataFunc)_modest_header_view_compact_date_cell_data, + GINT_TO_POINTER(TRUE)); gtk_tree_view_column_set_fixed_width (column, 130); break; + case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE: + column = get_new_column (_("Sent"), renderer_compact_date, FALSE, + TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, + TRUE, + (GtkTreeCellDataFunc)_modest_header_view_compact_date_cell_data, + GINT_TO_POINTER(FALSE)); + gtk_tree_view_column_set_fixed_width (column, 130); + break; case MODEST_HEADER_VIEW_COLUMN_SIZE: column = get_new_column (_("Size"), renderer_header, TRUE, TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN, diff --git a/src/widgets/modest-header-view.h b/src/widgets/modest-header-view.h index 5ecaa50..d753de0 100644 --- a/src/widgets/modest-header-view.h +++ b/src/widgets/modest-header-view.h @@ -66,6 +66,7 @@ typedef enum _ModestHeaderViewColumn { MODEST_HEADER_VIEW_COLUMN_ATTACH, MODEST_HEADER_VIEW_COLUMN_SIZE, MODEST_HEADER_VIEW_COLUMN_STATUS, + /* * these two are for compact display on small devices, * with two line display with all relevant headers @@ -73,6 +74,8 @@ typedef enum _ModestHeaderViewColumn { MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG, /* priority and attachments */ MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN, /* incoming mail */ MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT, /* outgoing mail */ + MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE, + MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE, MODEST_HEADER_VIEW_COLUMN_NUM -- 1.7.9.5