diff src/view_file_list.c @ 149:f0c79a514c06

marks: fixes and cleanup
author nadvornik
date Sat, 24 Nov 2007 21:06:30 +0000
parents 2310066cc55a
children 976fba0add7c
line wrap: on
line diff
--- a/src/view_file_list.c	Thu Nov 22 21:15:35 2007 +0000
+++ b/src/view_file_list.c	Sat Nov 24 21:06:30 2007 +0000
@@ -533,19 +533,20 @@
 	GtkTreePath *tpath;
 	GtkTreeIter iter;
 	FileData *fd = NULL;
-    GtkTreeViewColumn *column;
-    gint colnum;
+	GtkTreeViewColumn *column;
+	gint col_idx;
     
 	if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget), bevent->x, bevent->y,
 					  &tpath, &column, NULL, NULL))
 		{
 		GtkTreeModel *store;
-        colnum = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(column), "column"));
+		col_idx = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(column), "column_store_idx"));
         
-        if (colnum <= FILE_COLUMN_MARKS - 2 + FILEDATA_MARKS_SIZE && colnum >= FILE_COLUMN_MARKS - 2)
-            return FALSE;
+		if (bevent->button == 1 &&
+		    col_idx >= FILE_COLUMN_MARKS && col_idx <= FILE_COLUMN_MARKS_LAST)
+			return FALSE;
         
-        store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
+		store = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
 
 		gtk_tree_model_get_iter(store, &iter, tpath);
 		gtk_tree_model_get(store, &iter, FILE_COLUMN_POINTER, &fd, -1);
@@ -1380,7 +1381,7 @@
 	column = gtk_tree_view_get_column(GTK_TREE_VIEW(listview), FILE_COLUMN_THUMB - 1);
 	if (!column) return;
 
-	gtk_tree_view_column_set_fixed_width(column, ((thumb) ? thumb_max_width : 4) + 50);
+	gtk_tree_view_column_set_fixed_width(column, ((thumb) ? thumb_max_width : 4) + 10);
 
 	list = gtk_tree_view_column_get_cell_renderers(column);
 	if (!list) return;
@@ -1598,7 +1599,7 @@
 
 	if (!image)
 		{
-		gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+		gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY);
 		renderer = gtk_cell_renderer_text_new();
 		if (right_justify)
 			{
@@ -1606,9 +1607,9 @@
 			}
 		gtk_tree_view_column_pack_start(column, renderer, TRUE);
 		gtk_tree_view_column_add_attribute(column, renderer, "text", n);
-	        if (expand)
+		if (expand)
 			gtk_tree_view_column_set_expand(column, TRUE);
-        }
+		}
 	else
 		{
 		gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
@@ -1619,54 +1620,58 @@
 		}
 
 	gtk_tree_view_column_set_cell_data_func(column, renderer, vflist_listview_color_cb, vfl, NULL);
+	g_object_set_data (G_OBJECT (column), "column_store_idx", GUINT_TO_POINTER(n));
+	g_object_set_data (G_OBJECT (renderer), "column_store_idx", GUINT_TO_POINTER(n));
 
 	gtk_tree_view_append_column(GTK_TREE_VIEW(vfl->listview), column);
 }
 
 static void vflist_listview_mark_toggled(GtkCellRendererToggle *cell, gchar *path_str, GtkTreeStore *store)
 {
-    GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
-    guint *marks;
-    GtkTreeIter iter;
-    FileData *fd;
-    gboolean mark;
-    guint column;
+	GtkTreePath *path = gtk_tree_path_new_from_string(path_str);
+	guint *marks;
+	GtkTreeIter iter;
+	FileData *fd;
+	gboolean mark;
+	guint col_idx;
  
-    if (!path || !gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
-        return;
+	if (!path || !gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
+    		return;
 
-    column = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(cell), "column"));
+	col_idx = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(cell), "column_store_idx"));
+    
+	g_assert(col_idx >= FILE_COLUMN_MARKS && col_idx <= FILE_COLUMN_MARKS_LAST);
     
-    gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, column, &mark, -1);
-    mark ^= 1;
-    fd->marks[column] = mark;
+	gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, FILE_COLUMN_POINTER, &fd, col_idx, &mark, -1);
+	mark ^= 1;
+	fd->marks[col_idx - FILE_COLUMN_MARKS] = mark;
         
-    gtk_tree_store_set(store, &iter, column, mark, -1);
-    gtk_tree_path_free(path);
+	gtk_tree_store_set(store, &iter, col_idx, mark, -1);
+	gtk_tree_path_free(path);
 }
 
 static void vflist_listview_add_column_toggle(ViewFileList *vfl, gint n, const gchar *title)
 {
-    GtkTreeViewColumn *column;
-    GtkCellRenderer *renderer;
-    GtkTreeStore *store;
-    gint index;
+	GtkTreeViewColumn *column;
+	GtkCellRenderer *renderer;
+	GtkTreeStore *store;
+	gint index;
     
 	store = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(vfl->listview)));
 
-    renderer = gtk_cell_renderer_toggle_new();
-    column = gtk_tree_view_column_new_with_attributes(title, renderer, "active", n, NULL);
+	renderer = gtk_cell_renderer_toggle_new();
+	column = gtk_tree_view_column_new_with_attributes(title, renderer, "active", n, NULL);
 
