Add support for datetime formatter in header view
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 12 Dec 2008 16:28:00 +0000 (16:28 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Fri, 12 Dec 2008 16:28:00 +0000 (16:28 +0000)
pmo-trunk-r6817

src/widgets/modest-header-view-priv.h
src/widgets/modest-header-view-render.c
src/widgets/modest-header-view.c

index 226c42d..5fdc7a8 100644 (file)
@@ -60,6 +60,8 @@ void _modest_header_view_sender_receiver_cell_data  (GtkTreeViewColumn *column,
 void _modest_header_view_compact_header_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                                                    GtkTreeModel *tree_model,  GtkTreeIter *iter,  gpointer user_data);
 
+const gchar *_modest_header_view_get_display_date (ModestHeaderView *self, time_t date);
+
 typedef enum _ModestHeaderViewCompactHeaderMode {
        MODEST_HEADER_VIEW_COMPACT_HEADER_MODE_IN = 0,
        MODEST_HEADER_VIEW_COMPACT_HEADER_MODE_OUT = 1,
index 9b03093..5b60543 100644 (file)
@@ -189,6 +189,7 @@ _modest_header_view_date_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer
        TnyHeaderFlags flags;
        guint date, date_col;
        gboolean received = GPOINTER_TO_INT(user_data);
+       ModestHeaderView *header_view;
 
        if (received)
                date_col = TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN;
@@ -200,7 +201,9 @@ _modest_header_view_date_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer
                            date_col, &date,
                            -1);
        
-       set_cell_text (renderer, modest_text_utils_get_display_date (date),
+       header_view = MODEST_HEADER_VIEW (gtk_tree_view_column_get_tree_view (column));
+       set_cell_text (renderer, 
+                      _modest_header_view_get_display_date (header_view, date),
                       flags, RENDER_CELL_STYLE_DEFAULT);
 }
 
@@ -258,12 +261,15 @@ _modest_header_view_compact_header_cell_data  (GtkTreeViewColumn *column,  GtkCe
                *recipient_box, *subject_box = NULL;
        TnyHeader *msg_header = NULL;
        TnyHeaderFlags prio = 0;
+       ModestHeaderView *header_view;
 
 
        g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column));
        g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
        g_return_if_fail (GTK_IS_TREE_MODEL (tree_model));
 
+       header_view = MODEST_HEADER_VIEW (gtk_tree_view_column_get_tree_view (column));
+
 #ifdef MAEMO_CHANGES
 #ifdef HAVE_GTK_TREE_VIEW_COLUMN_GET_CELL_DATA_HINT
        hint = gtk_tree_view_column_get_cell_data_hint (GTK_TREE_VIEW_COLUMN (column));
@@ -338,7 +344,7 @@ _modest_header_view_compact_header_cell_data  (GtkTreeViewColumn *column,  GtkCe
                status_str = get_status_string (status);
                set_cell_text (date_or_status_cell, status_str, flags, RENDER_CELL_STYLE_GREY);
        } else {                
-               set_cell_text (date_or_status_cell, date ? modest_text_utils_get_display_date (date) : "",
+               set_cell_text (date_or_status_cell, date ? _modest_header_view_get_display_date (header_view, date) : "",
                               flags, RENDER_CELL_STYLE_GREY);
        }
        
index 2a68e09..45d1c26 100644 (file)
@@ -49,6 +49,7 @@
 #include "modest-platform.h"
 #include <modest-hbox-cell-renderer.h>
 #include <modest-vbox-cell-renderer.h>
+#include <modest-datetime-formatter.h>
 
 static void modest_header_view_class_init  (ModestHeaderViewClass *klass);
 static void modest_header_view_init        (ModestHeaderView *obj);
@@ -155,6 +156,8 @@ struct _ModestHeaderViewPrivate {
        HeaderViewStatus status;
        guint status_timeout;
        gboolean notify_status; /* whether or not the filter_row should notify about changes in the filtering */
+
+       ModestDatetimeFormatter *datetime_formatter;
 };
 
 typedef struct _HeadersCountChangedHelper HeadersCountChangedHelper;
@@ -553,6 +556,13 @@ modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, Tn
 }
 
 static void
+datetime_format_changed (ModestDatetimeFormatter *formatter,
+                        ModestHeaderView *self)
+{
+       gtk_widget_queue_draw (GTK_WIDGET (self));
+}
+
+static void
 modest_header_view_init (ModestHeaderView *obj)
 {
        ModestHeaderViewPrivate *priv;
@@ -587,6 +597,10 @@ modest_header_view_init (ModestHeaderView *obj)
                }                       
        }
 
+       priv->datetime_formatter = modest_datetime_formatter_new ();
+       g_signal_connect (G_OBJECT (priv->datetime_formatter), "format-changed", 
+                         G_CALLBACK (datetime_format_changed), (gpointer) obj);
+
        setup_drag_and_drop (GTK_WIDGET(obj));
 }
 
@@ -600,6 +614,11 @@ modest_header_view_dispose (GObject *obj)
        self = MODEST_HEADER_VIEW(obj);
        priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
 
+       if (priv->datetime_formatter) {
+               g_object_unref (priv->datetime_formatter);
+               priv->datetime_formatter = NULL;
+       }
+
        /* Free in the dispose to avoid unref cycles */
        if (priv->folder) {
                tny_folder_remove_observer (priv->folder, TNY_FOLDER_OBSERVER (obj));
@@ -2231,3 +2250,11 @@ modest_header_view_notify_observers(ModestHeaderView *header_view,
        g_mutex_unlock(priv->observer_list_lock);
 }
 
+const gchar *
+_modest_header_view_get_display_date (ModestHeaderView *self, time_t date)
+{
+       ModestHeaderViewPrivate *priv = NULL;
+       
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+       return modest_datetime_formatter_display_datetime (priv->datetime_formatter, date);
+}