+#include <modest-platform.h>
+#include <string.h>
+
+typedef enum {
+ RENDER_CELL_STYLE_DEFAULT=0,
+ RENDER_CELL_STYLE_GREY
+} RenderCellStyle;
+
+static const gchar *
+get_status_string (ModestTnySendQueueStatus status)
+{
+ switch (status) {
+ case MODEST_TNY_SEND_QUEUE_WAITING:
+ return _("mcen_li_outbox_waiting");
+ break;
+ case MODEST_TNY_SEND_QUEUE_SENDING:
+ return _("mcen_li_outbox_sending");
+ break;
+ case MODEST_TNY_SEND_QUEUE_SUSPENDED:
+ return _("mcen_li_outbox_suspended");
+ break;
+ case MODEST_TNY_SEND_QUEUE_FAILED:
+ return _("mcen_li_outbox_failed");
+ break;
+ default:
+ return "";
+ break;
+ }
+}
+
+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 *high_pixbuf = NULL;
+ static GdkPixbuf *low_pixbuf = NULL;
+
+ switch (flag) {
+ case TNY_HEADER_FLAG_DELETED:
+ if (G_UNLIKELY(!deleted_pixbuf))
+ deleted_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_DELETED,
+ MODEST_ICON_SIZE_SMALL);
+ return deleted_pixbuf;
+ case TNY_HEADER_FLAG_SEEN:
+ if (G_UNLIKELY(!seen_pixbuf))
+ seen_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_READ,
+ MODEST_ICON_SIZE_SMALL);
+ return seen_pixbuf;
+ case TNY_HEADER_FLAG_ATTACHMENTS:
+ if (G_UNLIKELY(!attachments_pixbuf))
+ attachments_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_ATTACH,
+ MODEST_ICON_SIZE_SMALL);
+ return attachments_pixbuf;
+ case TNY_HEADER_FLAG_HIGH_PRIORITY:
+ if (G_UNLIKELY(!high_pixbuf))
+ high_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_HIGH,
+ MODEST_ICON_SIZE_SMALL);
+ return high_pixbuf;
+ case TNY_HEADER_FLAG_LOW_PRIORITY:
+ if (G_UNLIKELY(!low_pixbuf))
+ low_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_LOW,
+ MODEST_ICON_SIZE_SMALL);
+ return low_pixbuf;
+ case TNY_HEADER_FLAG_NORMAL_PRIORITY:
+ return NULL;
+ default:
+ if (G_UNLIKELY(!unread_pixbuf))
+ unread_pixbuf = modest_platform_get_icon (MODEST_HEADER_ICON_UNREAD,
+ MODEST_ICON_SIZE_SMALL);
+ return unread_pixbuf;
+ }
+}
+
+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);
+}
+
+static void
+set_cell_text (GtkCellRenderer *renderer,
+ const gchar *text,
+ TnyHeaderFlags flags,
+ RenderCellStyle style)
+{
+ PangoWeight weight;
+ gboolean strikethrough;
+
+ weight = (flags & TNY_HEADER_FLAG_SEEN) ? PANGO_WEIGHT_NORMAL: PANGO_WEIGHT_ULTRABOLD;
+ strikethrough = (flags & TNY_HEADER_FLAG_DELETED) ? TRUE:FALSE;
+ g_object_freeze_notify (G_OBJECT (renderer));
+ g_object_set (G_OBJECT (renderer),
+ "text", text,
+ "weight", (flags & TNY_HEADER_FLAG_SEEN) ? PANGO_WEIGHT_NORMAL : PANGO_WEIGHT_ULTRABOLD,
+ "strikethrough", (flags &TNY_HEADER_FLAG_DELETED) ? TRUE : FALSE,
+ NULL);
+ switch (style) {
+ case RENDER_CELL_STYLE_GREY:
+ g_object_set (G_OBJECT (renderer),
+ "foreground", "#666666",
+ "scale", PANGO_SCALE_SMALL,
+ NULL);
+ break;
+ case RENDER_CELL_STYLE_DEFAULT:
+ break;
+ }
+ g_object_thaw_notify (G_OBJECT (renderer));
+}