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>
31 #endif /* __cplusplus */
33 #define GTK_TYPE_CTREE (gtk_ctree_get_type ())
34 #define GTK_CTREE(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_CTREE, GtkCTree))
35 #define GTK_CTREE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CTREE, GtkCTreeClass))
36 #define GTK_IS_CTREE(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_CTREE))
37 #define GTK_IS_CTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CTREE))
39 #define GTK_CTREE_ROW(_node_) ((GtkCTreeRow *)(((GList *)(_node_))->data))
40 #define GTK_CTREE_NODE(_node_) ((GtkCTreeNode *)((_node_)))
41 #define GTK_CTREE_NODE_NEXT(_nnode_) ((GtkCTreeNode *)(((GList *)(_nnode_))->next))
42 #define GTK_CTREE_NODE_PREV(_pnode_) ((GtkCTreeNode *)(((GList *)(_pnode_))->prev))
43 #define GTK_CTREE_FUNC(_func_) ((GtkCTreeFunc)(_func_))
48 GTK_CTREE_POS_AS_CHILD,
55 GTK_CTREE_LINES_SOLID,
56 GTK_CTREE_LINES_DOTTED,
57 GTK_CTREE_LINES_TABBED
62 GTK_CTREE_EXPANDER_NONE,
63 GTK_CTREE_EXPANDER_SQUARE,
64 GTK_CTREE_EXPANDER_TRIANGLE,
65 GTK_CTREE_EXPANDER_CIRCULAR
66 } GtkCTreeExpanderStyle;
70 GTK_CTREE_EXPANSION_EXPAND,
71 GTK_CTREE_EXPANSION_EXPAND_RECURSIVE,
72 GTK_CTREE_EXPANSION_COLLAPSE,
73 GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE,
74 GTK_CTREE_EXPANSION_TOGGLE,
75 GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE
76 } GtkCTreeExpansionType;
78 typedef struct _GtkCTree GtkCTree;
79 typedef struct _GtkCTreeClass GtkCTreeClass;
80 typedef struct _GtkCTreeRow GtkCTreeRow;
81 typedef struct _GtkCTreeNode GtkCTreeNode;
83 typedef void (*GtkCTreeFunc) (GtkCTree *ctree,
87 typedef gboolean (*GtkCTreeGNodeFunc) (GtkCTree *ctree,
93 typedef gboolean (*GtkCTreeCompareDragFunc) (GtkCTree *ctree,
94 GtkCTreeNode *source_node,
95 GtkCTreeNode *new_parent,
96 GtkCTreeNode *new_sibling);
108 guint line_style : 2;
109 guint expander_style : 2;
112 GtkCTreeCompareDragFunc drag_compare;
115 struct _GtkCTreeClass
117 GtkCListClass parent_class;
119 void (*tree_select_row) (GtkCTree *ctree,
122 void (*tree_unselect_row) (GtkCTree *ctree,
125 void (*tree_expand) (GtkCTree *ctree,
127 void (*tree_collapse) (GtkCTree *ctree,
129 void (*tree_move) (GtkCTree *ctree,
131 GtkCTreeNode *new_parent,
132 GtkCTreeNode *new_sibling);
133 void (*change_focus_row_expansion) (GtkCTree *ctree,
134 GtkCTreeExpansionType action);
141 GtkCTreeNode *parent;
142 GtkCTreeNode *sibling;
143 GtkCTreeNode *children;
145 GdkPixmap *pixmap_closed;
146 GdkBitmap *mask_closed;
147 GdkPixmap *pixmap_opened;
148 GdkBitmap *mask_opened;
156 struct _GtkCTreeNode {
161 /***********************************************************
162 * Creation, insertion, deletion *
163 ***********************************************************/
165 GtkType gtk_ctree_get_type (void);
166 void gtk_ctree_construct (GtkCTree *ctree,
170 GtkWidget * gtk_ctree_new_with_titles (gint columns,
173 GtkWidget * gtk_ctree_new (gint columns,
175 GtkCTreeNode * gtk_ctree_insert_node (GtkCTree *ctree,
176 GtkCTreeNode *parent,
177 GtkCTreeNode *sibling,
180 GdkPixmap *pixmap_closed,
181 GdkBitmap *mask_closed,
182 GdkPixmap *pixmap_opened,
183 GdkBitmap *mask_opened,
186 void gtk_ctree_remove_node (GtkCTree *ctree,
188 GtkCTreeNode * gtk_ctree_insert_gnode (GtkCTree *ctree,
189 GtkCTreeNode *parent,
190 GtkCTreeNode *sibling,
192 GtkCTreeGNodeFunc func,
194 GNode * gtk_ctree_export_to_gnode (GtkCTree *ctree,
198 GtkCTreeGNodeFunc func,
201 /***********************************************************
202 * Generic recursive functions, querying / finding tree *
204 ***********************************************************/
206 void gtk_ctree_post_recursive (GtkCTree *ctree,
210 void gtk_ctree_post_recursive_to_depth (GtkCTree *ctree,
215 void gtk_ctree_pre_recursive (GtkCTree *ctree,
219 void gtk_ctree_pre_recursive_to_depth (GtkCTree *ctree,
224 gboolean gtk_ctree_is_viewable (GtkCTree *ctree,
226 GtkCTreeNode * gtk_ctree_last (GtkCTree *ctree,
228 GtkCTreeNode * gtk_ctree_find_node_ptr (GtkCTree *ctree,
229 GtkCTreeRow *ctree_row);
230 GtkCTreeNode * gtk_ctree_node_nth (GtkCTree *ctree,
232 gboolean gtk_ctree_find (GtkCTree *ctree,
234 GtkCTreeNode *child);
235 gboolean gtk_ctree_is_ancestor (GtkCTree *ctree,
237 GtkCTreeNode *child);
238 GtkCTreeNode * gtk_ctree_find_by_row_data (GtkCTree *ctree,
241 /* returns a GList of all GtkCTreeNodes with row->data == data. */
242 GList * gtk_ctree_find_all_by_row_data (GtkCTree *ctree,
245 GtkCTreeNode * gtk_ctree_find_by_row_data_custom (GtkCTree *ctree,
249 /* returns a GList of all GtkCTreeNodes with row->data == data. */
250 GList * gtk_ctree_find_all_by_row_data_custom (GtkCTree *ctree,
254 gboolean gtk_ctree_is_hot_spot (GtkCTree *ctree,
258 /***********************************************************
259 * Tree signals : move, expand, collapse, (un)select *
260 ***********************************************************/
262 void gtk_ctree_move (GtkCTree *ctree,
264 GtkCTreeNode *new_parent,
265 GtkCTreeNode *new_sibling);
266 void gtk_ctree_expand (GtkCTree *ctree,
268 void gtk_ctree_expand_recursive (GtkCTree *ctree,
270 void gtk_ctree_expand_to_depth (GtkCTree *ctree,
273 void gtk_ctree_collapse (GtkCTree *ctree,
275 void gtk_ctree_collapse_recursive (GtkCTree *ctree,
277 void gtk_ctree_collapse_to_depth (GtkCTree *ctree,
280 void gtk_ctree_toggle_expansion (GtkCTree *ctree,
282 void gtk_ctree_toggle_expansion_recursive (GtkCTree *ctree,
284 void gtk_ctree_select (GtkCTree *ctree,
286 void gtk_ctree_select_recursive (GtkCTree *ctree,
288 void gtk_ctree_unselect (GtkCTree *ctree,
290 void gtk_ctree_unselect_recursive (GtkCTree *ctree,
292 void gtk_ctree_real_select_recursive (GtkCTree *ctree,
296 /***********************************************************
297 * Analogons of GtkCList functions *
298 ***********************************************************/
300 void gtk_ctree_node_set_text (GtkCTree *ctree,
304 void gtk_ctree_node_set_pixmap (GtkCTree *ctree,
309 void gtk_ctree_node_set_pixtext (GtkCTree *ctree,
316 void gtk_ctree_set_node_info (GtkCTree *ctree,
320 GdkPixmap *pixmap_closed,
321 GdkBitmap *mask_closed,
322 GdkPixmap *pixmap_opened,
323 GdkBitmap *mask_opened,
326 void gtk_ctree_node_set_shift (GtkCTree *ctree,
331 void gtk_ctree_node_set_selectable (GtkCTree *ctree,
333 gboolean selectable);
334 gboolean gtk_ctree_node_get_selectable (GtkCTree *ctree,
336 GtkCellType gtk_ctree_node_get_cell_type (GtkCTree *ctree,
339 gint gtk_ctree_node_get_text (GtkCTree *ctree,
343 gint gtk_ctree_node_get_pixmap (GtkCTree *ctree,
348 gint gtk_ctree_node_get_pixtext (GtkCTree *ctree,
355 gint gtk_ctree_get_node_info (GtkCTree *ctree,
359 GdkPixmap **pixmap_closed,
360 GdkBitmap **mask_closed,
361 GdkPixmap **pixmap_opened,
362 GdkBitmap **mask_opened,
365 void gtk_ctree_node_set_row_style (GtkCTree *ctree,
368 GtkStyle * gtk_ctree_node_get_row_style (GtkCTree *ctree,
370 void gtk_ctree_node_set_cell_style (GtkCTree *ctree,
374 GtkStyle * gtk_ctree_node_get_cell_style (GtkCTree *ctree,
377 void gtk_ctree_node_set_foreground (GtkCTree *ctree,
380 void gtk_ctree_node_set_background (GtkCTree *ctree,
383 void gtk_ctree_node_set_row_data (GtkCTree *ctree,
386 void gtk_ctree_node_set_row_data_full (GtkCTree *ctree,
389 GtkDestroyNotify destroy);
390 gpointer gtk_ctree_node_get_row_data (GtkCTree *ctree,
392 void gtk_ctree_node_moveto (GtkCTree *ctree,
397 GtkVisibility gtk_ctree_node_is_visible (GtkCTree *ctree,
400 /***********************************************************
401 * GtkCTree specific functions *
402 ***********************************************************/
404 void gtk_ctree_set_indent (GtkCTree *ctree,
406 void gtk_ctree_set_spacing (GtkCTree *ctree,
408 void gtk_ctree_set_show_stub (GtkCTree *ctree,
410 void gtk_ctree_set_line_style (GtkCTree *ctree,
411 GtkCTreeLineStyle line_style);
412 void gtk_ctree_set_expander_style (GtkCTree *ctree,
413 GtkCTreeExpanderStyle expander_style);
414 void gtk_ctree_set_drag_compare_func (GtkCTree *ctree,
415 GtkCTreeCompareDragFunc cmp_func);
417 /***********************************************************
418 * Tree sorting functions *
419 ***********************************************************/
421 void gtk_ctree_sort_node (GtkCTree *ctree,
423 void gtk_ctree_sort_recursive (GtkCTree *ctree,
428 void gtk_ctree_show_stub (GtkCTree *ctree,
430 void gtk_ctree_set_reorderable (GtkCTree *ctree,
431 gboolean reorderable);
432 void gtk_ctree_set_use_drag_icons (GtkCTree *ctree,
438 #endif /* __cplusplus */
440 #endif /* __GTK_CTREE_H__ */