r291: Improved theme support (pixmap backgrounds work now).
[rox-filer/ma.git] / ROX-Filer / src / collection.h
blob89f9409c1f03a6c2c680b7c52be77a02357254e1
1 /*
2 * $Id$
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
7 * etc.
9 * Thomas Leonard, <tal197@ecs.soton.ac.uk>
13 #ifndef __COLLECTION_H__
14 #define __COLLECTION_H__
16 #include <gdk/gdk.h>
17 #include <gtk/gtkwidget.h>
19 #ifdef __cplusplus
20 extern "C" {
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
29 * chance.
31 enum
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,
43 CollectionItem *item,
44 GdkRectangle *area);
45 typedef gboolean (*CollectionTestFunc)( Collection *collection,
46 int point_x, int point_y,
47 CollectionItem *item,
48 int width, int height);
49 typedef void (*CollectionTargetFunc)(Collection *collection,
50 gint item,
51 gpointer user_data);
53 struct _CollectionItem
55 gpointer data;
56 gboolean selected;
59 struct _Collection
61 GtkWidget parent_widget;
62 gboolean panel;
64 GtkAdjustment *vadj;
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 */
74 int drag_box_y[2];
75 GdkGC *xor_gc;
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 */
83 gint wink_timeout;
84 guint columns;
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 */
91 guint array_size;
93 CollectionTargetFunc target_cb;
94 gpointer target_data;
97 struct _CollectionClass
99 GtkWidgetClass parent_class;
101 void (*open_item)(Collection *collection,
102 CollectionItem *item,
103 guint item_number);
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,
111 guint time);
112 void (*lose_selection)(Collection *collection,
113 guint time);
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,
127 gboolean blank);
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 *,
135 const void *));
136 int collection_find_item (Collection *collection,
137 gpointer data,
138 int (*compar)(const void *,
139 const void *));
140 void collection_set_panel (Collection *collection,
141 gboolean panel);
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,
147 gpointer data),
148 gpointer data);
149 void collection_target (Collection *collection,
150 CollectionTargetFunc callback,
151 gpointer user_data);
152 void collection_move_cursor (Collection *collection,
153 int drow, int dcol);
155 #ifdef __cplusplus
157 #endif /* __cplusplus */
159 #endif /* __COLLECTION_H__ */