# HG changeset patch # User nadvornik # Date 1214164880 0 # Node ID 8308d3606991eb67de903473d375123119a0bbf4 # Parent 6e521e987105b5ba4ba1de3271b4fbf50816c48f show marks in iconview diff -r 6e521e987105 -r 8308d3606991 src/cellrenderericon.c --- a/src/cellrenderericon.c Sun Jun 22 10:01:26 2008 +0000 +++ b/src/cellrenderericon.c Sun Jun 22 20:01:20 2008 +0000 @@ -26,6 +26,10 @@ #define FIXED_ICON_SIZE_MAX 512 +#define TOGGLE_WIDTH 13 +#define TOGGLE_SPACING 18 + + static void gqv_cell_renderer_icon_get_property(GObject *object, guint param_id, GValue *value, @@ -65,7 +69,10 @@ PROP_BACKGROUND_SET, PROP_FOREGROUND_SET, - PROP_SHOW_TEXT + PROP_SHOW_TEXT, + PROP_SHOW_MARKS, + PROP_NUM_MARKS, + PROP_MARKS }; static gpointer parent_class; @@ -203,6 +210,32 @@ _("Whether the text is displayed"), TRUE, G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, + PROP_SHOW_MARKS, + g_param_spec_boolean("show_marks", + _("Show marks"), + _("Whether the marks are displayed"), + TRUE, + G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, + PROP_NUM_MARKS, + g_param_spec_int("num_marks", + _("Number of marks"), + _("Number of marks"), + 0, 32, + 6, + G_PARAM_READWRITE)); + + g_object_class_install_property(object_class, + PROP_MARKS, + g_param_spec_uint("marks", + _("Marks"), + _("Marks bit array"), + 0, 0xffffffff, + 0, + G_PARAM_READWRITE)); } static void @@ -273,6 +306,15 @@ case PROP_SHOW_TEXT: g_value_set_boolean(value, cellicon->show_text); break; + case PROP_SHOW_MARKS: + g_value_set_boolean(value, cellicon->show_marks); + break; + case PROP_NUM_MARKS: + g_value_set_int(value, cellicon->num_marks); + break; + case PROP_MARKS: + g_value_set_uint(value, cellicon->marks); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); break; @@ -385,6 +427,15 @@ case PROP_SHOW_TEXT: cellicon->show_text = g_value_get_boolean(value); break; + case PROP_SHOW_MARKS: + cellicon->show_marks = g_value_get_boolean(value); + break; + case PROP_NUM_MARKS: + cellicon->num_marks = g_value_get_int(value); + break; + case PROP_MARKS: + cellicon->marks = g_value_get_uint(value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, param_id, pspec); break; @@ -494,6 +545,12 @@ calc_height += rect.height; } + if (cellicon->show_marks) + { + calc_height += TOGGLE_SPACING; + calc_width = MAX(calc_width, TOGGLE_SPACING * cellicon->num_marks); + } + calc_width += (gint)cell->xpad * 2; calc_height += (gint)cell->ypad * 2; @@ -614,6 +671,11 @@ pix_rect.height = text_rect.height; pix_rect.x = cell_area->x + cell->xpad + (cell_rect.width - text_rect.width + 1) / 2; pix_rect.y = cell_area->y + cell->ypad + (cell_rect.height - text_rect.height); + + if (cellicon->show_marks) + { + pix_rect.y -= TOGGLE_SPACING; + } if (gdk_rectangle_intersect(cell_area, &pix_rect, &draw_rect) && gdk_rectangle_intersect(expose_area, &draw_rect, &draw_rect)) @@ -629,6 +691,28 @@ g_object_unref(layout); } + if (cellicon->show_marks) + { + GdkRectangle pix_rect; + GdkRectangle draw_rect; + gint i; + + pix_rect.width = TOGGLE_SPACING * cellicon->num_marks; + pix_rect.height = TOGGLE_SPACING; + pix_rect.x = cell_area->x + cell->xpad + (cell_rect.width - pix_rect.width + 1) / 2 + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2; + pix_rect.y = cell_area->y + cell->ypad + (cell_rect.height - pix_rect.height) + (TOGGLE_SPACING - TOGGLE_WIDTH) / 2; + + for (i = 0; i < cellicon->num_marks; i++) + { + gtk_paint_check (widget->style, window, + state, (cellicon->marks & (1 << i)) ? GTK_SHADOW_IN : GTK_SHADOW_OUT, + cell_area, widget, "cellcheck", + pix_rect.x + i * TOGGLE_SPACING + (TOGGLE_WIDTH - TOGGLE_SPACING) / 2, + pix_rect.y, + TOGGLE_WIDTH, TOGGLE_WIDTH); + } + } + if (cellicon->focused && GTK_WIDGET_HAS_FOCUS(widget)) { gtk_paint_focus(widget->style, window, diff -r 6e521e987105 -r 8308d3606991 src/cellrenderericon.h --- a/src/cellrenderericon.h Sun Jun 22 10:01:26 2008 +0000 +++ b/src/cellrenderericon.h Sun Jun 22 20:01:20 2008 +0000 @@ -56,7 +56,13 @@ gboolean foreground_set; gboolean background_set; + gint num_marks; + gboolean show_text; + gboolean show_marks; + + guint marks; + }; struct _GQvCellRendererIconClass diff -r 6e521e987105 -r 8308d3606991 src/view_file.c --- a/src/view_file.c Sun Jun 22 10:01:26 2008 +0000 +++ b/src/view_file.c Sun Jun 22 20:01:20 2008 +0000 @@ -732,10 +732,14 @@ void vf_marks_set(ViewFile *vf, gint enable) { + if (vf->marks_enabled == enable) return; + + vf->marks_enabled = enable; + switch(vf->type) { case FILEVIEW_LIST: vflist_marks_set(vf, enable); break; - case FILEVIEW_ICON: /*vficon_marks_set(vf, enable);*/ break; + case FILEVIEW_ICON: vficon_marks_set(vf, enable); break; } } diff -r 6e521e987105 -r 8308d3606991 src/view_file_icon.c --- a/src/view_file_icon.c Sun Jun 22 10:01:26 2008 +0000 +++ b/src/view_file_icon.c Sun Jun 22 20:01:20 2008 +0000 @@ -617,6 +617,11 @@ vficon_selection_set(vf, id, id->selected & ~mask, iter); } +void vficon_marks_set(ViewFile *vf, gint enable) +{ + vficon_populate_at_new_size(vf, vf->listview->allocation.width, vf->listview->allocation.height, TRUE); +} + /* *------------------------------------------------------------------- * selections @@ -1572,7 +1577,10 @@ { g_object_set(G_OBJECT(cell), "fixed_width", thumb_width, "fixed_height", options->thumbnails.max_height, - "show_text", VFICON_INFO(vf, show_text), NULL); + "show_text", VFICON_INFO(vf, show_text), + "show_marks", vf->marks_enabled, + "num_marks", FILEDATA_MARKS_SIZE, + NULL); } } if (GTK_WIDGET_REALIZED(vf->listview)) gtk_tree_view_columns_autosize(GTK_TREE_VIEW(vf->listview)); @@ -2274,6 +2282,8 @@ g_object_set(cell, "pixbuf", id->fd->thumb_pixbuf, "text", name_sidecars, + "marks", id->fd->marks, + "show_marks", vf->marks_enabled, "cell-background-gdk", &color_bg, "cell-background-set", TRUE, "foreground-gdk", &color_fg, @@ -2289,6 +2299,7 @@ { g_object_set(cell, "pixbuf", NULL, "text", NULL, + "show_marks", FALSE, "cell-background-set", FALSE, "foreground-set", FALSE, "has-focus", FALSE, NULL); diff -r 6e521e987105 -r 8308d3606991 src/view_file_icon.h --- a/src/view_file_icon.h Sun Jun 22 10:01:26 2008 +0000 +++ b/src/view_file_icon.h Sun Jun 22 20:01:20 2008 +0000 @@ -27,6 +27,8 @@ void vficon_sort_set(ViewFile *vf, SortType type, gint ascend); +void vficon_marks_set(ViewFile *vf, gint enable); + GList *vficon_pop_menu_file_list(ViewFile *vf); void vficon_pop_menu_view_cb(GtkWidget *widget, gpointer data); void vficon_pop_menu_rename_cb(GtkWidget *widget, gpointer data); diff -r 6e521e987105 -r 8308d3606991 src/view_file_list.c --- a/src/view_file_list.c Sun Jun 22 10:01:26 2008 +0000 +++ b/src/view_file_list.c Sun Jun 22 20:01:20 2008 +0000 @@ -1977,10 +1977,6 @@ { GList *columns, *work; - if (vf->marks_enabled == enable) return; - - vf->marks_enabled = enable; - columns = gtk_tree_view_get_columns(GTK_TREE_VIEW(vf->listview)); work = columns;