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);
103 GdkWindow *drag_icon;
111 GtkCTreeNode *drag_source;
112 GtkCTreeNode *drag_target;
115 guint reorderable : 1;
119 guint line_style : 2;
120 guint expander_style : 2;
123 GtkCTreeCompareDragFunc drag_compare;
126 struct _GtkCTreeClass
128 GtkCListClass parent_class;
130 void (*tree_select_row) (GtkCTree *ctree,
133 void (*tree_unselect_row) (GtkCTree *ctree,
136 void (*tree_expand) (GtkCTree *ctree,
138 void (*tree_collapse) (GtkCTree *ctree,
140 void (*tree_move) (GtkCTree *ctree,
142 GtkCTreeNode *new_parent,
143 GtkCTreeNode *new_sibling);
144 void (*change_focus_row_expansion) (GtkCTree *ctree,
145 GtkCTreeExpansionType action);
152 GtkCTreeNode *parent;
153 GtkCTreeNode *sibling;
154 GtkCTreeNode *children;
156 GdkPixmap *pixmap_closed;
157 GdkBitmap *mask_closed;
158 GdkPixmap *pixmap_opened;
159 GdkBitmap *mask_opened;
167 struct _GtkCTreeNode {
172 /***********************************************************
173 * Creation, insertion, deletion *
174 ***********************************************************/
176 GtkType gtk_ctree_get_type (void);
177 void gtk_ctree_construct (GtkCTree *ctree,
180 const gchar *titles[]);
181 GtkWidget * gtk_ctree_new_with_titles (gint columns,
183 const gchar *titles[]);
184 GtkWidget * gtk_ctree_new (gint columns,
186 GtkCTreeNode * gtk_ctree_insert_node (GtkCTree *ctree,
187 GtkCTreeNode *parent,
188 GtkCTreeNode *sibling,
191 GdkPixmap *pixmap_closed,
192 GdkBitmap *mask_closed,
193 GdkPixmap *pixmap_opened,
194 GdkBitmap *mask_opened,
197 void gtk_ctree_remove_node (GtkCTree *ctree,
199 GtkCTreeNode * gtk_ctree_insert_gnode (GtkCTree *ctree,
200 GtkCTreeNode *parent,
201 GtkCTreeNode *sibling,
203 GtkCTreeGNodeFunc func,
205 GNode * gtk_ctree_export_to_gnode (GtkCTree *ctree,
209 GtkCTreeGNodeFunc func,
212 /***********************************************************
213 * Generic recursive functions, querying / finding tree *
215 ***********************************************************/
217 void gtk_ctree_post_recursive (GtkCTree *ctree,
221 void gtk_ctree_post_recursive_to_depth (GtkCTree *ctree,
226 void gtk_ctree_pre_recursive (GtkCTree *ctree,
230 void gtk_ctree_pre_recursive_to_depth (GtkCTree *ctree,
235 gboolean gtk_ctree_is_viewable (GtkCTree *ctree,
237 GtkCTreeNode * gtk_ctree_last (GtkCTree *ctree,
239 GtkCTreeNode * gtk_ctree_find_node_ptr (GtkCTree *ctree,
240 GtkCTreeRow *ctree_row);
241 GtkCTreeNode * gtk_ctree_node_nth (GtkCTree *ctree,
243 gboolean gtk_ctree_find (GtkCTree *ctree,
245 GtkCTreeNode *child);
246 gboolean gtk_ctree_is_ancestor (GtkCTree *ctree,
248 GtkCTreeNode *child);
249 GtkCTreeNode * gtk_ctree_find_by_row_data (GtkCTree *ctree,
252 /* returns a GList of all GtkCTreeNodes with row->data == data. */
253 GList * gtk_ctree_find_all_by_row_data (GtkCTree *ctree,
256 GtkCTreeNode * gtk_ctree_find_by_row_data_custom (GtkCTree *ctree,
260 /* returns a GList of all GtkCTreeNodes with row->data == data. */
261 GList * gtk_ctree_find_all_by_row_data_custom (GtkCTree *ctree,
265 gboolean gtk_ctree_is_hot_spot (GtkCTree *ctree,
269 /***********************************************************
270 * Tree signals : move, expand, collapse, (un)select *
271 ***********************************************************/
273 void gtk_ctree_move (GtkCTree *ctree,
275 GtkCTreeNode *new_parent,
276 GtkCTreeNode *new_sibling);
277 void gtk_ctree_expand (GtkCTree *ctree,
279 void gtk_ctree_expand_recursive (GtkCTree *ctree,
281 void gtk_ctree_expand_to_depth (GtkCTree *ctree,
284 void gtk_ctree_collapse (GtkCTree *ctree,
286 void gtk_ctree_collapse_recursive (GtkCTree *ctree,
288 void gtk_ctree_collapse_to_depth (GtkCTree *ctree,
291 void gtk_ctree_toggle_expansion (GtkCTree *ctree,
293 void gtk_ctree_toggle_expansion_recursive (GtkCTree *ctree,
295 void gtk_ctree_select (GtkCTree *ctree,
297 void gtk_ctree_select_recursive (GtkCTree *ctree,
299 void gtk_ctree_unselect (GtkCTree *ctree,
301 void gtk_ctree_unselect_recursive (GtkCTree *ctree,
303 void gtk_ctree_real_select_recursive (GtkCTree *ctree,
307 /***********************************************************
308 * Analogons of GtkCList functions *
309 ***********************************************************/
311 void gtk_ctree_node_set_text (GtkCTree *ctree,
315 void gtk_ctree_node_set_pixmap (GtkCTree *ctree,
320 void gtk_ctree_node_set_pixtext (GtkCTree *ctree,
327 void gtk_ctree_set_node_info (GtkCTree *ctree,
331 GdkPixmap *pixmap_closed,
332 GdkBitmap *mask_closed,
333 GdkPixmap *pixmap_opened,
334 GdkBitmap *mask_opened,
337 void gtk_ctree_node_set_shift (GtkCTree *ctree,
342 void gtk_ctree_node_set_selectable (GtkCTree *ctree,
344 gboolean selectable);
345 gboolean gtk_ctree_node_get_selectable (GtkCTree *ctree,
347 GtkCellType gtk_ctree_node_get_cell_type (GtkCTree *ctree,
350 gint gtk_ctree_node_get_text (GtkCTree *ctree,
354 gint gtk_ctree_node_get_pixmap (GtkCTree *ctree,
359 gint gtk_ctree_node_get_pixtext (GtkCTree *ctree,
366 gint gtk_ctree_get_node_info (GtkCTree *ctree,
370 GdkPixmap **pixmap_closed,
371 GdkBitmap **mask_closed,
372 GdkPixmap **pixmap_opened,
373 GdkBitmap **mask_opened,
376 void gtk_ctree_node_set_row_style (GtkCTree *ctree,
379 GtkStyle * gtk_ctree_node_get_row_style (GtkCTree *ctree,
381 void gtk_ctree_node_set_cell_style (GtkCTree *ctree,
385 GtkStyle * gtk_ctree_node_get_cell_style (GtkCTree *ctree,
388 void gtk_ctree_node_set_foreground (GtkCTree *ctree,
391 void gtk_ctree_node_set_background (GtkCTree *ctree,
394 void gtk_ctree_node_set_row_data (GtkCTree *ctree,
397 void gtk_ctree_node_set_row_data_full (GtkCTree *ctree,
400 GtkDestroyNotify destroy);
401 gpointer gtk_ctree_node_get_row_data (GtkCTree *ctree,
403 void gtk_ctree_node_moveto (GtkCTree *ctree,
408 GtkVisibility gtk_ctree_node_is_visible (GtkCTree *ctree,
411 /***********************************************************
412 * GtkCTree specific functions *
413 ***********************************************************/
415 void gtk_ctree_set_indent (GtkCTree *ctree,
417 void gtk_ctree_set_spacing (GtkCTree *ctree,
419 void gtk_ctree_set_show_stub (GtkCTree *ctree,
421 void gtk_ctree_set_reorderable (GtkCTree *ctree,
422 gboolean reorderable);
423 void gtk_ctree_set_use_drag_icons (GtkCTree *ctree,
425 void gtk_ctree_set_line_style (GtkCTree *ctree,
426 GtkCTreeLineStyle line_style);
427 void gtk_ctree_set_expander_style (GtkCTree *ctree,
428 GtkCTreeExpanderStyle expander_style);
429 void gtk_ctree_set_drag_compare_func (GtkCTree *ctree,
430 GtkCTreeCompareDragFunc cmp_func);
432 /***********************************************************
433 * Tree sorting functions *
434 ***********************************************************/
436 void gtk_ctree_sort_node (GtkCTree *ctree,
438 void gtk_ctree_sort_recursive (GtkCTree *ctree,
443 void gtk_ctree_show_stub (GtkCTree *ctree,
450 #endif /* __cplusplus */
452 #endif /* __GTK_CTREE_H__ */