From ce79eb04a5a7eebaa48088b7ef448b1c0c53a099 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Mon, 29 May 2006 12:24:49 +0000 Subject: [PATCH] * modest-tny-folder-tree-view.c: - make folder names bold and append () with the number of unread messages for the folder, if there are any. Sadly, TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN never contains anything but 0 * modest-tny-header-tree-view.c: - make message which don't have the 'SEEN'-flag display in bold. - added also the the setting of this flags when you select the message, but tinymail does not like that (crash), so that code has been disabled * all: - fix the macro-mistake due to spuug pmo-trunk-r119 --- src/modest-tny-folder-tree-view.c | 36 ++++++++++++++++-- src/modest-tny-folder-tree-view.h | 2 +- src/modest-tny-header-tree-view.c | 75 +++++++++++++++++++++++++++---------- src/modest-tny-header-tree-view.h | 2 +- 4 files changed, 91 insertions(+), 24 deletions(-) diff --git a/src/modest-tny-folder-tree-view.c b/src/modest-tny-folder-tree-view.c index 4e6d3f8..6209f78 100644 --- a/src/modest-tny-folder-tree-view.c +++ b/src/modest-tny-folder-tree-view.c @@ -89,7 +89,37 @@ modest_tny_folder_tree_view_class_init (ModestTnyFolderTreeViewClass *klass) g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); } - + + + +static void +map_folder_text (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) +{ + GObject *rendobj; + gchar *fname; + guint unread; + + gtk_tree_model_get (tree_model, iter, + TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, &fname, + TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN, &unread, -1); + rendobj = G_OBJECT(renderer); + + /* folders with unread messages are bold and with (%d) */ + if (unread > 0) { + gchar *name_number = g_strdup_printf ("%s (%d)", fname, unread); + g_object_set (rendobj, "text", name_number, NULL); + g_free (name_number); + g_object_set (rendobj, "weight", 800, NULL); + } else + g_object_set (rendobj, "weight", 400, NULL); /* default, non-bold */ + + + g_free (fname); +} + + + static void modest_tny_folder_tree_view_init (ModestTnyFolderTreeView *obj) { @@ -107,6 +137,7 @@ modest_tny_folder_tree_view_init (ModestTnyFolderTreeView *obj) renderer,"text", TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, NULL); + gtk_tree_view_column_set_cell_data_func(column, renderer, map_folder_text, NULL, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(obj), column); @@ -277,10 +308,9 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data) &folder, -1); /* folder will not be defined if you click eg. on the root node */ - if (folder) { + if (folder) g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTED_SIGNAL], 0, folder); - } } diff --git a/src/modest-tny-folder-tree-view.h b/src/modest-tny-folder-tree-view.h index 5b27bb0..ba382d2 100644 --- a/src/modest-tny-folder-tree-view.h +++ b/src/modest-tny-folder-tree-view.h @@ -13,7 +13,7 @@ G_BEGIN_DECLS /* convenience macros */ #define MODEST_TYPE_TNY_FOLDER_TREE_VIEW (modest_tny_folder_tree_view_get_type()) #define MODEST_TNY_FOLDER_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_TNY_FOLDER_TREE_VIEW,ModestTnyFolderTreeView)) -#define MODEST_TNY_FOLDER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TNY_FOLDER_TREE_VIEW,GObject)) +#define MODEST_TNY_FOLDER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TNY_FOLDER_TREE_VIEW,ModestTnyFolderTreeViewClass)) #define MODEST_IS_TNY_FOLDER_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_TNY_FOLDER_TREE_VIEW)) #define MODEST_IS_TNY_FOLDER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_TNY_FOLDER_TREE_VIEW)) #define MODEST_TNY_FOLDER_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_TNY_FOLDER_TREE_VIEW,ModestTnyFolderTreeViewClass)) diff --git a/src/modest-tny-header-tree-view.c b/src/modest-tny-header-tree-view.c index 0e8dcc9..dd65cc2 100644 --- a/src/modest-tny-header-tree-view.c +++ b/src/modest-tny-header-tree-view.c @@ -96,10 +96,10 @@ modest_tny_header_tree_view_class_init (ModestTnyHeaderTreeViewClass *klass) } static void -map_flags (GtkTreeViewColumn *column, GtkCellRenderer *renderer, +map_header_icon (GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { - gint flags; + TnyMsgHeaderFlags flags; static gchar txt[10]; gtk_tree_model_get (tree_model, iter, TNY_MSG_HEADER_LIST_MODEL_FLAGS_COLUMN, &flags, -1); @@ -107,28 +107,51 @@ map_flags (GtkTreeViewColumn *column, GtkCellRenderer *renderer, g_object_set (G_OBJECT (renderer), "text", txt, NULL); } + +static void +map_header_text (GtkTreeViewColumn *column, GtkCellRenderer *renderer, + GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) +{ + GObject *rendobj; + TnyMsgHeaderFlags flags; + + gtk_tree_model_get (tree_model, iter, TNY_MSG_HEADER_LIST_MODEL_FLAGS_COLUMN, + &flags, -1); + rendobj = G_OBJECT(renderer); + + if (!(flags & TNY_MSG_HEADER_FLAG_SEEN)) + g_object_set (rendobj, "weight", 800, NULL); + else + g_object_set (rendobj, "weight", 400, NULL); /* default, non-bold */ +} + + static void modest_tny_header_tree_view_init (ModestTnyHeaderTreeView *obj) { GtkTreeViewColumn *column; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); - GtkCellRenderer *renderer_toggle = gtk_cell_renderer_toggle_new (); - ModestTnyHeaderTreeViewPrivate *priv; + GtkCellRenderer *renderer_icon, *renderer_header; + + ModestTnyHeaderTreeViewPrivate *priv; priv = MODEST_TNY_HEADER_TREE_VIEW_GET_PRIVATE(obj); + renderer_icon = gtk_cell_renderer_text_new (); /* TODO */ + renderer_header = gtk_cell_renderer_text_new (); + priv->tny_msg_folder = NULL; priv->header_tree_model = NULL; - - column = gtk_tree_view_column_new_with_attributes(_("F"), renderer, NULL); + + /* flags */ + column = gtk_tree_view_column_new_with_attributes(_("F"), renderer_icon, NULL); gtk_tree_view_column_set_resizable (column, TRUE); gtk_tree_view_column_set_sort_column_id (column, TNY_MSG_HEADER_LIST_MODEL_FLAGS_COLUMN); gtk_tree_view_column_set_sort_indicator (column, FALSE); gtk_tree_view_append_column (GTK_TREE_VIEW(obj), column); - gtk_tree_view_column_set_cell_data_func(column, renderer, map_flags, NULL, NULL); - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes(_("Date"), renderer, + gtk_tree_view_column_set_cell_data_func(column, renderer_icon, map_header_icon, NULL, NULL); + + /* date */ + column = gtk_tree_view_column_new_with_attributes(_("Date"), renderer_header, "text", TNY_MSG_HEADER_LIST_MODEL_DATE_RECEIVED_COLUMN, NULL); @@ -136,11 +159,12 @@ modest_tny_header_tree_view_init (ModestTnyHeaderTreeView *obj) gtk_tree_view_column_set_sort_column_id (column, TNY_MSG_HEADER_LIST_MODEL_DATE_RECEIVED_COLUMN); gtk_tree_view_column_set_sort_indicator (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(obj), column); + gtk_tree_view_column_set_cell_data_func(column, renderer_header, map_header_text, NULL, NULL); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (column_clicked), obj); - - - column = gtk_tree_view_column_new_with_attributes(_("From"), renderer, + + /* from */ + column = gtk_tree_view_column_new_with_attributes(_("From"), renderer_header, "text", TNY_MSG_HEADER_LIST_MODEL_FROM_COLUMN, NULL); @@ -148,10 +172,12 @@ modest_tny_header_tree_view_init (ModestTnyHeaderTreeView *obj) gtk_tree_view_column_set_sort_column_id (column, TNY_MSG_HEADER_LIST_MODEL_FROM_COLUMN); gtk_tree_view_column_set_sort_indicator (column, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW(obj), column); + gtk_tree_view_column_set_cell_data_func(column, renderer_header, map_header_text, NULL, NULL); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (column_clicked), obj); - column = gtk_tree_view_column_new_with_attributes(_("Subject"), renderer, + /* subject */ + column = gtk_tree_view_column_new_with_attributes(_("Subject"), renderer_header, "text", TNY_MSG_HEADER_LIST_MODEL_SUBJECT_COLUMN, NULL); @@ -161,9 +187,13 @@ modest_tny_header_tree_view_init (ModestTnyHeaderTreeView *obj) gtk_tree_view_append_column (GTK_TREE_VIEW(obj), column); g_signal_connect (G_OBJECT (column), "clicked", G_CALLBACK (column_clicked), obj); + + /* all cols */ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(obj), TRUE); gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(obj), TRUE); + gtk_tree_view_column_set_cell_data_func(column, renderer_header, map_header_text, NULL, NULL); + gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(obj), TRUE); /* alternating row colors */ } @@ -270,6 +300,7 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data) &header, -1); if (header) { + TnyMsgHeaderFlags flags; const TnyMsgIface *msg; const TnyMsgFolderIface *folder; @@ -282,18 +313,24 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data) if (!msg) g_message ("cannot find msg"); } + + /* mark message as seen; _set_flags crashes, bug in tinymail? */ + //flags = tny_msg_header_iface_get_flags (TNY_MSG_HEADER_IFACE(header)); + //tny_msg_header_iface_set_flags (header, flags | TNY_MSG_HEADER_FLAG_SEEN); + g_signal_emit (G_OBJECT(tree_view), signals[MESSAGE_SELECTED_SIGNAL], 0, msg); } } static void -column_clicked (GtkTreeViewColumn *treeviewcolumn, gpointer user_data) +column_clicked (GtkTreeViewColumn *col, gpointer user_data) { - GtkTreeView *treeview = GTK_TREE_VIEW (user_data); + GtkTreeView *treeview; gint id; - - id = gtk_tree_view_column_get_sort_column_id (treeviewcolumn); + + treeview = GTK_TREE_VIEW (user_data); + id = gtk_tree_view_column_get_sort_column_id (col); gtk_tree_view_set_search_column (treeview, id); } diff --git a/src/modest-tny-header-tree-view.h b/src/modest-tny-header-tree-view.h index 3d4c7b5..b0cb60a 100644 --- a/src/modest-tny-header-tree-view.h +++ b/src/modest-tny-header-tree-view.h @@ -16,7 +16,7 @@ G_BEGIN_DECLS /* convenience macros */ #define MODEST_TYPE_TNY_HEADER_TREE_VIEW (modest_tny_header_tree_view_get_type()) #define MODEST_TNY_HEADER_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_TNY_HEADER_TREE_VIEW,ModestTnyHeaderTreeView)) -#define MODEST_TNY_HEADER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TNY_HEADER_TREE_VIEW,GObject)) +#define MODEST_TNY_HEADER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_TNY_HEADER_TREE_VIEW,ModestTnyHeaderTreeViewClass)) #define MODEST_IS_TNY_HEADER_TREE_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_TNY_HEADER_TREE_VIEW)) #define MODEST_IS_TNY_HEADER_TREE_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_TNY_HEADER_TREE_VIEW)) #define MODEST_TNY_HEADER_TREE_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_TNY_HEADER_TREE_VIEW,ModestTnyHeaderTreeViewClass)) -- 1.7.9.5