1 /* gtktreeview.h
2  * Copyright (C) 2000  Red Hat, Inc.,  Jonathan Blandford <jrb@redhat.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef __GTK_TREE_VIEW_H__
19 #define __GTK_TREE_VIEW_H__
20 
21 #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
22 #error "Only <gtk/gtk.h> can be included directly."
23 #endif
24 
25 #include <gtk/gtkcontainer.h>
26 #include <gtk/gtktreemodel.h>
27 #include <gtk/gtktreeviewcolumn.h>
28 #include <gtk/gtkdnd.h>
29 #include <gtk/gtkentry.h>
30 
31 G_BEGIN_DECLS
32 
33 /**
34  * GtkTreeViewDropPosition:
35  * @GTK_TREE_VIEW_DROP_BEFORE: dropped row is inserted before
36  * @GTK_TREE_VIEW_DROP_AFTER: dropped row is inserted after
37  * @GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: dropped row becomes a child or is inserted before
38  * @GTK_TREE_VIEW_DROP_INTO_OR_AFTER: dropped row becomes a child or is inserted after
39  *
40  * An enum for determining where a dropped row goes.
41  */
42 typedef enum
43 {
44   /* drop before/after this row */
45   GTK_TREE_VIEW_DROP_BEFORE,
46   GTK_TREE_VIEW_DROP_AFTER,
47   /* drop as a child of this row (with fallback to before or after
48    * if into is not possible)
49    */
50   GTK_TREE_VIEW_DROP_INTO_OR_BEFORE,
51   GTK_TREE_VIEW_DROP_INTO_OR_AFTER
52 } GtkTreeViewDropPosition;
53 
54 #define GTK_TYPE_TREE_VIEW		(gtk_tree_view_get_type ())
55 #define GTK_TREE_VIEW(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW, GtkTreeView))
56 #define GTK_TREE_VIEW_CLASS(klass)	(G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
57 #define GTK_IS_TREE_VIEW(obj)		(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW))
58 #define GTK_IS_TREE_VIEW_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_VIEW))
59 #define GTK_TREE_VIEW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
60 
61 typedef struct _GtkTreeView           GtkTreeView;
62 typedef struct _GtkTreeViewClass      GtkTreeViewClass;
63 typedef struct _GtkTreeViewPrivate    GtkTreeViewPrivate;
64 typedef struct _GtkTreeSelection      GtkTreeSelection;
65 typedef struct _GtkTreeSelectionClass GtkTreeSelectionClass;
66 
67 struct _GtkTreeView
68 {
69   GtkContainer parent;
70 
71   /*< private >*/
72   GtkTreeViewPrivate *priv;
73 };
74 
75 struct _GtkTreeViewClass
76 {
77   GtkContainerClass parent_class;
78 
79   void     (* row_activated)              (GtkTreeView       *tree_view,
80 				           GtkTreePath       *path,
81 					   GtkTreeViewColumn *column);
82   gboolean (* test_expand_row)            (GtkTreeView       *tree_view,
83 				           GtkTreeIter       *iter,
84 				           GtkTreePath       *path);
85   gboolean (* test_collapse_row)          (GtkTreeView       *tree_view,
86 				           GtkTreeIter       *iter,
87 				           GtkTreePath       *path);
88   void     (* row_expanded)               (GtkTreeView       *tree_view,
89 				           GtkTreeIter       *iter,
90 				           GtkTreePath       *path);
91   void     (* row_collapsed)              (GtkTreeView       *tree_view,
92 				           GtkTreeIter       *iter,
93 				           GtkTreePath       *path);
94   void     (* columns_changed)            (GtkTreeView       *tree_view);
95   void     (* cursor_changed)             (GtkTreeView       *tree_view);
96 
97   /* Key Binding signals */
98   gboolean (* move_cursor)                (GtkTreeView       *tree_view,
99 				           GtkMovementStep    step,
100 				           gint               count);
101   gboolean (* select_all)                 (GtkTreeView       *tree_view);
102   gboolean (* unselect_all)               (GtkTreeView       *tree_view);
103   gboolean (* select_cursor_row)          (GtkTreeView       *tree_view,
104 					   gboolean           start_editing);
105   gboolean (* toggle_cursor_row)          (GtkTreeView       *tree_view);
106   gboolean (* expand_collapse_cursor_row) (GtkTreeView       *tree_view,
107 					   gboolean           logical,
108 					   gboolean           expand,
109 					   gboolean           open_all);
110   gboolean (* select_cursor_parent)       (GtkTreeView       *tree_view);
111   gboolean (* start_interactive_search)   (GtkTreeView       *tree_view);
112 
113   /* Padding for future expansion */
114   void (*_gtk_reserved1) (void);
115   void (*_gtk_reserved2) (void);
116   void (*_gtk_reserved3) (void);
117   void (*_gtk_reserved4) (void);
118   void (*_gtk_reserved5) (void);
119   void (*_gtk_reserved6) (void);
120   void (*_gtk_reserved7) (void);
121   void (*_gtk_reserved8) (void);
122 };
123 
124 /**
125  * GtkTreeViewColumnDropFunc:
126  * @tree_view: A #GtkTreeView
127  * @column: The #GtkTreeViewColumn being dragged
128  * @prev_column: A #GtkTreeViewColumn on one side of @column
129  * @next_column: A #GtkTreeViewColumn on the other side of @column
130  * @data: (closure): user data
131  *
132  * Function type for determining whether @column can be dropped in a
133  * particular spot (as determined by @prev_column and @next_column).  In
134  * left to right locales, @prev_column is on the left of the potential drop
135  * spot, and @next_column is on the right.  In right to left mode, this is
136  * reversed.  This function should return %TRUE if the spot is a valid drop
137  * spot.  Please note that returning %TRUE does not actually indicate that
138  * the column drop was made, but is meant only to indicate a possible drop
139  * spot to the user.
140  *
141  * Returns: %TRUE, if @column can be dropped in this spot
142  */
143 typedef gboolean (* GtkTreeViewColumnDropFunc) (GtkTreeView             *tree_view,
144 						GtkTreeViewColumn       *column,
145 						GtkTreeViewColumn       *prev_column,
146 						GtkTreeViewColumn       *next_column,
147 						gpointer                 data);
148 
149 /**
150  * GtkTreeViewMappingFunc:
151  * @tree_view: A #GtkTreeView
152  * @path: The path that’s expanded
153  * @user_data: user data
154  *
155  * Function used for gtk_tree_view_map_expanded_rows().
156  */
157 typedef void     (* GtkTreeViewMappingFunc)    (GtkTreeView             *tree_view,
158 						GtkTreePath             *path,
159 						gpointer                 user_data);
160 
161 /**
162  * GtkTreeViewSearchEqualFunc:
163  * @model: the #GtkTreeModel being searched
164  * @column: the search column set by gtk_tree_view_set_search_column()
165  * @key: the key string to compare with
166  * @iter: a #GtkTreeIter pointing the row of @model that should be compared
167  *  with @key.
168  * @search_data: (closure): user data from gtk_tree_view_set_search_equal_func()
169  *
170  * A function used for checking whether a row in @model matches
171  * a search key string entered by the user. Note the return value
172  * is reversed from what you would normally expect, though it
173  * has some similarity to strcmp() returning 0 for equal strings.
174  *
175  * Returns: %FALSE if the row matches, %TRUE otherwise.
176  */
177 typedef gboolean (*GtkTreeViewSearchEqualFunc) (GtkTreeModel            *model,
178 						gint                     column,
179 						const gchar             *key,
180 						GtkTreeIter             *iter,
181 						gpointer                 search_data);
182 
183 /**
184  * GtkTreeViewRowSeparatorFunc:
185  * @model: the #GtkTreeModel
186  * @iter: a #GtkTreeIter pointing at a row in @model
187  * @data: (closure): user data
188  *
189  * Function type for determining whether the row pointed to by @iter should
190  * be rendered as a separator. A common way to implement this is to have a
191  * boolean column in the model, whose values the #GtkTreeViewRowSeparatorFunc
192  * returns.
193  *
194  * Returns: %TRUE if the row is a separator
195  */
196 typedef gboolean (*GtkTreeViewRowSeparatorFunc) (GtkTreeModel      *model,
197 						 GtkTreeIter       *iter,
198 						 gpointer           data);
199 typedef void     (*GtkTreeViewSearchPositionFunc) (GtkTreeView  *tree_view,
200 						   GtkWidget    *search_dialog,
201 						   gpointer      user_data);
202 
203 
204 /* Creators */
205 GDK_AVAILABLE_IN_ALL
206 GType                  gtk_tree_view_get_type                      (void) G_GNUC_CONST;
207 GDK_AVAILABLE_IN_ALL
208 GtkWidget             *gtk_tree_view_new                           (void);
209 GDK_AVAILABLE_IN_ALL
210 GtkWidget             *gtk_tree_view_new_with_model                (GtkTreeModel              *model);
211 
212 /* Accessors */
213 GDK_AVAILABLE_IN_ALL
214 GtkTreeModel          *gtk_tree_view_get_model                     (GtkTreeView               *tree_view);
215 GDK_AVAILABLE_IN_ALL
216 void                   gtk_tree_view_set_model                     (GtkTreeView               *tree_view,
217 								    GtkTreeModel              *model);
218 GDK_AVAILABLE_IN_ALL
219 GtkTreeSelection      *gtk_tree_view_get_selection                 (GtkTreeView               *tree_view);
220 
221 GDK_DEPRECATED_IN_3_0_FOR(gtk_scrollable_get_hadjustment)
222 GtkAdjustment         *gtk_tree_view_get_hadjustment               (GtkTreeView               *tree_view);
223 GDK_DEPRECATED_IN_3_0_FOR(gtk_scrollable_set_hadjustment)
224 void                   gtk_tree_view_set_hadjustment               (GtkTreeView               *tree_view,
225 								    GtkAdjustment             *adjustment);
226 GDK_DEPRECATED_IN_3_0_FOR(gtk_scrollable_get_vadjustment)
227 GtkAdjustment         *gtk_tree_view_get_vadjustment               (GtkTreeView               *tree_view);
228 GDK_DEPRECATED_IN_3_0_FOR(gtk_scrollable_set_vadjustment)
229 void                   gtk_tree_view_set_vadjustment               (GtkTreeView               *tree_view,
230 								    GtkAdjustment             *adjustment);
231 
232 
233 GDK_AVAILABLE_IN_ALL
234 gboolean               gtk_tree_view_get_headers_visible           (GtkTreeView               *tree_view);
235 GDK_AVAILABLE_IN_ALL
236 void                   gtk_tree_view_set_headers_visible           (GtkTreeView               *tree_view,
237 								    gboolean                   headers_visible);
238 GDK_AVAILABLE_IN_ALL
239 void                   gtk_tree_view_columns_autosize              (GtkTreeView               *tree_view);
240 GDK_AVAILABLE_IN_ALL
241 gboolean               gtk_tree_view_get_headers_clickable         (GtkTreeView *tree_view);
242 GDK_AVAILABLE_IN_ALL
243 void                   gtk_tree_view_set_headers_clickable         (GtkTreeView               *tree_view,
244 								    gboolean                   setting);
245 GDK_DEPRECATED_IN_3_14
246 void                   gtk_tree_view_set_rules_hint                (GtkTreeView               *tree_view,
247 								    gboolean                   setting);
248 GDK_DEPRECATED_IN_3_14
249 gboolean               gtk_tree_view_get_rules_hint                (GtkTreeView               *tree_view);
250 GDK_AVAILABLE_IN_3_8
251 gboolean               gtk_tree_view_get_activate_on_single_click  (GtkTreeView               *tree_view);
252 GDK_AVAILABLE_IN_3_8
253 void                   gtk_tree_view_set_activate_on_single_click  (GtkTreeView               *tree_view,
254 								    gboolean                   single);
255 
256 /* Column funtions */
257 GDK_AVAILABLE_IN_ALL
258 gint                   gtk_tree_view_append_column                 (GtkTreeView               *tree_view,
259 								    GtkTreeViewColumn         *column);
260 GDK_AVAILABLE_IN_ALL
261 gint                   gtk_tree_view_remove_column                 (GtkTreeView               *tree_view,
262 								    GtkTreeViewColumn         *column);
263 GDK_AVAILABLE_IN_ALL
264 gint                   gtk_tree_view_insert_column                 (GtkTreeView               *tree_view,
265 								    GtkTreeViewColumn         *column,
266 								    gint                       position);
267 GDK_AVAILABLE_IN_ALL
268 gint                   gtk_tree_view_insert_column_with_attributes (GtkTreeView               *tree_view,
269 								    gint                       position,
270 								    const gchar               *title,
271 								    GtkCellRenderer           *cell,
272 								    ...) G_GNUC_NULL_TERMINATED;
273 GDK_AVAILABLE_IN_ALL
274 gint                   gtk_tree_view_insert_column_with_data_func  (GtkTreeView               *tree_view,
275 								    gint                       position,
276 								    const gchar               *title,
277 								    GtkCellRenderer           *cell,
278                                                                     GtkTreeCellDataFunc        func,
279                                                                     gpointer                   data,
280                                                                     GDestroyNotify             dnotify);
281 
282 GDK_AVAILABLE_IN_3_4
283 guint                  gtk_tree_view_get_n_columns                 (GtkTreeView               *tree_view);
284 GDK_AVAILABLE_IN_ALL
285 GtkTreeViewColumn     *gtk_tree_view_get_column                    (GtkTreeView               *tree_view,
286 								    gint                       n);
287 GDK_AVAILABLE_IN_ALL
288 GList                 *gtk_tree_view_get_columns                   (GtkTreeView               *tree_view);
289 GDK_AVAILABLE_IN_ALL
290 void                   gtk_tree_view_move_column_after             (GtkTreeView               *tree_view,
291 								    GtkTreeViewColumn         *column,
292 								    GtkTreeViewColumn         *base_column);
293 GDK_AVAILABLE_IN_ALL
294 void                   gtk_tree_view_set_expander_column           (GtkTreeView               *tree_view,
295 								    GtkTreeViewColumn         *column);
296 GDK_AVAILABLE_IN_ALL
297 GtkTreeViewColumn     *gtk_tree_view_get_expander_column           (GtkTreeView               *tree_view);
298 GDK_AVAILABLE_IN_ALL
299 void                   gtk_tree_view_set_column_drag_function      (GtkTreeView               *tree_view,
300 								    GtkTreeViewColumnDropFunc  func,
301 								    gpointer                   user_data,
302 								    GDestroyNotify             destroy);
303 
304 /* Actions */
305 GDK_AVAILABLE_IN_ALL
306 void                   gtk_tree_view_scroll_to_point               (GtkTreeView               *tree_view,
307 								    gint                       tree_x,
308 								    gint                       tree_y);
309 GDK_AVAILABLE_IN_ALL
310 void                   gtk_tree_view_scroll_to_cell                (GtkTreeView               *tree_view,
311 								    GtkTreePath               *path,
312 								    GtkTreeViewColumn         *column,
313 								    gboolean                   use_align,
314 								    gfloat                     row_align,
315 								    gfloat                     col_align);
316 GDK_AVAILABLE_IN_ALL
317 void                   gtk_tree_view_row_activated                 (GtkTreeView               *tree_view,
318 								    GtkTreePath               *path,
319 								    GtkTreeViewColumn         *column);
320 GDK_AVAILABLE_IN_ALL
321 void                   gtk_tree_view_expand_all                    (GtkTreeView               *tree_view);
322 GDK_AVAILABLE_IN_ALL
323 void                   gtk_tree_view_collapse_all                  (GtkTreeView               *tree_view);
324 GDK_AVAILABLE_IN_ALL
325 void                   gtk_tree_view_expand_to_path                (GtkTreeView               *tree_view,
326 								    GtkTreePath               *path);
327 GDK_AVAILABLE_IN_ALL
328 gboolean               gtk_tree_view_expand_row                    (GtkTreeView               *tree_view,
329 								    GtkTreePath               *path,
330 								    gboolean                   open_all);
331 GDK_AVAILABLE_IN_ALL
332 gboolean               gtk_tree_view_collapse_row                  (GtkTreeView               *tree_view,
333 								    GtkTreePath               *path);
334 GDK_AVAILABLE_IN_ALL
335 void                   gtk_tree_view_map_expanded_rows             (GtkTreeView               *tree_view,
336 								    GtkTreeViewMappingFunc     func,
337 								    gpointer                   data);
338 GDK_AVAILABLE_IN_ALL
339 gboolean               gtk_tree_view_row_expanded                  (GtkTreeView               *tree_view,
340 								    GtkTreePath               *path);
341 GDK_AVAILABLE_IN_ALL
342 void                   gtk_tree_view_set_reorderable               (GtkTreeView               *tree_view,
343 								    gboolean                   reorderable);
344 GDK_AVAILABLE_IN_ALL
345 gboolean               gtk_tree_view_get_reorderable               (GtkTreeView               *tree_view);
346 GDK_AVAILABLE_IN_ALL
347 void                   gtk_tree_view_set_cursor                    (GtkTreeView               *tree_view,
348 								    GtkTreePath               *path,
349 								    GtkTreeViewColumn         *focus_column,
350 								    gboolean                   start_editing);
351 GDK_AVAILABLE_IN_ALL
352 void                   gtk_tree_view_set_cursor_on_cell            (GtkTreeView               *tree_view,
353 								    GtkTreePath               *path,
354 								    GtkTreeViewColumn         *focus_column,
355 								    GtkCellRenderer           *focus_cell,
356 								    gboolean                   start_editing);
357 GDK_AVAILABLE_IN_ALL
358 void                   gtk_tree_view_get_cursor                    (GtkTreeView               *tree_view,
359 								    GtkTreePath              **path,
360 								    GtkTreeViewColumn        **focus_column);
361 
362 
363 /* Layout information */
364 GDK_AVAILABLE_IN_ALL
365 GdkWindow             *gtk_tree_view_get_bin_window                (GtkTreeView               *tree_view);
366 GDK_AVAILABLE_IN_ALL
367 gboolean               gtk_tree_view_get_path_at_pos               (GtkTreeView               *tree_view,
368 								    gint                       x,
369 								    gint                       y,
370 								    GtkTreePath              **path,
371 								    GtkTreeViewColumn        **column,
372 								    gint                      *cell_x,
373 								    gint                      *cell_y);
374 GDK_AVAILABLE_IN_ALL
375 void                   gtk_tree_view_get_cell_area                 (GtkTreeView               *tree_view,
376 								    GtkTreePath               *path,
377 								    GtkTreeViewColumn         *column,
378 								    GdkRectangle              *rect);
379 GDK_AVAILABLE_IN_ALL
380 void                   gtk_tree_view_get_background_area           (GtkTreeView               *tree_view,
381 								    GtkTreePath               *path,
382 								    GtkTreeViewColumn         *column,
383 								    GdkRectangle              *rect);
384 GDK_AVAILABLE_IN_ALL
385 void                   gtk_tree_view_get_visible_rect              (GtkTreeView               *tree_view,
386 								    GdkRectangle              *visible_rect);
387 GDK_AVAILABLE_IN_ALL
388 gboolean               gtk_tree_view_get_visible_range             (GtkTreeView               *tree_view,
389 								    GtkTreePath              **start_path,
390 								    GtkTreePath              **end_path);
391 GDK_AVAILABLE_IN_ALL
392 gboolean               gtk_tree_view_is_blank_at_pos               (GtkTreeView               *tree_view,
393                                                                     gint                       x,
394                                                                     gint                       y,
395                                                                     GtkTreePath              **path,
396                                                                     GtkTreeViewColumn        **column,
397                                                                     gint                      *cell_x,
398                                                                     gint                      *cell_y);
399 
400 /* Drag-and-Drop support */
401 GDK_AVAILABLE_IN_ALL
402 void                   gtk_tree_view_enable_model_drag_source      (GtkTreeView               *tree_view,
403 								    GdkModifierType            start_button_mask,
404 								    const GtkTargetEntry      *targets,
405 								    gint                       n_targets,
406 								    GdkDragAction              actions);
407 GDK_AVAILABLE_IN_ALL
408 void                   gtk_tree_view_enable_model_drag_dest        (GtkTreeView               *tree_view,
409 								    const GtkTargetEntry      *targets,
410 								    gint                       n_targets,
411 								    GdkDragAction              actions);
412 GDK_AVAILABLE_IN_ALL
413 void                   gtk_tree_view_unset_rows_drag_source        (GtkTreeView               *tree_view);
414 GDK_AVAILABLE_IN_ALL
415 void                   gtk_tree_view_unset_rows_drag_dest          (GtkTreeView               *tree_view);
416 
417 
418 /* These are useful to implement your own custom stuff. */
419 GDK_AVAILABLE_IN_ALL
420 void                   gtk_tree_view_set_drag_dest_row             (GtkTreeView               *tree_view,
421 								    GtkTreePath               *path,
422 								    GtkTreeViewDropPosition    pos);
423 GDK_AVAILABLE_IN_ALL
424 void                   gtk_tree_view_get_drag_dest_row             (GtkTreeView               *tree_view,
425 								    GtkTreePath              **path,
426 								    GtkTreeViewDropPosition   *pos);
427 GDK_AVAILABLE_IN_ALL
428 gboolean               gtk_tree_view_get_dest_row_at_pos           (GtkTreeView               *tree_view,
429 								    gint                       drag_x,
430 								    gint                       drag_y,
431 								    GtkTreePath              **path,
432 								    GtkTreeViewDropPosition   *pos);
433 GDK_AVAILABLE_IN_ALL
434 cairo_surface_t       *gtk_tree_view_create_row_drag_icon          (GtkTreeView               *tree_view,
435 								    GtkTreePath               *path);
436 
437 /* Interactive search */
438 GDK_AVAILABLE_IN_ALL
439 void                       gtk_tree_view_set_enable_search     (GtkTreeView                *tree_view,
440 								gboolean                    enable_search);
441 GDK_AVAILABLE_IN_ALL
442 gboolean                   gtk_tree_view_get_enable_search     (GtkTreeView                *tree_view);
443 GDK_AVAILABLE_IN_ALL
444 gint                       gtk_tree_view_get_search_column     (GtkTreeView                *tree_view);
445 GDK_AVAILABLE_IN_ALL
446 void                       gtk_tree_view_set_search_column     (GtkTreeView                *tree_view,
447 								gint                        column);
448 GDK_AVAILABLE_IN_ALL
449 GtkTreeViewSearchEqualFunc gtk_tree_view_get_search_equal_func (GtkTreeView                *tree_view);
450 GDK_AVAILABLE_IN_ALL
451 void                       gtk_tree_view_set_search_equal_func (GtkTreeView                *tree_view,
452 								GtkTreeViewSearchEqualFunc  search_equal_func,
453 								gpointer                    search_user_data,
454 								GDestroyNotify              search_destroy);
455 
456 GDK_AVAILABLE_IN_ALL
457 GtkEntry                     *gtk_tree_view_get_search_entry         (GtkTreeView                   *tree_view);
458 GDK_AVAILABLE_IN_ALL
459 void                          gtk_tree_view_set_search_entry         (GtkTreeView                   *tree_view,
460 								      GtkEntry                      *entry);
461 GDK_AVAILABLE_IN_ALL
462 GtkTreeViewSearchPositionFunc gtk_tree_view_get_search_position_func (GtkTreeView                   *tree_view);
463 GDK_AVAILABLE_IN_ALL
464 void                          gtk_tree_view_set_search_position_func (GtkTreeView                   *tree_view,
465 								      GtkTreeViewSearchPositionFunc  func,
466 								      gpointer                       data,
467 								      GDestroyNotify                 destroy);
468 
469 /* Convert between the different coordinate systems */
470 GDK_AVAILABLE_IN_ALL
471 void gtk_tree_view_convert_widget_to_tree_coords       (GtkTreeView *tree_view,
472 							gint         wx,
473 							gint         wy,
474 							gint        *tx,
475 							gint        *ty);
476 GDK_AVAILABLE_IN_ALL
477 void gtk_tree_view_convert_tree_to_widget_coords       (GtkTreeView *tree_view,
478 							gint         tx,
479 							gint         ty,
480 							gint        *wx,
481 							gint        *wy);
482 GDK_AVAILABLE_IN_ALL
483 void gtk_tree_view_convert_widget_to_bin_window_coords (GtkTreeView *tree_view,
484 							gint         wx,
485 							gint         wy,
486 							gint        *bx,
487 							gint        *by);
488 GDK_AVAILABLE_IN_ALL
489 void gtk_tree_view_convert_bin_window_to_widget_coords (GtkTreeView *tree_view,
490 							gint         bx,
491 							gint         by,
492 							gint        *wx,
493 							gint        *wy);
494 GDK_AVAILABLE_IN_ALL
495 void gtk_tree_view_convert_tree_to_bin_window_coords   (GtkTreeView *tree_view,
496 							gint         tx,
497 							gint         ty,
498 							gint        *bx,
499 							gint        *by);
500 GDK_AVAILABLE_IN_ALL
501 void gtk_tree_view_convert_bin_window_to_tree_coords   (GtkTreeView *tree_view,
502 							gint         bx,
503 							gint         by,
504 							gint        *tx,
505 							gint        *ty);
506 
507 /* This function should really never be used.  It is just for use by ATK.
508  */
509 typedef void (* GtkTreeDestroyCountFunc)  (GtkTreeView             *tree_view,
510 					   GtkTreePath             *path,
511 					   gint                     children,
512 					   gpointer                 user_data);
513 GDK_DEPRECATED_IN_3_4
514 void gtk_tree_view_set_destroy_count_func (GtkTreeView             *tree_view,
515 					   GtkTreeDestroyCountFunc  func,
516 					   gpointer                 data,
517 					   GDestroyNotify           destroy);
518 
519 GDK_AVAILABLE_IN_ALL
520 void     gtk_tree_view_set_fixed_height_mode (GtkTreeView          *tree_view,
521 					      gboolean              enable);
522 GDK_AVAILABLE_IN_ALL
523 gboolean gtk_tree_view_get_fixed_height_mode (GtkTreeView          *tree_view);
524 GDK_AVAILABLE_IN_ALL
525 void     gtk_tree_view_set_hover_selection   (GtkTreeView          *tree_view,
526 					      gboolean              hover);
527 GDK_AVAILABLE_IN_ALL
528 gboolean gtk_tree_view_get_hover_selection   (GtkTreeView          *tree_view);
529 GDK_AVAILABLE_IN_ALL
530 void     gtk_tree_view_set_hover_expand      (GtkTreeView          *tree_view,
531 					      gboolean              expand);
532 GDK_AVAILABLE_IN_ALL
533 gboolean gtk_tree_view_get_hover_expand      (GtkTreeView          *tree_view);
534 GDK_AVAILABLE_IN_ALL
535 void     gtk_tree_view_set_rubber_banding    (GtkTreeView          *tree_view,
536 					      gboolean              enable);
537 GDK_AVAILABLE_IN_ALL
538 gboolean gtk_tree_view_get_rubber_banding    (GtkTreeView          *tree_view);
539 
540 GDK_AVAILABLE_IN_ALL
541 gboolean gtk_tree_view_is_rubber_banding_active (GtkTreeView       *tree_view);
542 
543 GDK_AVAILABLE_IN_ALL
544 GtkTreeViewRowSeparatorFunc gtk_tree_view_get_row_separator_func (GtkTreeView               *tree_view);
545 GDK_AVAILABLE_IN_ALL
546 void                        gtk_tree_view_set_row_separator_func (GtkTreeView                *tree_view,
547 								  GtkTreeViewRowSeparatorFunc func,
548 								  gpointer                    data,
549 								  GDestroyNotify              destroy);
550 
551 GDK_AVAILABLE_IN_ALL
552 GtkTreeViewGridLines        gtk_tree_view_get_grid_lines         (GtkTreeView                *tree_view);
553 GDK_AVAILABLE_IN_ALL
554 void                        gtk_tree_view_set_grid_lines         (GtkTreeView                *tree_view,
555 								  GtkTreeViewGridLines        grid_lines);
556 GDK_AVAILABLE_IN_ALL
557 gboolean                    gtk_tree_view_get_enable_tree_lines  (GtkTreeView                *tree_view);
558 GDK_AVAILABLE_IN_ALL
559 void                        gtk_tree_view_set_enable_tree_lines  (GtkTreeView                *tree_view,
560 								  gboolean                    enabled);
561 GDK_AVAILABLE_IN_ALL
562 void                        gtk_tree_view_set_show_expanders     (GtkTreeView                *tree_view,
563 								  gboolean                    enabled);
564 GDK_AVAILABLE_IN_ALL
565 gboolean                    gtk_tree_view_get_show_expanders     (GtkTreeView                *tree_view);
566 GDK_AVAILABLE_IN_ALL
567 void                        gtk_tree_view_set_level_indentation  (GtkTreeView                *tree_view,
568 								  gint                        indentation);
569 GDK_AVAILABLE_IN_ALL
570 gint                        gtk_tree_view_get_level_indentation  (GtkTreeView                *tree_view);
571 
572 /* Convenience functions for setting tooltips */
573 GDK_AVAILABLE_IN_ALL
574 void          gtk_tree_view_set_tooltip_row    (GtkTreeView       *tree_view,
575 						GtkTooltip        *tooltip,
576 						GtkTreePath       *path);
577 GDK_AVAILABLE_IN_ALL
578 void          gtk_tree_view_set_tooltip_cell   (GtkTreeView       *tree_view,
579 						GtkTooltip        *tooltip,
580 						GtkTreePath       *path,
581 						GtkTreeViewColumn *column,
582 						GtkCellRenderer   *cell);
583 GDK_AVAILABLE_IN_ALL
584 gboolean      gtk_tree_view_get_tooltip_context(GtkTreeView       *tree_view,
585 						gint              *x,
586 						gint              *y,
587 						gboolean           keyboard_tip,
588 						GtkTreeModel     **model,
589 						GtkTreePath      **path,
590 						GtkTreeIter       *iter);
591 GDK_AVAILABLE_IN_ALL
592 void          gtk_tree_view_set_tooltip_column (GtkTreeView       *tree_view,
593 					        gint               column);
594 GDK_AVAILABLE_IN_ALL
595 gint          gtk_tree_view_get_tooltip_column (GtkTreeView       *tree_view);
596 
597 G_END_DECLS
598 
599 
600 #endif /* __GTK_TREE_VIEW_H__ */
601