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