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