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>
33 #endif /* __cplusplus */
35 #define GTK_TYPE_CTREE (gtk_ctree_get_type ())
36 #define GTK_CTREE(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_CTREE, GtkCTree))
37 #define GTK_CTREE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_CTREE, GtkCTreeClass))
38 #define GTK_IS_CTREE(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_CTREE))
39 #define GTK_IS_CTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CTREE))
41 #define GTK_CTREE_ROW(_node_) ((GtkCTreeRow *)(((GList *)(_node_))->data))
42 #define GTK_CTREE_NODE(_node_) ((GtkCTreeNode *)((_node_)))
43 #define GTK_CTREE_NODE_NEXT(_nnode_) ((GtkCTreeNode *)(((GList *)(_nnode_))->next))
44 #define GTK_CTREE_NODE_PREV(_pnode_) ((GtkCTreeNode *)(((GList *)(_pnode_))->prev))
45 #define GTK_CTREE_FUNC(_func_) ((GtkCTreeFunc)(_func_))
50 GTK_CTREE_POS_AS_CHILD,
56 GTK_CTREE_LINES_SOLID,
57 GTK_CTREE_LINES_DOTTED,
58 GTK_CTREE_LINES_TABBED,
64 GTK_CTREE_EXPANSION_EXPAND,
65 GTK_CTREE_EXPANSION_EXPAND_RECURSIVE,
66 GTK_CTREE_EXPANSION_COLLAPSE,
67 GTK_CTREE_EXPANSION_COLLAPSE_RECURSIVE,
68 GTK_CTREE_EXPANSION_TOGGLE,
69 GTK_CTREE_EXPANSION_TOGGLE_RECURSIVE
70 } GtkCTreeExpansionType;
72 typedef struct _GtkCTree GtkCTree;
73 typedef struct _GtkCTreeClass GtkCTreeClass;
74 typedef struct _GtkCTreeRow GtkCTreeRow;
75 typedef struct _GtkCTreeNode GtkCTreeNode;
77 typedef void (*GtkCTreeFunc) (GtkCTree *ctree,
81 typedef gboolean (*GtkCTreeGNodeFunc) (GtkCTree *ctree,
87 typedef gboolean (*GtkCTreeCompareDragFunc) (GtkCTree *ctree,
88 GtkCTreeNode *source_node,
89 GtkCTreeNode *new_parent,
90 GtkCTreeNode *new_sibling);
105 GtkCTreeNode *drag_source;
106 GtkCTreeNode *drag_target;
109 guint reorderable : 1;
113 guint line_style : 2;
116 GtkCTreeCompareDragFunc drag_compare;
119 struct _GtkCTreeClass
121 GtkCListClass parent_class;
123 void (*tree_select_row) (GtkCTree *ctree,
126 void (*tree_unselect_row) (GtkCTree *ctree,
129 void (*tree_expand) (GtkCTree *ctree,
131 void (*tree_collapse) (GtkCTree *ctree,
133 void (*tree_move) (GtkCTree *ctree,
135 GtkCTreeNode *new_parent,
136 GtkCTreeNode *new_sibling);
137 void (*change_focus_row_expansion) (GtkCTree *ctree,
138 GtkCTreeExpansionType action);
145 GtkCTreeNode *parent;
146 GtkCTreeNode *sibling;
147 GtkCTreeNode *children;
149 GdkPixmap *pixmap_closed;
150 GdkBitmap *mask_closed;
151 GdkPixmap *pixmap_opened;
152 GdkBitmap *mask_opened;
160 struct _GtkCTreeNode {
165 /***********************************************************
166 * Creation, insertion, deletion *
167 ***********************************************************/
169 GtkType gtk_ctree_get_type (void);
170 void gtk_ctree_construct (GtkCTree *ctree,
174 GtkWidget * gtk_ctree_new_with_titles (gint columns,
177 GtkWidget * gtk_ctree_new (gint columns,
179 GtkCTreeNode * gtk_ctree_insert_node (GtkCTree *ctree,
180 GtkCTreeNode *parent,
181 GtkCTreeNode *sibling,
184 GdkPixmap *pixmap_closed,
185 GdkBitmap *mask_closed,
186 GdkPixmap *pixmap_opened,
187 GdkBitmap *mask_opened,
190 void gtk_ctree_remove_node (GtkCTree *ctree,
192 GtkCTreeNode * gtk_ctree_insert_gnode (GtkCTree *ctree,
193 GtkCTreeNode *parent,
194 GtkCTreeNode *sibling,
196 GtkCTreeGNodeFunc func,
198 GNode * gtk_ctree_export_to_gnode (GtkCTree *ctree,
202 GtkCTreeGNodeFunc func,
205 /***********************************************************
206 * Generic recursive functions, querying / finding tree *
208 ***********************************************************/
210 void gtk_ctree_post_recursive (GtkCTree *ctree,
214 void gtk_ctree_post_recursive_to_depth (GtkCTree *ctree,
219 void gtk_ctree_pre_recursive (GtkCTree *ctree,
223 void gtk_ctree_pre_recursive_to_depth (GtkCTree *ctree,
228 gboolean gtk_ctree_is_viewable (GtkCTree *ctree,
230 GtkCTreeNode * gtk_ctree_last (GtkCTree *ctree,
232 GtkCTreeNode * gtk_ctree_find_node_ptr (GtkCTree *ctree,
233 GtkCTreeRow *ctree_row);
234 gboolean gtk_ctree_find (GtkCTree *ctree,
236 GtkCTreeNode *child);
237 gboolean gtk_ctree_is_ancestor (GtkCTree *ctree,
239 GtkCTreeNode *child);
240 GtkCTreeNode * gtk_ctree_find_by_row_data (GtkCTree *ctree,
243 GtkCTreeNode * gtk_ctree_find_by_row_data_custom (GtkCTree *ctree,
247 gboolean gtk_ctree_is_hot_spot (GtkCTree *ctree,
251 /***********************************************************
252 * Tree signals : move, expand, collapse, (un)select *
253 ***********************************************************/
255 void gtk_ctree_move (GtkCTree *ctree,
257 GtkCTreeNode *new_parent,
258 GtkCTreeNode *new_sibling);
259 void gtk_ctree_expand (GtkCTree *ctree,
261 void gtk_ctree_expand_recursive (GtkCTree *ctree,
263 void gtk_ctree_expand_to_depth (GtkCTree *ctree,
266 void gtk_ctree_collapse (GtkCTree *ctree,
268 void gtk_ctree_collapse_recursive (GtkCTree *ctree,
270 void gtk_ctree_collapse_to_depth (GtkCTree *ctree,
273 void gtk_ctree_toggle_expansion (GtkCTree *ctree,
275 void gtk_ctree_toggle_expansion_recursive (GtkCTree *ctree,
277 void gtk_ctree_select (GtkCTree *ctree,
279 void gtk_ctree_select_recursive (GtkCTree *ctree,
281 void gtk_ctree_unselect (GtkCTree *ctree,
283 void gtk_ctree_unselect_recursive (GtkCTree *ctree,
285 void gtk_ctree_real_select_recursive (GtkCTree *ctree,
289 /***********************************************************
290 * Analogons of GtkCList functions *
291 ***********************************************************/
293 void gtk_ctree_node_set_text (GtkCTree *ctree,
297 void gtk_ctree_node_set_pixmap (GtkCTree *ctree,
302 void gtk_ctree_node_set_pixtext (GtkCTree *ctree,
309 void gtk_ctree_set_node_info (GtkCTree *ctree,
313 GdkPixmap *pixmap_closed,
314 GdkBitmap *mask_closed,
315 GdkPixmap *pixmap_opened,
316 GdkBitmap *mask_opened,
319 void gtk_ctree_node_set_shift (GtkCTree *ctree,
324 GtkCellType gtk_ctree_node_get_cell_type (GtkCTree *ctree,
327 gint gtk_ctree_node_get_text (GtkCTree *ctree,
331 gint gtk_ctree_node_get_pixmap (GtkCTree *ctree,
336 gint gtk_ctree_node_get_pixtext (GtkCTree *ctree,
343 gint gtk_ctree_get_node_info (GtkCTree *ctree,
347 GdkPixmap **pixmap_closed,
348 GdkBitmap **mask_closed,
349 GdkPixmap **pixmap_opened,
350 GdkBitmap **mask_opened,
353 void gtk_ctree_node_set_foreground (GtkCTree *ctree,
356 void gtk_ctree_node_set_background (GtkCTree *ctree,
359 void gtk_ctree_node_set_row_data (GtkCTree *ctree,
362 void gtk_ctree_node_set_row_data_full (GtkCTree *ctree,
365 GtkDestroyNotify destroy);
366 gpointer gtk_ctree_node_get_row_data (GtkCTree *ctree,
368 void gtk_ctree_node_moveto (GtkCTree *ctree,
373 GtkVisibility gtk_ctree_node_is_visible (GtkCTree *ctree,
376 /***********************************************************
377 * GtkCTree specific functions *
378 ***********************************************************/
380 void gtk_ctree_set_indent (GtkCTree *ctree,
382 void gtk_ctree_show_stub (GtkCTree *ctree,
384 void gtk_ctree_set_reorderable (GtkCTree *ctree,
385 gboolean reorderable);
386 void gtk_ctree_set_use_drag_icons (GtkCTree *ctree,
388 void gtk_ctree_set_line_style (GtkCTree *ctree,
389 GtkCTreeLineStyle line_style);
390 void gtk_ctree_set_drag_compare_func (GtkCTree *ctree,
391 GtkCTreeCompareDragFunc cmp_func);
393 /***********************************************************
394 * Tree sorting functions *
395 ***********************************************************/
397 void gtk_ctree_sort_node (GtkCTree *ctree,
399 void gtk_ctree_sort_recursive (GtkCTree *ctree,
403 #endif /* __cplusplus */
405 #endif /* __GTK_CTREE_H__ */