comparison 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
comparison
equal deleted inserted replaced
1238:947e603a52c6 1239:254b09942e68
71 71
72 enum { 72 enum {
73 FE_ENABLE, 73 FE_ENABLE,
74 FE_EXTENSION, 74 FE_EXTENSION,
75 FE_DESCRIPTION, 75 FE_DESCRIPTION,
76 FE_CLASS 76 FE_CLASS,
77 FE_WRITABLE,
78 FE_ALLOW_SIDECAR
77 }; 79 };
78 80
79 81
80 static gchar *format_class_list[] = { 82 static gchar *format_class_list[] = {
81 N_("Unknown"), 83 N_("Unknown"),
735 737
736 gtk_tree_path_free(tpath); 738 gtk_tree_path_free(tpath);
737 filter_rebuild(); 739 filter_rebuild();
738 } 740 }
739 741
742 static void filter_store_writable_cb(GtkCellRendererToggle *renderer,
743 gchar *path_str, gpointer data)
744 {
745 GtkWidget *model = data;
746 FilterEntry *fe;
747 GtkTreePath *tpath;
748 GtkTreeIter iter;
749
750 tpath = gtk_tree_path_new_from_string(path_str);
751 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);
752 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);
753
754 fe->writable = !fe->writable;
755 if (fe->writable) fe->allow_sidecar = FALSE;
756
757 gtk_tree_path_free(tpath);
758 filter_rebuild();
759 }
760
761 static void filter_store_sidecar_cb(GtkCellRendererToggle *renderer,
762 gchar *path_str, gpointer data)
763 {
764 GtkWidget *model = data;
765 FilterEntry *fe;
766 GtkTreePath *tpath;
767 GtkTreeIter iter;
768
769 tpath = gtk_tree_path_new_from_string(path_str);
770 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, tpath);
771 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 0, &fe, -1);
772
773 fe->allow_sidecar = !fe->allow_sidecar;
774 if (fe->allow_sidecar) fe->writable = FALSE;
775
776 gtk_tree_path_free(tpath);
777 filter_rebuild();
778 }
779
740 static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, 780 static void filter_set_func(GtkTreeViewColumn *tree_column, GtkCellRenderer *cell,
741 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) 781 GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
742 { 782 {
743 FilterEntry *fe; 783 FilterEntry *fe;
744 784
760 break; 800 break;
761 case FE_CLASS: 801 case FE_CLASS:
762 g_object_set(GTK_CELL_RENDERER(cell), 802 g_object_set(GTK_CELL_RENDERER(cell),
763 "text", _(format_class_list[fe->file_class]), NULL); 803 "text", _(format_class_list[fe->file_class]), NULL);
764 break; 804 break;
805 case FE_WRITABLE:
806 g_object_set(GTK_CELL_RENDERER(cell),
807 "active", fe->writable, NULL);
808 break;
809 case FE_ALLOW_SIDECAR:
810 g_object_set(GTK_CELL_RENDERER(cell),
811 "active", fe->allow_sidecar, NULL);
812 break;
765 } 813 }
766 } 814 }
767 815
768 static void filter_add_cb(GtkWidget *widget, gpointer data) 816 static void filter_add_cb(GtkWidget *widget, gpointer data)
769 { 817 {
770 filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE); 818 filter_add_unique("description", ".new", FORMAT_CLASS_IMAGE, TRUE, FALSE, TRUE);
771 filter_store_populate(); 819 filter_store_populate();
772 820
773 /* FIXME: implement the scroll to/select row stuff for tree view */ 821 /* FIXME: implement the scroll to/select row stuff for tree view */
774 } 822 }
775 823
1294 gtk_tree_view_column_pack_start(column, renderer, TRUE); 1342 gtk_tree_view_column_pack_start(column, renderer, TRUE);
1295 gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func, 1343 gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func,
1296 GINT_TO_POINTER(FE_CLASS), NULL); 1344 GINT_TO_POINTER(FE_CLASS), NULL);
1297 gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column); 1345 gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
1298 1346
1347 column = gtk_tree_view_column_new();
1348 gtk_tree_view_column_set_title(column, _("Writable"));
1349 gtk_tree_view_column_set_resizable(column, FALSE);
1350 renderer = gtk_cell_renderer_toggle_new();
1351 g_signal_connect(G_OBJECT(renderer), "toggled",
1352 G_CALLBACK(filter_store_writable_cb), filter_store);
1353 gtk_tree_view_column_pack_start(column, renderer, FALSE);
1354 gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func,
1355 GINT_TO_POINTER(FE_WRITABLE), NULL);
1356 gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
1357
1358 column = gtk_tree_view_column_new();
1359 gtk_tree_view_column_set_title(column, _("Sidecar is allowed"));
1360 gtk_tree_view_column_set_resizable(column, FALSE);
1361 renderer = gtk_cell_renderer_toggle_new();
1362 g_signal_connect(G_OBJECT(renderer), "toggled",
1363 G_CALLBACK(filter_store_sidecar_cb), filter_store);
1364 gtk_tree_view_column_pack_start(column, renderer, FALSE);
1365 gtk_tree_view_column_set_cell_data_func(column, renderer, filter_set_func,
1366 GINT_TO_POINTER(FE_ALLOW_SIDECAR), NULL);
1367 gtk_tree_view_append_column(GTK_TREE_VIEW(filter_view), column);
1299 1368
1300 1369
1301 filter_store_populate(); 1370 filter_store_populate();
1302 gtk_container_add(GTK_CONTAINER(scrolled), filter_view); 1371 gtk_container_add(GTK_CONTAINER(scrolled), filter_view);
1303 gtk_widget_show(filter_view); 1372 gtk_widget_show(filter_view);