diff src/preferences.c @ 1239:254b09942e68

metadata write mode (direct or sidecar) made configurable for each file format
author nadvornik
date Sun, 11 Jan 2009 12:13:30 +0000
parents 878718372aca
children b2d98b7c26c1
line wrap: on
line diff
--- a/src/preferences.c	Sat Jan 10 20:40:37 2009 +0000
+++ b/src/preferences.c	Sun Jan 11 12:13:30 2009 +0000
@@ -73,7 +73,9 @@
 	FE_ENABLE,
 	FE_EXTENSION,
 	FE_DESCRIPTION,
-	FE_CLASS
+	FE_CLASS,
+	FE_WRITABLE,
+	FE_ALLOW_SIDECAR
 };
 
 
@@ -737,6 +739,44 @@
 	filter_rebuild();
 }
 
+static void filter_store_writable_cb(GtkCellRendererToggle *renderer,
+				   gchar *path_str, gpointer data)
+{
+	GtkWidget *model = data;
+	FilterEntry *fe;
+	GtkTreePath *tpath;
+	GtkTreeIter iter;
+
+	tpath = gtk_tree_path_new_from_string(path_str);
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);
+	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);
+
+	fe->writable = !fe->writable;
+	if (fe->writable) fe->allow_sidecar = FALSE;
+
+	gtk_tree_path_free(tpath);
+	filter_rebuild();
+}
+
+static void filter_store_sidecar_cb(GtkCellRendererToggle *renderer,
+				   gchar *path_str, gpointer data)
+{
+	GtkWidget *model = data;
+	FilterEntry *fe;
+	GtkTreePath *tpath;
+	GtkTreeIter iter;
+
+	tpath = gtk_tree_path_new_from_string(path_str);
+	gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);
+	gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);
+
+	fe->allow_sidecar = !fe->allow_sidecar;
+	if (fe->allow_sidecar) fe->writable = FALSE;
+
+	gtk_tree_path_free(tpath);
+	filter_rebuild();
+}
+
 static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
 			    GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
 {
@@ -762,12 +802,20 @@
 			g_object_set(GTK_CELL_RENDERER(cell),
 				     "text", _(format_class_list[fe->file_class]), NULL);
 			break;
+		case FE_WRITABLE:
+			g_object_set(GTK_CELL_RENDERER(cell),
+				     "active", fe->writable, NULL);
+			break;
+		case FE_ALLOW_SIDECAR:
+			g_object_set(GTK_CELL_RENDERER(cell),
+				     "active", fe->allow_sidecar, NULL);
+			break;
 		}
 }
 
 static void filter_add_cb(GtkWidget *widget, gpointer data)
 {
-	filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE);
+	filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
 	filter_store_populate();
 
 	/* FIXME: implement the scroll to/select row stuff for tree view */
@@ -1296,6 +1344,27 @@
 						GINT_TO_POINTER(FE_CLASS), NULL);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
 
+	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_set_title(column, _("Writable"));
+	gtk_tree_view_column_set_resizable(column, FALSE);
+	renderer = gtk_cell_renderer_toggle_new();
+	g_signal_connect(G_OBJECT(renderer), "toggled",
+			 G_CALLBACK(filter_store_writable_cb), filter_store);
+	gtk_tree_view_column_pack_start(column, renderer, FALSE);
+	gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func,
+						GINT_TO_POINTER(FE_WRITABLE), NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
+
+	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_set_title(column, _("Sidecar is allowed"));
+	gtk_tree_view_column_set_resizable(column, FALSE);
+	renderer = gtk_cell_renderer_toggle_new();
+	g_signal_connect(G_OBJECT(renderer), "toggled",
+			 G_CALLBACK(filter_store_sidecar_cb), filter_store);
+	gtk_tree_view_column_pack_start(column, renderer, FALSE);
+	gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func,
+						GINT_TO_POINTER(FE_ALLOW_SIDECAR), NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
 
 
 	filter_store_populate();