* modest-tny-folder-tree-view.c:
authorDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 29 May 2006 12:24:49 +0000 (12:24 +0000)
committerDirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>
Mon, 29 May 2006 12:24:49 +0000 (12:24 +0000)
  - make folder names bold and append (<number>) 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
src/modest-tny-folder-tree-view.h
src/modest-tny-header-tree-view.c
src/modest-tny-header-tree-view.h

index 4e6d3f8..6209f78 100644 (file)
@@ -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); 
 }
                              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)
 {
 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);
                                                          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);
        
        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 */
                            &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);
                g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTED_SIGNAL], 0,
                       folder);
-       }
 }
 
 
 }
 
 
index 5b27bb0..ba382d2 100644 (file)
@@ -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))
 /* 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))
 #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))
index 0e8dcc9..dd65cc2 100644 (file)
@@ -96,10 +96,10 @@ modest_tny_header_tree_view_class_init (ModestTnyHeaderTreeViewClass *klass)
 }
 
 static void
 }
 
 static void
-map_flags (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
+map_header_icon (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
            GtkTreeModel *tree_model,  GtkTreeIter *iter,  gpointer data)
 {
            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);
        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);
 }
 
        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;
 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); 
 
        
        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;
        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_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);
                                                           "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_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);
 
        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);
                                                           "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_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);
 
 
        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);
                                                           "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);
 
        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_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 */
        
 }
        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) {
                            &header, -1);
        
        if (header) {
+               TnyMsgHeaderFlags flags;
                const TnyMsgIface *msg;
                const TnyMsgFolderIface *folder;
                
                const TnyMsgIface *msg;
                const TnyMsgFolderIface *folder;
                
@@ -282,18 +313,24 @@ selection_changed (GtkTreeSelection *sel, gpointer user_data)
                        if (!msg) 
                                g_message ("cannot find msg");          
                }
                        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
                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;
        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);
 }
        
        gtk_tree_view_set_search_column (treeview, id);
 }
index 3d4c7b5..b0cb60a 100644 (file)
@@ -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))
 /* 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))
 #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))