]> Pileus Git - ~andy/gtk/blob - gtk/gtktreeview.h
Seal GtkTreeView
[~andy/gtk] / gtk / gtktreeview.h
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, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 #if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
21 #error "Only <gtk/gtk.h> can be included directly."
22 #endif
23
24 #ifndef __GTK_TREE_VIEW_H__
25 #define __GTK_TREE_VIEW_H__
26
27 #include <gtk/gtkwidget.h>
28 #include <gtk/gtkcontainer.h>
29 #include <gtk/gtktreemodel.h>
30 #include <gtk/gtktreeviewcolumn.h>
31 #include <gtk/gtkdnd.h>
32 #include <gtk/gtkentry.h>
33
34
35 G_BEGIN_DECLS
36
37
38 typedef enum
39 {
40   /* drop before/after this row */
41   GTK_TREE_VIEW_DROP_BEFORE,
42   GTK_TREE_VIEW_DROP_AFTER,
43   /* drop as a child of this row (with fallback to before or after
44    * if into is not possible)
45    */
46   GTK_TREE_VIEW_DROP_INTO_OR_BEFORE,
47   GTK_TREE_VIEW_DROP_INTO_OR_AFTER
48 } GtkTreeViewDropPosition;
49
50 #define GTK_TYPE_TREE_VIEW              (gtk_tree_view_get_type ())
51 #define GTK_TREE_VIEW(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_TREE_VIEW, GtkTreeView))
52 #define GTK_TREE_VIEW_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
53 #define GTK_IS_TREE_VIEW(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_TREE_VIEW))
54 #define GTK_IS_TREE_VIEW_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TREE_VIEW))
55 #define GTK_TREE_VIEW_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TREE_VIEW, GtkTreeViewClass))
56
57 typedef struct _GtkTreeView           GtkTreeView;
58 typedef struct _GtkTreeViewClass      GtkTreeViewClass;
59 typedef struct _GtkTreeViewPrivate    GtkTreeViewPrivate;
60 typedef struct _GtkTreeSelection      GtkTreeSelection;
61 typedef struct _GtkTreeSelectionClass GtkTreeSelectionClass;
62
63 struct _GtkTreeView
64 {
65   GtkContainer parent;
66
67   GtkTreeViewPrivate *GSEAL (priv);
68 };
69
70 struct _GtkTreeViewClass
71 {
72   GtkContainerClass parent_class;
73
74   void     (* set_scroll_adjustments)     (GtkTreeView       *tree_view,
75                                            GtkAdjustment     *hadjustment,
76                                            GtkAdjustment     *vadjustment);
77   void     (* row_activated)              (GtkTreeView       *tree_view,
78                                            GtkTreePath       *path,
79                                            GtkTreeViewColumn *column);
80   gboolean (* test_expand_row)            (GtkTreeView       *tree_view,
81                                            GtkTreeIter       *iter,
82                                            GtkTreePath       *path);
83   gboolean (* test_collapse_row)          (GtkTreeView       *tree_view,
84                                            GtkTreeIter       *iter,
85                                            GtkTreePath       *path);
86   void     (* row_expanded)               (GtkTreeView       *tree_view,
87                                            GtkTreeIter       *iter,
88                                            GtkTreePath       *path);
89   void     (* row_collapsed)              (GtkTreeView       *tree_view,
90                                            GtkTreeIter       *iter,
91                                            GtkTreePath       *path);
92   void     (* columns_changed)            (GtkTreeView       *tree_view);
93   void     (* cursor_changed)             (GtkTreeView       *tree_view);
94
95   /* Key Binding signals */
96   gboolean (* move_cursor)                (GtkTreeView       *tree_view,
97                                            GtkMovementStep    step,
98                                            gint               count);
99   gboolean (* select_all)                 (GtkTreeView       *tree_view);
100   gboolean (* unselect_all)               (GtkTreeView       *tree_view);
101   gboolean (* select_cursor_row)          (GtkTreeView       *tree_view,
102                                            gboolean           start_editing);
103   gboolean (* toggle_cursor_row)          (GtkTreeView       *tree_view);
104   gboolean (* expand_collapse_cursor_row) (GtkTreeView       *tree_view,
105                                            gboolean           logical,
106                                            gboolean           expand,
107                                            gboolean           open_all);
108   gboolean (* select_cursor_parent)       (GtkTreeView       *tree_view);
109   gboolean (* start_interactive_search)   (GtkTreeView       *tree_view);
110
111   /* Padding for future expansion */
112   void (*_gtk_reserved0) (void);
113   void (*_gtk_reserved1) (void);
114   void (*_gtk_reserved2) (void);
115   void (*_gtk_reserved3) (void);
116   void (*_gtk_reserved4) (void);
117 };
118
119
120 typedef gboolean (* GtkTreeViewColumnDropFunc) (GtkTreeView             *tree_view,
121                                                 GtkTreeViewColumn       *column,
122                                                 GtkTreeViewColumn       *prev_column,
123                                                 GtkTreeViewColumn       *next_column,
124                                                 gpointer                 data);
125 typedef void     (* GtkTreeViewMappingFunc)    (GtkTreeView             *tree_view,
126                                                 GtkTreePath             *path,
127                                                 gpointer                 user_data);
128 typedef gboolean (*GtkTreeViewSearchEqualFunc) (GtkTreeModel            *model,
129                                                 gint                     column,
130                                                 const gchar             *key,
131                                                 GtkTreeIter             *iter,
132                                                 gpointer                 search_data);
133 typedef gboolean (*GtkTreeViewRowSeparatorFunc) (GtkTreeModel      *model,
134                                                  GtkTreeIter       *iter,
135                                                  gpointer           data);
136 typedef void     (*GtkTreeViewSearchPositionFunc) (GtkTreeView  *tree_view,
137                                                    GtkWidget    *search_dialog,
138                                                    gpointer      user_data);
139
140
141 /* Creators */
142 GType                  gtk_tree_view_get_type                      (void) G_GNUC_CONST;
143 GtkWidget             *gtk_tree_view_new                           (void);
144 GtkWidget             *gtk_tree_view_new_with_model                (GtkTreeModel              *model);
145
146 /* Accessors */
147 GtkTreeModel          *gtk_tree_view_get_model                     (GtkTreeView               *tree_view);
148 void                   gtk_tree_view_set_model                     (GtkTreeView               *tree_view,
149                                                                     GtkTreeModel              *model);
150 GtkTreeSelection      *gtk_tree_view_get_selection                 (GtkTreeView               *tree_view);
151 GtkAdjustment         *gtk_tree_view_get_hadjustment               (GtkTreeView               *tree_view);
152 void                   gtk_tree_view_set_hadjustment               (GtkTreeView               *tree_view,
153                                                                     GtkAdjustment             *adjustment);
154 GtkAdjustment         *gtk_tree_view_get_vadjustment               (GtkTreeView               *tree_view);
155 void                   gtk_tree_view_set_vadjustment               (GtkTreeView               *tree_view,
156                                                                     GtkAdjustment             *adjustment);
157 gboolean               gtk_tree_view_get_headers_visible           (GtkTreeView               *tree_view);
158 void                   gtk_tree_view_set_headers_visible           (GtkTreeView               *tree_view,
159                                                                     gboolean                   headers_visible);
160 void                   gtk_tree_view_columns_autosize              (GtkTreeView               *tree_view);
161 gboolean               gtk_tree_view_get_headers_clickable         (GtkTreeView *tree_view);
162 void                   gtk_tree_view_set_headers_clickable         (GtkTreeView               *tree_view,
163                                                                     gboolean                   setting);
164 void                   gtk_tree_view_set_rules_hint                (GtkTreeView               *tree_view,
165                                                                     gboolean                   setting);
166 gboolean               gtk_tree_view_get_rules_hint                (GtkTreeView               *tree_view);
167
168 /* Column funtions */
169 gint                   gtk_tree_view_append_column                 (GtkTreeView               *tree_view,
170                                                                     GtkTreeViewColumn         *column);
171 gint                   gtk_tree_view_remove_column                 (GtkTreeView               *tree_view,
172                                                                     GtkTreeViewColumn         *column);
173 gint                   gtk_tree_view_insert_column                 (GtkTreeView               *tree_view,
174                                                                     GtkTreeViewColumn         *column,
175                                                                     gint                       position);
176 gint                   gtk_tree_view_insert_column_with_attributes (GtkTreeView               *tree_view,
177                                                                     gint                       position,
178                                                                     const gchar               *title,
179                                                                     GtkCellRenderer           *cell,
180                                                                     ...) G_GNUC_NULL_TERMINATED;
181 gint                   gtk_tree_view_insert_column_with_data_func  (GtkTreeView               *tree_view,
182                                                                     gint                       position,
183                                                                     const gchar               *title,
184                                                                     GtkCellRenderer           *cell,
185                                                                     GtkTreeCellDataFunc        func,
186                                                                     gpointer                   data,
187                                                                     GDestroyNotify             dnotify);
188 GtkTreeViewColumn     *gtk_tree_view_get_column                    (GtkTreeView               *tree_view,
189                                                                     gint                       n);
190 GList                 *gtk_tree_view_get_columns                   (GtkTreeView               *tree_view);
191 void                   gtk_tree_view_move_column_after             (GtkTreeView               *tree_view,
192                                                                     GtkTreeViewColumn         *column,
193                                                                     GtkTreeViewColumn         *base_column);
194 void                   gtk_tree_view_set_expander_column           (GtkTreeView               *tree_view,
195                                                                     GtkTreeViewColumn         *column);
196 GtkTreeViewColumn     *gtk_tree_view_get_expander_column           (GtkTreeView               *tree_view);
197 void                   gtk_tree_view_set_column_drag_function      (GtkTreeView               *tree_view,
198                                                                     GtkTreeViewColumnDropFunc  func,
199                                                                     gpointer                   user_data,
200                                                                     GDestroyNotify             destroy);
201
202 /* Actions */
203 void                   gtk_tree_view_scroll_to_point               (GtkTreeView               *tree_view,
204                                                                     gint                       tree_x,
205                                                                     gint                       tree_y);
206 void                   gtk_tree_view_scroll_to_cell                (GtkTreeView               *tree_view,
207                                                                     GtkTreePath               *path,
208                                                                     GtkTreeViewColumn         *column,
209                                                                     gboolean                   use_align,
210                                                                     gfloat                     row_align,
211                                                                     gfloat                     col_align);
212 void                   gtk_tree_view_row_activated                 (GtkTreeView               *tree_view,
213                                                                     GtkTreePath               *path,
214                                                                     GtkTreeViewColumn         *column);
215 void                   gtk_tree_view_expand_all                    (GtkTreeView               *tree_view);
216 void                   gtk_tree_view_collapse_all                  (GtkTreeView               *tree_view);
217 void                   gtk_tree_view_expand_to_path                (GtkTreeView               *tree_view,
218                                                                     GtkTreePath               *path);
219 gboolean               gtk_tree_view_expand_row                    (GtkTreeView               *tree_view,
220                                                                     GtkTreePath               *path,
221                                                                     gboolean                   open_all);
222 gboolean               gtk_tree_view_collapse_row                  (GtkTreeView               *tree_view,
223                                                                     GtkTreePath               *path);
224 void                   gtk_tree_view_map_expanded_rows             (GtkTreeView               *tree_view,
225                                                                     GtkTreeViewMappingFunc     func,
226                                                                     gpointer                   data);
227 gboolean               gtk_tree_view_row_expanded                  (GtkTreeView               *tree_view,
228                                                                     GtkTreePath               *path);
229 void                   gtk_tree_view_set_reorderable               (GtkTreeView               *tree_view,
230                                                                     gboolean                   reorderable);
231 gboolean               gtk_tree_view_get_reorderable               (GtkTreeView               *tree_view);
232 void                   gtk_tree_view_set_cursor                    (GtkTreeView               *tree_view,
233                                                                     GtkTreePath               *path,
234                                                                     GtkTreeViewColumn         *focus_column,
235                                                                     gboolean                   start_editing);
236 void                   gtk_tree_view_set_cursor_on_cell            (GtkTreeView               *tree_view,
237                                                                     GtkTreePath               *path,
238                                                                     GtkTreeViewColumn         *focus_column,
239                                                                     GtkCellRenderer           *focus_cell,
240                                                                     gboolean                   start_editing);
241 void                   gtk_tree_view_get_cursor                    (GtkTreeView               *tree_view,
242                                                                     GtkTreePath              **path,
243                                                                     GtkTreeViewColumn        **focus_column);
244
245
246 /* Layout information */
247 GdkWindow             *gtk_tree_view_get_bin_window                (GtkTreeView               *tree_view);
248 gboolean               gtk_tree_view_get_path_at_pos               (GtkTreeView               *tree_view,
249                                                                     gint                       x,
250                                                                     gint                       y,
251                                                                     GtkTreePath              **path,
252                                                                     GtkTreeViewColumn        **column,
253                                                                     gint                      *cell_x,
254                                                                     gint                      *cell_y);
255 void                   gtk_tree_view_get_cell_area                 (GtkTreeView               *tree_view,
256                                                                     GtkTreePath               *path,
257                                                                     GtkTreeViewColumn         *column,
258                                                                     GdkRectangle              *rect);
259 void                   gtk_tree_view_get_background_area           (GtkTreeView               *tree_view,
260                                                                     GtkTreePath               *path,
261                                                                     GtkTreeViewColumn         *column,
262                                                                     GdkRectangle              *rect);
263 void                   gtk_tree_view_get_visible_rect              (GtkTreeView               *tree_view,
264                                                                     GdkRectangle              *visible_rect);
265
266 #ifndef GTK_DISABLE_DEPRECATED
267 void                   gtk_tree_view_widget_to_tree_coords         (GtkTreeView               *tree_view,
268                                                                     gint                       wx,
269                                                                     gint                       wy,
270                                                                     gint                      *tx,
271                                                                     gint                      *ty);
272 void                   gtk_tree_view_tree_to_widget_coords         (GtkTreeView               *tree_view,
273                                                                     gint                       tx,
274                                                                     gint                       ty,
275                                                                     gint                      *wx,
276                                                                     gint                      *wy);
277 #endif /* !GTK_DISABLE_DEPRECATED */
278 gboolean               gtk_tree_view_get_visible_range             (GtkTreeView               *tree_view,
279                                                                     GtkTreePath              **start_path,
280                                                                     GtkTreePath              **end_path);
281
282 /* Drag-and-Drop support */
283 void                   gtk_tree_view_enable_model_drag_source      (GtkTreeView               *tree_view,
284                                                                     GdkModifierType            start_button_mask,
285                                                                     const GtkTargetEntry      *targets,
286                                                                     gint                       n_targets,
287                                                                     GdkDragAction              actions);
288 void                   gtk_tree_view_enable_model_drag_dest        (GtkTreeView               *tree_view,
289                                                                     const GtkTargetEntry      *targets,
290                                                                     gint                       n_targets,
291                                                                     GdkDragAction              actions);
292 void                   gtk_tree_view_unset_rows_drag_source        (GtkTreeView               *tree_view);
293 void                   gtk_tree_view_unset_rows_drag_dest          (GtkTreeView               *tree_view);
294
295
296 /* These are useful to implement your own custom stuff. */
297 void                   gtk_tree_view_set_drag_dest_row             (GtkTreeView               *tree_view,
298                                                                     GtkTreePath               *path,
299                                                                     GtkTreeViewDropPosition    pos);
300 void                   gtk_tree_view_get_drag_dest_row             (GtkTreeView               *tree_view,
301                                                                     GtkTreePath              **path,
302                                                                     GtkTreeViewDropPosition   *pos);
303 gboolean               gtk_tree_view_get_dest_row_at_pos           (GtkTreeView               *tree_view,
304                                                                     gint                       drag_x,
305                                                                     gint                       drag_y,
306                                                                     GtkTreePath              **path,
307                                                                     GtkTreeViewDropPosition   *pos);
308 GdkPixmap             *gtk_tree_view_create_row_drag_icon          (GtkTreeView               *tree_view,
309                                                                     GtkTreePath               *path);
310
311 /* Interactive search */
312 void                       gtk_tree_view_set_enable_search     (GtkTreeView                *tree_view,
313                                                                 gboolean                    enable_search);
314 gboolean                   gtk_tree_view_get_enable_search     (GtkTreeView                *tree_view);
315 gint                       gtk_tree_view_get_search_column     (GtkTreeView                *tree_view);
316 void                       gtk_tree_view_set_search_column     (GtkTreeView                *tree_view,
317                                                                 gint                        column);
318 GtkTreeViewSearchEqualFunc gtk_tree_view_get_search_equal_func (GtkTreeView                *tree_view);
319 void                       gtk_tree_view_set_search_equal_func (GtkTreeView                *tree_view,
320                                                                 GtkTreeViewSearchEqualFunc  search_equal_func,
321                                                                 gpointer                    search_user_data,
322                                                                 GDestroyNotify              search_destroy);
323
324 GtkEntry                     *gtk_tree_view_get_search_entry         (GtkTreeView                   *tree_view);
325 void                          gtk_tree_view_set_search_entry         (GtkTreeView                   *tree_view,
326                                                                       GtkEntry                      *entry);
327 GtkTreeViewSearchPositionFunc gtk_tree_view_get_search_position_func (GtkTreeView                   *tree_view);
328 void                          gtk_tree_view_set_search_position_func (GtkTreeView                   *tree_view,
329                                                                       GtkTreeViewSearchPositionFunc  func,
330                                                                       gpointer                       data,
331                                                                       GDestroyNotify                 destroy);
332
333 /* Convert between the different coordinate systems */
334 void gtk_tree_view_convert_widget_to_tree_coords       (GtkTreeView *tree_view,
335                                                         gint         wx,
336                                                         gint         wy,
337                                                         gint        *tx,
338                                                         gint        *ty);
339 void gtk_tree_view_convert_tree_to_widget_coords       (GtkTreeView *tree_view,
340                                                         gint         tx,
341                                                         gint         ty,
342                                                         gint        *wx,
343                                                         gint        *wy);
344 void gtk_tree_view_convert_widget_to_bin_window_coords (GtkTreeView *tree_view,
345                                                         gint         wx,
346                                                         gint         wy,
347                                                         gint        *bx,
348                                                         gint        *by);
349 void gtk_tree_view_convert_bin_window_to_widget_coords (GtkTreeView *tree_view,
350                                                         gint         bx,
351                                                         gint         by,
352                                                         gint        *wx,
353                                                         gint        *wy);
354 void gtk_tree_view_convert_tree_to_bin_window_coords   (GtkTreeView *tree_view,
355                                                         gint         tx,
356                                                         gint         ty,
357                                                         gint        *bx,
358                                                         gint        *by);
359 void gtk_tree_view_convert_bin_window_to_tree_coords   (GtkTreeView *tree_view,
360                                                         gint         bx,
361                                                         gint         by,
362                                                         gint        *tx,
363                                                         gint        *ty);
364
365 /* This function should really never be used.  It is just for use by ATK.
366  */
367 typedef void (* GtkTreeDestroyCountFunc)  (GtkTreeView             *tree_view,
368                                            GtkTreePath             *path,
369                                            gint                     children,
370                                            gpointer                 user_data);
371 void gtk_tree_view_set_destroy_count_func (GtkTreeView             *tree_view,
372                                            GtkTreeDestroyCountFunc  func,
373                                            gpointer                 data,
374                                            GDestroyNotify           destroy);
375
376 void     gtk_tree_view_set_fixed_height_mode (GtkTreeView          *tree_view,
377                                               gboolean              enable);
378 gboolean gtk_tree_view_get_fixed_height_mode (GtkTreeView          *tree_view);
379 void     gtk_tree_view_set_hover_selection   (GtkTreeView          *tree_view,
380                                               gboolean              hover);
381 gboolean gtk_tree_view_get_hover_selection   (GtkTreeView          *tree_view);
382 void     gtk_tree_view_set_hover_expand      (GtkTreeView          *tree_view,
383                                               gboolean              expand);
384 gboolean gtk_tree_view_get_hover_expand      (GtkTreeView          *tree_view);
385 void     gtk_tree_view_set_rubber_banding    (GtkTreeView          *tree_view,
386                                               gboolean              enable);
387 gboolean gtk_tree_view_get_rubber_banding    (GtkTreeView          *tree_view);
388
389 gboolean gtk_tree_view_is_rubber_banding_active (GtkTreeView       *tree_view);
390
391 GtkTreeViewRowSeparatorFunc gtk_tree_view_get_row_separator_func (GtkTreeView               *tree_view);
392 void                        gtk_tree_view_set_row_separator_func (GtkTreeView                *tree_view,
393                                                                   GtkTreeViewRowSeparatorFunc func,
394                                                                   gpointer                    data,
395                                                                   GDestroyNotify              destroy);
396
397 GtkTreeViewGridLines        gtk_tree_view_get_grid_lines         (GtkTreeView                *tree_view);
398 void                        gtk_tree_view_set_grid_lines         (GtkTreeView                *tree_view,
399                                                                   GtkTreeViewGridLines        grid_lines);
400 gboolean                    gtk_tree_view_get_enable_tree_lines  (GtkTreeView                *tree_view);
401 void                        gtk_tree_view_set_enable_tree_lines  (GtkTreeView                *tree_view,
402                                                                   gboolean                    enabled);
403 void                        gtk_tree_view_set_show_expanders     (GtkTreeView                *tree_view,
404                                                                   gboolean                    enabled);
405 gboolean                    gtk_tree_view_get_show_expanders     (GtkTreeView                *tree_view);
406 void                        gtk_tree_view_set_level_indentation  (GtkTreeView                *tree_view,
407                                                                   gint                        indentation);
408 gint                        gtk_tree_view_get_level_indentation  (GtkTreeView                *tree_view);
409
410 /* Convenience functions for setting tooltips */
411 void          gtk_tree_view_set_tooltip_row    (GtkTreeView       *tree_view,
412                                                 GtkTooltip        *tooltip,
413                                                 GtkTreePath       *path);
414 void          gtk_tree_view_set_tooltip_cell   (GtkTreeView       *tree_view,
415                                                 GtkTooltip        *tooltip,
416                                                 GtkTreePath       *path,
417                                                 GtkTreeViewColumn *column,
418                                                 GtkCellRenderer   *cell);
419 gboolean      gtk_tree_view_get_tooltip_context(GtkTreeView       *tree_view,
420                                                 gint              *x,
421                                                 gint              *y,
422                                                 gboolean           keyboard_tip,
423                                                 GtkTreeModel     **model,
424                                                 GtkTreePath      **path,
425                                                 GtkTreeIter       *iter);
426 void          gtk_tree_view_set_tooltip_column (GtkTreeView       *tree_view,
427                                                 gint               column);
428 gint          gtk_tree_view_get_tooltip_column (GtkTreeView       *tree_view);
429
430 G_END_DECLS
431
432
433 #endif /* __GTK_TREE_VIEW_H__ */