4 * The collection widget provides an area for displaying a collection of
5 * objects (such as files). It allows the user to choose a selection of
6 * them and provides signals to allow popping up menus, detecting double-clicks
9 * Thomas Leonard, <tal197@ecs.soton.ac.uk>
13 #ifndef __COLLECTION_H__
14 #define __COLLECTION_H__
17 #include <gtk/gtkwidget.h>
21 #endif /* __cplusplus */
23 #define COLLECTION(obj) GTK_CHECK_CAST((obj), collection_get_type(), Collection)
24 #define COLLECTION_CLASS(klass) GTK_CHECK_CLASS_CAST((klass), \
25 collection_get_type(), CollectionClass)
26 #define IS_COLLECTION(obj) GTK_CHECK_TYPE((obj), collection_get_type())
28 /* If the display gets mucked up then remember to fix it next time we get the
33 PAINT_NORMAL
, /* Just redraw what we need to */
34 PAINT_OVERWRITE
, /* Draw everything */
35 PAINT_CLEAR
, /* Blank everything, then redraw */
39 typedef struct _Collection Collection
;
40 typedef struct _CollectionClass CollectionClass
;
41 typedef struct _CollectionItem CollectionItem
;
42 typedef void (*CollectionDrawFunc
)(GtkWidget
*widget
,
45 typedef gboolean (*CollectionTestFunc
)( Collection
*collection
,
46 int point_x
, int point_y
,
48 int width
, int height
);
49 typedef void (*CollectionTargetFunc
)(Collection
*collection
,
53 struct _CollectionItem
61 GtkWidget parent_widget
;
65 guint last_scroll
; /* Current/previous scroll value */
67 CollectionDrawFunc draw_item
;
68 CollectionTestFunc test_point
;
69 int paint_level
; /* Complete redraw on next paint? */
70 GdkGC
*bg_gc
; /* NULL unless pixmap background */
72 gboolean lasso_box
; /* Is the box drawn? */
73 int drag_box_x
[2]; /* Index 0 is the fixed corner */
76 int buttons_pressed
; /* Number of buttons down */
77 gboolean may_drag
; /* Tried to drag since first press? */
79 CollectionItem
*items
;
80 gint cursor_item
; /* -1 if not shown */
81 gint cursor_item_old
; /* May be -1 */
82 gint wink_item
; /* -1 if not active */
85 gint number_of_items
; /* (often compared with -1) */
86 guint item_width
, item_height
;
88 guint number_selected
;
89 int item_clicked
; /* For collection_single_click */
93 CollectionTargetFunc target_cb
;
97 struct _CollectionClass
99 GtkWidgetClass parent_class
;
101 void (*open_item
)(Collection
*collection
,
102 CollectionItem
*item
,
104 void (*drag_selection
)(Collection
*collection
,
105 GdkEventMotion
*motion_event
,
106 guint items_selected
);
107 void (*show_menu
)(Collection
*collection
,
108 GdkEventButton
*button_event
,
109 guint items_selected
);
110 void (*gain_selection
)(Collection
*collection
,
112 void (*lose_selection
)(Collection
*collection
,
116 guint
collection_get_type (void);
117 GtkWidget
*collection_new (GtkAdjustment
*vadj
);
118 void collection_clear (Collection
*collection
);
119 gint
collection_insert (Collection
*collection
, gpointer data
);
120 void collection_remove (Collection
*collection
, gint item
);
121 void collection_unselect_item (Collection
*collection
, gint item
);
122 void collection_select_item (Collection
*collection
, gint item
);
123 void collection_toggle_item (Collection
*collection
, gint item
);
124 void collection_select_all (Collection
*collection
);
125 void collection_clear_selection (Collection
*collection
);
126 void collection_draw_item (Collection
*collection
, gint item
,
128 void collection_set_functions (Collection
*collection
,
129 CollectionDrawFunc draw_item
,
130 CollectionTestFunc test_point
);
131 void collection_set_item_size (Collection
*collection
,
132 int width
, int height
);
133 void collection_qsort (Collection
*collection
,
134 int (*compar
)(const void *,
136 int collection_find_item (Collection
*collection
,
138 int (*compar
)(const void *,
140 void collection_set_panel (Collection
*collection
,
142 int collection_get_item (Collection
*collection
, int x
, int y
);
143 void collection_set_cursor_item (Collection
*collection
, gint item
);
144 void collection_wink_item (Collection
*collection
, gint item
);
145 void collection_delete_if (Collection
*collection
,
146 gboolean (*test
)(gpointer item
,
149 void collection_target (Collection
*collection
,
150 CollectionTargetFunc callback
,
152 void collection_move_cursor (Collection
*collection
,
157 #endif /* __cplusplus */
159 #endif /* __COLLECTION_H__ */