-    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    g_object_set_data (G_OBJECT (column), "column", GUINT_TO_POINTER(n));
-    g_object_set_data (G_OBJECT (renderer), "column", GUINT_TO_POINTER(n));
+	gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+	g_object_set_data (G_OBJECT (column), "column_store_idx", GUINT_TO_POINTER(n));
+	g_object_set_data (G_OBJECT (renderer), "column_store_idx", GUINT_TO_POINTER(n));
  
-    index = gtk_tree_view_append_column(GTK_TREE_VIEW(vfl->listview), column);
-    gtk_tree_view_column_set_fixed_width(column, 16);
-    gtk_tree_view_column_set_visible(column, vfl->marks_enabled);
+	index = gtk_tree_view_append_column(GTK_TREE_VIEW(vfl->listview), column);
+	gtk_tree_view_column_set_fixed_width(column, 16);
+	gtk_tree_view_column_set_visible(column, vfl->marks_enabled);
 
         
-    g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(vflist_listview_mark_toggled), store);
+	g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(vflist_listview_mark_toggled), store);
 }
 
 /*
@@ -1720,8 +1725,8 @@
 	GtkTreeStore *store;
 	GtkTreeSelection *selection;
 
-    GType *flist_types;
-    int i;
+	GType flist_types[FILE_COLUMN_COUNT];
+	int i;
     
 	vfl = g_new0(ViewFileList, 1);
 
@@ -1749,7 +1754,6 @@
 	g_signal_connect(G_OBJECT(vfl->widget), "destroy",
 			 G_CALLBACK(vflist_destroy_cb), vfl);
 
-	flist_types = g_new(GType, FILE_COLUMN_COUNT);
 	flist_types[FILE_COLUMN_POINTER] = G_TYPE_POINTER;
 	flist_types[FILE_COLUMN_THUMB] = GDK_TYPE_PIXBUF;
 	flist_types[FILE_COLUMN_NAME] = G_TYPE_STRING;
@@ -1761,7 +1765,6 @@
 		flist_types[i] = G_TYPE_BOOLEAN;
 
 	store = gtk_tree_store_newv(FILE_COLUMN_COUNT, flist_types);
-	g_free(flist_types);
                                
 	vfl->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
 	g_object_unref(store);
@@ -1770,18 +1773,20 @@
 	gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_MULTIPLE);
 	gtk_tree_selection_set_select_function(selection, vflist_select_cb, vfl, NULL);
 
-//	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vfl->listview), FALSE);
+	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(vfl->listview), FALSE);
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(vfl->listview), FALSE);
 
 	vflist_listview_add_column(vfl, FILE_COLUMN_THUMB, "", TRUE, FALSE, FALSE);
-	vflist_listview_add_column(vfl, FILE_COLUMN_NAME, _("Name"), FALSE, FALSE, FALSE);
-	vflist_listview_add_column(vfl, FILE_COLUMN_SIDECARS, _("Sidecars"), FALSE, FALSE, FALSE);
-	vflist_listview_add_column(vfl, FILE_COLUMN_SIZE, _("Size"), FALSE, TRUE, FALSE);
-	vflist_listview_add_column(vfl, FILE_COLUMN_DATE, _("Date"), FALSE, TRUE, TRUE);
 
 	for(i = 0; i < FILEDATA_MARKS_SIZE;i++)
     		vflist_listview_add_column_toggle(vfl, i + FILE_COLUMN_MARKS, "");
 
+	vflist_listview_add_column(vfl, FILE_COLUMN_NAME, _("Name"), FALSE, FALSE, FALSE);
+	vflist_listview_add_column(vfl, FILE_COLUMN_SIDECARS, _("SC"), FALSE, FALSE, FALSE);
+
+	vflist_listview_add_column(vfl, FILE_COLUMN_SIZE, _("Size"), FALSE, TRUE, FALSE);
+	vflist_listview_add_column(vfl, FILE_COLUMN_DATE, _("Date"), FALSE, TRUE, FALSE);
+
             
 	g_signal_connect(G_OBJECT(vfl->listview), "key_press_event",
 			 G_CALLBACK(vflist_press_key_cb), vfl);
@@ -1827,22 +1832,29 @@
 
 void vflist_marks_set(ViewFileList *vfl, gint enable)
 {
-    GtkTreeStore *store;
-    GtkTreeViewColumn *column;
-    int i;
+	GtkTreeStore *store;
+	GtkTreeViewColumn *column;
+	GList *columns, *work;
     
 	if (vfl->marks_enabled == enable) return;
 
 	vfl->marks_enabled = enable;
     
-    for (i = 0; i < FILEDATA_MARKS_SIZE; i++) {
-        /* index - 2 because column's store != tree view */
-        column = gtk_tree_view_get_column(GTK_TREE_VIEW(vfl->listview), i + FILE_COLUMN_MARKS - 2);
-        
-        gtk_tree_view_column_set_visible(column, enable);
-    }
+	columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(vfl->listview));
+	
+	work = columns;
+	while (work)
+		{
+		GtkTreeViewColumn *column = work->data;
+		gint col_idx = GPOINTER_TO_INT(g_object_get_data (G_OBJECT(column), "column_store_idx"));
+		work = work->next;
+		
+		if (col_idx <= FILE_COLUMN_MARKS_LAST && col_idx >= FILE_COLUMN_MARKS)                                                                                             
+			gtk_tree_view_column_set_visible(column, enable);
+		}
     
-    //vflist_refresh(vfl);
+	g_list_free(columns);
+	//vflist_refresh(vfl);
 }
 
 void vflist_set_layout(ViewFileList *vfl, LayoutWindow *layout)