Mercurial > geeqie
diff src/view_file.c @ 964:ba1d3c4bc0cd
implemented marks filter
author | nadvornik |
---|---|
date | Sat, 16 Aug 2008 20:34:14 +0000 |
parents | 8308d3606991 |
children | 065a129fd42b |
line wrap: on
line diff
--- a/src/view_file.c Sat Aug 16 07:18:16 2008 +0000 +++ b/src/view_file.c Sat Aug 16 20:34:14 2008 +0000 @@ -656,6 +656,35 @@ g_free(vf); } +static void vf_marks_filter_toggle_cb(GtkWidget *widget, gpointer data) +{ + ViewFile *vf = data; + vf_refresh_idle(vf); +} + + +static GtkWidget *vf_marks_filter_init(ViewFile *vf) +{ + GtkWidget *frame = gtk_frame_new(NULL); + GtkWidget *hbox = gtk_hbox_new(FALSE, 0); + + gint i; + + for (i = 0; i < FILEDATA_MARKS_SIZE ; i++) + { + GtkWidget *check = gtk_check_button_new(); + gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(check), "toggled", + G_CALLBACK(vf_marks_filter_toggle_cb), vf); + + gtk_widget_show(check); + vf->filter_check[i] = check; + } + gtk_container_add(GTK_CONTAINER(frame), hbox); + gtk_widget_show(hbox); + return frame; +} + ViewFile *vf_new(FileViewType type, FileData *dir_fd) { ViewFile *vf; @@ -678,11 +707,18 @@ vf->refresh_idle_id = -1; - vf->widget = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vf->widget), GTK_SHADOW_IN); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vf->widget), + vf->scrolled = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vf->scrolled), GTK_SHADOW_IN); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vf->scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + vf->filter = vf_marks_filter_init(vf); + + vf->widget = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vf->widget), vf->filter, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vf->widget), vf->scrolled, TRUE, TRUE, 0); + gtk_widget_show(vf->scrolled); + g_signal_connect(G_OBJECT(vf->widget), "destroy", G_CALLBACK(vf_destroy_cb), vf); @@ -701,7 +737,7 @@ g_signal_connect(G_OBJECT(vf->listview), "button_release_event", G_CALLBACK(vf_release_cb), vf); - gtk_container_add(GTK_CONTAINER(vf->widget), vf->listview); + gtk_container_add(GTK_CONTAINER(vf->scrolled), vf->listview); gtk_widget_show(vf->listview); if (dir_fd) vf_set_fd(vf, dir_fd); @@ -741,6 +777,28 @@ case FILEVIEW_LIST: vflist_marks_set(vf, enable); break; case FILEVIEW_ICON: vficon_marks_set(vf, enable); break; } + if (enable) + gtk_widget_show(vf->filter); + else + gtk_widget_hide(vf->filter); + + vf_refresh_idle(vf); +} + +guint vf_marks_get_filter(ViewFile *vf) +{ + guint ret = 0; + gint i; + if (!vf->marks_enabled) return 0; + + for (i = 0; i < FILEDATA_MARKS_SIZE ; i++) + { + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(vf->filter_check[i]))) + { + ret |= 1 << i; + } + } + return ret; } void vf_set_layout(ViewFile *vf, LayoutWindow *layout) @@ -771,6 +829,14 @@ } +void vf_refresh_idle(ViewFile *vf) +{ + if (vf->refresh_idle_id == -1) + { + vf->refresh_idle_id = g_idle_add(vf_refresh_idle_cb, vf); + } +} + void vf_notify_cb(FileData *fd, NotifyType type, gpointer data) { ViewFile *vf = data; @@ -804,9 +870,9 @@ } } - if (refresh && vf->refresh_idle_id == -1) + if (refresh) { - vf->refresh_idle_id = g_idle_add(vf_refresh_idle_cb, vf); + vf_refresh_idle(vf); } }