1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball, Josh MacDonald
3 * Copyright (C) 1997-1998 Jay Painter <jpaint@serv.net><jpaint@gimp.org>
5 * GtkCTree widget for GTK+
6 * Copyright (C) 1998 Lars Hamann and Stefan Jeske
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
24 #ifndef __GTK_CTREE_H__
25 #define __GTK_CTREE_H__
27 #include <gtk/gtkclist.h>
32 #endif /* __cplusplus */
34 #define GTK_TYPE_CTREE (gtk_ctree_get_type ())
35 #define GTK_CTREE(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_CTREE, GtkCTree))
36 #define GTK_CTREE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CTREE, GtkCTreeClass))
37 #define GTK_IS_CTREE(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_CTREE))
38 #define GTK_IS_CTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CTREE))
40 #define GTK_CTREE_ROW(_glist_) ((GtkCTreeRow *)((_glist_)->data))
41 #define GTK_CTREE_TREE(_ctree_, _glist_) \
42 ((GtkCellTree *) &(((GtkCTreeRow *)((_glist_)->data))->cell[(_ctree_)->tree_col]))
44 #define GTK_CTREE_FUNC(_func_) ((GtkCTreeFunc)(_func_))
49 GTK_CTREE_POS_AS_CHILD,
55 GTK_CTREE_LINES_SOLID,
56 GTK_CTREE_LINES_DOTTED,
57 GTK_CTREE_LINES_TABBED,
63 GTK_CTREE_EXPANSION_EXPAND,
64 GTK_CTREE_EXPANSION_EXPAND_RECURSIVE,
65 GTK_CTREE_EXPANSION_COLLAPSE,
66 GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE,
67 GTK_CTREE_EXPANSION_TOGGLE,
68 GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE
69 } GtkCTreeExpansionType;
71 typedef struct _GtkCTree GtkCTree;
72 typedef struct _GtkCTreeClass GtkCTreeClass;
73 typedef struct _GtkCTreeRow GtkCTreeRow;
75 typedef void (*GtkCTreeFunc) (GtkCTree *ctree,
79 typedef gint (*GtkCTreeCompareFunc) (GtkCTree *ctree,
99 GtkCTreeCompareFunc node_compare;
102 guint reorderable : 1;
106 guint line_style : 2;
109 struct _GtkCTreeClass
111 GtkCListClass parent_class;
113 void (*tree_select_row) (GtkCTree *ctree,
116 void (*tree_unselect_row) (GtkCTree *ctree,
119 void (*tree_expand) (GtkCTree *ctree,
121 void (*tree_collapse) (GtkCTree *ctree,
123 void (*tree_move) (GtkCTree *ctree,
127 void (*change_focus_row_expansion) (GtkCTree *ctree,
128 GtkCTreeExpansionType action);
139 GdkPixmap *pixmap_closed;
140 GdkBitmap *mask_closed;
141 GdkPixmap *pixmap_opened;
142 GdkBitmap *mask_opened;
151 /***********************************************************
152 * Creation, insertion, deletion *
153 ***********************************************************/
155 GtkType gtk_ctree_get_type (void);
156 void gtk_ctree_construct (GtkCTree *ctree,
160 GtkWidget * gtk_ctree_new_with_titles (gint columns,
163 GtkWidget * gtk_ctree_new (gint columns,
165 GList * gtk_ctree_insert (GtkCTree *ctree,
170 GdkPixmap *pixmap_closed,
171 GdkBitmap *mask_closed,
172 GdkPixmap *pixmap_opened,
173 GdkBitmap *mask_opened,
176 void gtk_ctree_remove (GtkCTree *ctree,
179 /***********************************************************
180 * Generic recursive functions, querying / finding tree *
182 ***********************************************************/
184 void gtk_ctree_post_recursive (GtkCTree *ctree,
188 void gtk_ctree_post_recursive_to_depth (GtkCTree *ctree,
193 void gtk_ctree_pre_recursive (GtkCTree *ctree,
197 void gtk_ctree_pre_recursive_to_depth (GtkCTree *ctree,
202 gboolean gtk_ctree_is_visible (GtkCTree *ctree,
204 GList * gtk_ctree_last (GtkCTree *ctree,
206 GList * gtk_ctree_find_glist_ptr (GtkCTree *ctree,
207 GtkCTreeRow *ctree_row);
208 gint gtk_ctree_find (GtkCTree *ctree,
211 gboolean gtk_ctree_is_ancestor (GtkCTree *ctree,
214 GList * gtk_ctree_find_by_row_data (GtkCTree *ctree,
217 gboolean gtk_ctree_is_hot_spot (GtkCTree *ctree,
221 /***********************************************************
222 * Tree signals : move, expand, collapse, (un)select *
223 ***********************************************************/
225 void gtk_ctree_move (GtkCTree *ctree,
229 void gtk_ctree_expand (GtkCTree *ctree,
231 void gtk_ctree_expand_recursive (GtkCTree *ctree,
233 void gtk_ctree_expand_to_depth (GtkCTree *ctree,
236 void gtk_ctree_collapse (GtkCTree *ctree,
238 void gtk_ctree_collapse_recursive (GtkCTree *ctree,
240 void gtk_ctree_collapse_to_depth (GtkCTree *ctree,
243 void gtk_ctree_toggle_expansion (GtkCTree *ctree,
245 void gtk_ctree_toggle_expansion_recursive (GtkCTree *ctree,
247 void gtk_ctree_select (GtkCTree *ctree,
249 void gtk_ctree_select_recursive (GtkCTree *ctree,
251 void gtk_ctree_unselect (GtkCTree *ctree,
253 void gtk_ctree_unselect_recursive (GtkCTree *ctree,
255 void gtk_ctree_real_select_recursive (GtkCTree *ctree,
259 /***********************************************************
260 * Analogons of GtkCList functions *
261 ***********************************************************/
263 void gtk_ctree_set_text (GtkCTree *ctree,
267 void gtk_ctree_set_pixmap (GtkCTree *ctree,
272 void gtk_ctree_set_pixtext (GtkCTree *ctree,
279 void gtk_ctree_set_node_info (GtkCTree *ctree,
283 GdkPixmap *pixmap_closed,
284 GdkBitmap *mask_closed,
285 GdkPixmap *pixmap_opened,
286 GdkBitmap *mask_opened,
289 void gtk_ctree_set_shift (GtkCTree *ctree,
294 GtkCellType gtk_ctree_get_cell_type (GtkCTree *ctree,
297 gint gtk_ctree_get_text (GtkCTree *ctree,
301 gint gtk_ctree_get_pixmap (GtkCTree *ctree,
306 gint gtk_ctree_get_pixtext (GtkCTree *ctree,
313 gint gtk_ctree_get_node_info (GtkCTree *ctree,
317 GdkPixmap **pixmap_closed,
318 GdkBitmap **mask_closed,
319 GdkPixmap **pixmap_opened,
320 GdkBitmap **mask_opened,
323 void gtk_ctree_set_foreground (GtkCTree *ctree,
326 void gtk_ctree_set_background (GtkCTree *ctree,
329 void gtk_ctree_set_row_data (GtkCTree *ctree,
332 void gtk_ctree_set_row_data_full (GtkCTree *ctree,
335 GtkDestroyNotify destroy);
336 gpointer gtk_ctree_get_row_data (GtkCTree *ctree,
338 void gtk_ctree_moveto (GtkCTree *ctree,
344 /***********************************************************
345 * GtkCTree specific functions *
346 ***********************************************************/
348 void gtk_ctree_set_indent (GtkCTree *ctree,
350 void gtk_ctree_set_reorderable (GtkCTree *ctree,
351 gboolean reorderable);
352 void gtk_ctree_set_use_drag_icons (GtkCTree *ctree,
354 void gtk_ctree_set_line_style (GtkCTree *ctree,
355 GtkCTreeLineStyle line_style);
357 /***********************************************************
358 * Tree sorting functions *
359 ***********************************************************/
361 void gtk_ctree_set_auto_sort (GtkCTree *ctree,
363 void gtk_ctree_set_compare_func (GtkCTree *ctree,
364 GtkCTreeCompareFunc cmp_func);
365 void gtk_ctree_sort (GtkCTree *ctree,
367 void gtk_ctree_sort_recursive (GtkCTree *ctree,
372 #endif /* __cplusplus */
374 #endif /* __GTK_CTREE_H__ */