X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fwidgets%2Fmodest-header-view-render.c;h=78cd1fc04b31bd0cd7fe2cff0a94cde700207067;hb=556398d85f1803ab8d4871a107bc4b8938c444ae;hp=6e261929b9d051e6266b3d85becc14b66056d200;hpb=5ae42e29904ef64c4385d848e49c28841a94ba36;p=modest diff --git a/src/widgets/modest-header-view-render.c b/src/widgets/modest-header-view-render.c index 6e26192..78cd1fc 100644 --- a/src/widgets/modest-header-view-render.c +++ b/src/widgets/modest-header-view-render.c @@ -33,70 +33,92 @@ #include #include #include +#include static GdkPixbuf* -get_cached_icon (const gchar *name) -{ - GError *err = NULL; - gpointer pixbuf; - gpointer orig_key; - static GHashTable *icon_cache = NULL; - - g_return_val_if_fail (name, NULL); - - if (G_UNLIKELY(!icon_cache)) - icon_cache = modest_cache_mgr_get_cache (modest_runtime_get_cache_mgr(), - MODEST_CACHE_MGR_CACHE_TYPE_PIXBUF); - - if (!icon_cache || !g_hash_table_lookup_extended (icon_cache, name, &orig_key,&pixbuf)) { - pixbuf = (gpointer)gdk_pixbuf_new_from_file (name, &err); - if (!pixbuf) { - g_printerr ("modest: error while loading '%s': %s\n", - name, err->message); - g_error_free (err); - } - /* if we cannot find it, we still insert (if we have a cache), so we get the error - * only once */ - if (icon_cache) - g_hash_table_insert (icon_cache, g_strdup(name),(gpointer)pixbuf); - } - return GDK_PIXBUF(pixbuf); -} - - - -/* - * optimization - */ -static GdkPixbuf* get_pixbuf_for_flag (TnyHeaderFlags flag) { /* optimization */ - static GdkPixbuf *deleted_pixbuf = NULL; - static GdkPixbuf *seen_pixbuf = NULL; - static GdkPixbuf *unread_pixbuf = NULL; - static GdkPixbuf *attachments_pixbuf = NULL; + static GdkPixbuf *deleted_pixbuf = NULL; + static GdkPixbuf *seen_pixbuf = NULL; + static GdkPixbuf *unread_pixbuf = NULL; + static GdkPixbuf *attachments_pixbuf = NULL; switch (flag) { case TNY_HEADER_FLAG_DELETED: if (G_UNLIKELY(!deleted_pixbuf)) - deleted_pixbuf = get_cached_icon (MODEST_HEADER_ICON_DELETED); + deleted_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_DELETED); return deleted_pixbuf; case TNY_HEADER_FLAG_SEEN: if (G_UNLIKELY(!seen_pixbuf)) - seen_pixbuf = get_cached_icon (MODEST_HEADER_ICON_READ); + seen_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_READ); return seen_pixbuf; case TNY_HEADER_FLAG_ATTACHMENTS: if (G_UNLIKELY(!attachments_pixbuf)) - attachments_pixbuf = get_cached_icon (MODEST_HEADER_ICON_ATTACH); + attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH); return attachments_pixbuf; default: if (G_UNLIKELY(!unread_pixbuf)) - unread_pixbuf = get_cached_icon (MODEST_HEADER_ICON_UNREAD); + unread_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_UNREAD); return unread_pixbuf; } } +static GdkPixbuf* +get_pixbuf_for_compact_flag (TnyHeaderFlags flags) +{ + /* optimization */ + static GdkPixbuf *high_attachments_pixbuf = NULL; + static GdkPixbuf *normal_attachments_pixbuf = NULL; + static GdkPixbuf *low_attachments_pixbuf = NULL; + static GdkPixbuf *high_pixbuf = NULL; + static GdkPixbuf *low_pixbuf = NULL; + TnyHeaderPriorityFlags prior; + + prior = flags & TNY_HEADER_FLAG_PRIORITY; + switch (prior) { + case TNY_HEADER_FLAG_HIGH_PRIORITY: + if (flags & TNY_HEADER_FLAG_ATTACHMENTS) { + if (G_UNLIKELY(!high_attachments_pixbuf)) + high_attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH_HIGH_PRIORITY); + return high_attachments_pixbuf; + } else { + if (G_UNLIKELY(!high_pixbuf)) + high_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_HIGH_PRIORITY); + return high_pixbuf; + } + break; + case TNY_HEADER_FLAG_LOW_PRIORITY: + if (flags & TNY_HEADER_FLAG_ATTACHMENTS) { + if (G_UNLIKELY(!low_attachments_pixbuf)) + low_attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH_LOW_PRIORITY); + return low_attachments_pixbuf; + } else { + if (G_UNLIKELY(!low_pixbuf)) + low_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_LOW_PRIORITY); + return low_pixbuf; + } + break; + default: + if (flags & TNY_HEADER_FLAG_ATTACHMENTS) { + if (G_UNLIKELY(!normal_attachments_pixbuf)) + normal_attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH_NORM_PRIORITY); + return normal_attachments_pixbuf; + } + } + + return NULL; +} + +static void +set_common_flags (GtkCellRenderer *renderer, TnyHeaderFlags flags) +{ + g_object_set (G_OBJECT(renderer), + "weight", (flags & TNY_HEADER_FLAG_SEEN) ? PANGO_WEIGHT_NORMAL: PANGO_WEIGHT_ULTRABOLD, + "strikethrough", (flags & TNY_HEADER_FLAG_DELETED) ? TRUE:FALSE, + NULL); +} + void _modest_header_view_msgtype_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, @@ -134,6 +156,20 @@ _modest_header_view_attach_cell_data (GtkTreeViewColumn *column, GtkCellRenderer } void +_modest_header_view_compact_flag_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + 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); + + pixbuf = get_pixbuf_for_compact_flag (flags); + g_object_set (G_OBJECT (renderer), "pixbuf", pixbuf, NULL); +} + +void _modest_header_view_header_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data) { @@ -141,11 +177,7 @@ _modest_header_view_header_cell_data (GtkTreeViewColumn *column, GtkCellRender gtk_tree_model_get (tree_model, iter, TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, -1); - - g_object_set (G_OBJECT(renderer), - "weight", (flags & TNY_HEADER_FLAG_SEEN) ? 400: 800, - "strikethrough", (flags & TNY_HEADER_FLAG_DELETED) ? TRUE:FALSE, - NULL); + set_common_flags (renderer, flags); } @@ -156,7 +188,7 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer { TnyHeaderFlags flags; guint date, date_col; - gchar *display_date; + gchar *display_date = NULL; gboolean received = GPOINTER_TO_INT(user_data); if (received) @@ -170,14 +202,42 @@ _modest_header_view_date_cell_data (GtkTreeViewColumn *column, GtkCellRenderer -1); display_date = modest_text_utils_get_display_date (date); - g_object_set (G_OBJECT(renderer), - "weight", (flags & TNY_HEADER_FLAG_SEEN) ? 400: 800, - "strikethrough", (flags & TNY_HEADER_FLAG_DELETED) ? TRUE:FALSE, - "text", display_date, - NULL); + 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); + + 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); + + tmp_date = modest_text_utils_get_display_date (date); + display_date = g_strdup_printf ("\n%s", tmp_date); + g_object_set (G_OBJECT(renderer), + "markup", display_date, + NULL); + + set_common_flags (renderer, flags); + g_free (tmp_date); + g_free (display_date); +} void _modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, @@ -200,13 +260,9 @@ _modest_header_view_sender_receiver_cell_data (GtkTreeViewColumn *column, GtkC g_object_set (G_OBJECT(renderer), "text", modest_text_utils_get_display_address (address), - "weight", - (flags & TNY_HEADER_FLAG_SEEN) ? 400 : 800, - "striketrough", - (flags & TNY_HEADER_FLAG_DELETED)?TRUE:FALSE, NULL); - - g_free (address); + g_free (address); + set_common_flags (renderer, flags); } /* * this for both incoming and outgoing mail, depending on the the user_data @@ -219,7 +275,7 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe { GObject *rendobj; TnyHeaderFlags flags; - gchar *address, *subject, *header, *display_date; + gchar *address, *subject, *header; time_t date; gboolean is_incoming; @@ -240,21 +296,17 @@ _modest_header_view_compact_header_cell_data (GtkTreeViewColumn *column, GtkCe TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN, &subject, TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN, &date, -1); - + rendobj = G_OBJECT(renderer); - display_date = modest_text_utils_get_display_date (date); - header = g_strdup_printf ("%s %s\n%s", - modest_text_utils_get_display_address (address), - display_date, subject); + header = g_markup_printf_escaped ("%s\n%s", + subject ? subject : _("mail_va_no_subject"), + address); g_free (address); g_free (subject); - g_free (display_date); + + g_object_set (rendobj, "markup", header, NULL); + set_common_flags (renderer, flags); - g_object_set (G_OBJECT(renderer), - "text", header, - "weight", (flags & TNY_HEADER_FLAG_SEEN) ? 400: 800, - "strikethrough", (flags & TNY_HEADER_FLAG_DELETED) ? TRUE: FALSE, - NULL); g_free (header); } @@ -275,11 +327,31 @@ _modest_header_view_size_cell_data (GtkTreeViewColumn *column, GtkCellRenderer size_str = modest_text_utils_get_display_size (size); - g_object_set (G_OBJECT(renderer), - "weight", (flags & TNY_HEADER_FLAG_SEEN) ? 400: 800, - "striketrough", (flags & TNY_HEADER_FLAG_DELETED) ? TRUE:FALSE, - "text", size_str, - NULL); - g_free (size_str); + g_object_set (G_OBJECT(renderer), "text", size_str, NULL); + set_common_flags (renderer, flags); + g_free (size_str); } + +void +_modest_header_view_status_cell_data (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + GtkTreeModel *tree_model, GtkTreeIter *iter, + gpointer user_data) +{ + TnyHeaderFlags flags; + //guint status; + gchar *status_str; + + gtk_tree_model_get (tree_model, iter, + TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, + // TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN, &status, + -1); + + status_str = g_strdup(_("mcen_li_outbox_waiting")); + + g_object_set (G_OBJECT(renderer), "text", status_str, NULL); + set_common_flags (renderer, flags); + + g_free (status_str); + } +