]> Pileus Git - ~andy/gtk/blob - gtk/gtkctree.h
Set name "gtk-tooltips" on tip window so that a style can be set for
[~andy/gtk] / gtk / gtkctree.h
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>
4  *
5  * GtkCTree widget for GTK+
6  * Copyright (C) 1998 Lars Hamann and Stefan Jeske
7  *
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.
12  *
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.
17  *
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.
22  */
23
24 #ifndef __GTK_CTREE_H__
25 #define __GTK_CTREE_H__
26
27 #include <gtk/gtkclist.h>
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif                          /* __cplusplus */
32
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))
38
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_))
44
45 typedef enum
46 {
47   GTK_CTREE_POS_BEFORE,
48   GTK_CTREE_POS_AS_CHILD,
49   GTK_CTREE_POS_AFTER
50 } GtkCTreePos;
51
52 typedef enum
53 {
54   GTK_CTREE_LINES_NONE,
55   GTK_CTREE_LINES_SOLID,
56   GTK_CTREE_LINES_DOTTED,
57   GTK_CTREE_LINES_TABBED
58 } GtkCTreeLineStyle;
59
60 typedef enum
61 {
62   GTK_CTREE_EXPANDER_NONE,
63   GTK_CTREE_EXPANDER_SQUARE,
64   GTK_CTREE_EXPANDER_TRIANGLE,
65   GTK_CTREE_EXPANDER_CIRCULAR
66 } GtkCTreeExpanderStyle;
67
68 typedef enum
69 {
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;
77
78 typedef struct _GtkCTree      GtkCTree;
79 typedef struct _GtkCTreeClass GtkCTreeClass;
80 typedef struct _GtkCTreeRow   GtkCTreeRow;
81 typedef struct _GtkCTreeNode  GtkCTreeNode;
82
83 typedef void (*GtkCTreeFunc) (GtkCTree     *ctree,
84                               GtkCTreeNode *node,
85                               gpointer      data);
86
87 typedef gboolean (*GtkCTreeGNodeFunc) (GtkCTree     *ctree,
88                                        guint         depth,
89                                        GNode        *gnode,
90                                        GtkCTreeNode *cnode,
91                                        gpointer      data);
92
93 typedef gboolean (*GtkCTreeCompareDragFunc) (GtkCTree     *ctree,
94                                              GtkCTreeNode *source_node,
95                                              GtkCTreeNode *new_parent,
96                                              GtkCTreeNode *new_sibling);
97
98 struct _GtkCTree
99 {
100   GtkCList clist;
101   
102   GdkGC *lines_gc;
103   
104   gint tree_indent;
105   gint tree_spacing;
106   gint tree_column;
107
108   guint line_style     : 2;
109   guint expander_style : 2;
110   guint show_stub      : 1;
111
112   GtkCTreeCompareDragFunc drag_compare;
113 };
114
115 struct _GtkCTreeClass
116 {
117   GtkCListClass parent_class;
118   
119   void (*tree_select_row)   (GtkCTree     *ctree,
120                              GtkCTreeNode *row,
121                              gint          column);
122   void (*tree_unselect_row) (GtkCTree     *ctree,
123                              GtkCTreeNode *row,
124                              gint          column);
125   void (*tree_expand)       (GtkCTree     *ctree,
126                              GtkCTreeNode *node);
127   void (*tree_collapse)     (GtkCTree     *ctree,
128                              GtkCTreeNode *node);
129   void (*tree_move)         (GtkCTree     *ctree,
130                              GtkCTreeNode *node,
131                              GtkCTreeNode *new_parent,
132                              GtkCTreeNode *new_sibling);
133   void (*change_focus_row_expansion) (GtkCTree *ctree,
134                                       GtkCTreeExpansionType action);
135 };
136
137 struct _GtkCTreeRow
138 {
139   GtkCListRow row;
140   
141   GtkCTreeNode *parent;
142   GtkCTreeNode *sibling;
143   GtkCTreeNode *children;
144   
145   GdkPixmap *pixmap_closed;
146   GdkBitmap *mask_closed;
147   GdkPixmap *pixmap_opened;
148   GdkBitmap *mask_opened;
149   
150   guint16 level;
151   
152   guint is_leaf  : 1;
153   guint expanded : 1;
154 };
155
156 struct _GtkCTreeNode {
157   GList list;
158 };
159
160
161 /***********************************************************
162  *           Creation, insertion, deletion                 *
163  ***********************************************************/
164
165 GtkType gtk_ctree_get_type                       (void);
166 void gtk_ctree_construct                         (GtkCTree     *ctree,
167                                                   gint          columns, 
168                                                   gint          tree_column,
169                                                   gchar        *titles[]);
170 GtkWidget * gtk_ctree_new_with_titles            (gint          columns, 
171                                                   gint          tree_column,
172                                                   gchar        *titles[]);
173 GtkWidget * gtk_ctree_new                        (gint          columns, 
174                                                   gint          tree_column);
175 GtkCTreeNode * gtk_ctree_insert_node             (GtkCTree     *ctree,
176                                                   GtkCTreeNode *parent, 
177                                                   GtkCTreeNode *sibling,
178                                                   gchar        *text[],
179                                                   guint8        spacing,
180                                                   GdkPixmap    *pixmap_closed,
181                                                   GdkBitmap    *mask_closed,
182                                                   GdkPixmap    *pixmap_opened,
183                                                   GdkBitmap    *mask_opened,
184                                                   gboolean      is_leaf,
185                                                   gboolean      expanded);
186 void gtk_ctree_remove_node                       (GtkCTree     *ctree, 
187                                                   GtkCTreeNode *node);
188 GtkCTreeNode * gtk_ctree_insert_gnode            (GtkCTree          *ctree,
189                                                   GtkCTreeNode      *parent,
190                                                   GtkCTreeNode      *sibling,
191                                                   GNode             *gnode,
192                                                   GtkCTreeGNodeFunc  func,
193                                                   gpointer           data);
194 GNode * gtk_ctree_export_to_gnode                (GtkCTree          *ctree,
195                                                   GNode             *parent,
196                                                   GNode             *sibling,
197                                                   GtkCTreeNode      *node,
198                                                   GtkCTreeGNodeFunc  func,
199                                                   gpointer           data);
200
201 /***********************************************************
202  *  Generic recursive functions, querying / finding tree   *
203  *  information                                            *
204  ***********************************************************/
205
206 void gtk_ctree_post_recursive                    (GtkCTree     *ctree, 
207                                                   GtkCTreeNode *node,
208                                                   GtkCTreeFunc  func,
209                                                   gpointer      data);
210 void gtk_ctree_post_recursive_to_depth           (GtkCTree     *ctree, 
211                                                   GtkCTreeNode *node,
212                                                   gint          depth,
213                                                   GtkCTreeFunc  func,
214                                                   gpointer      data);
215 void gtk_ctree_pre_recursive                     (GtkCTree     *ctree, 
216                                                   GtkCTreeNode *node,
217                                                   GtkCTreeFunc  func,
218                                                   gpointer      data);
219 void gtk_ctree_pre_recursive_to_depth            (GtkCTree     *ctree, 
220                                                   GtkCTreeNode *node,
221                                                   gint          depth,
222                                                   GtkCTreeFunc  func,
223                                                   gpointer      data);
224 gboolean gtk_ctree_is_viewable                   (GtkCTree     *ctree, 
225                                                   GtkCTreeNode *node);
226 GtkCTreeNode * gtk_ctree_last                    (GtkCTree     *ctree,
227                                                   GtkCTreeNode *node);
228 GtkCTreeNode * gtk_ctree_find_node_ptr           (GtkCTree     *ctree,
229                                                   GtkCTreeRow  *ctree_row);
230 GtkCTreeNode * gtk_ctree_node_nth                (GtkCTree     *ctree,
231                                                   guint         row);
232 gboolean gtk_ctree_find                          (GtkCTree     *ctree,
233                                                   GtkCTreeNode *node,
234                                                   GtkCTreeNode *child);
235 gboolean gtk_ctree_is_ancestor                   (GtkCTree     *ctree,
236                                                   GtkCTreeNode *node,
237                                                   GtkCTreeNode *child);
238 GtkCTreeNode * gtk_ctree_find_by_row_data        (GtkCTree     *ctree,
239                                                   GtkCTreeNode *node,
240                                                   gpointer      data);
241 /* returns a GList of all GtkCTreeNodes with row->data == data. */
242 GList * gtk_ctree_find_all_by_row_data           (GtkCTree     *ctree,
243                                                   GtkCTreeNode *node,
244                                                   gpointer      data);
245 GtkCTreeNode * gtk_ctree_find_by_row_data_custom (GtkCTree     *ctree,
246                                                   GtkCTreeNode *node,
247                                                   gpointer      data,
248                                                   GCompareFunc  func);
249 /* returns a GList of all GtkCTreeNodes with row->data == data. */
250 GList * gtk_ctree_find_all_by_row_data_custom    (GtkCTree     *ctree,
251                                                   GtkCTreeNode *node,
252                                                   gpointer      data,
253                                                   GCompareFunc  func);
254 gboolean gtk_ctree_is_hot_spot                   (GtkCTree     *ctree,
255                                                   gint          x,
256                                                   gint          y);
257
258 /***********************************************************
259  *   Tree signals : move, expand, collapse, (un)select     *
260  ***********************************************************/
261
262 void gtk_ctree_move                              (GtkCTree     *ctree,
263                                                   GtkCTreeNode *node,
264                                                   GtkCTreeNode *new_parent, 
265                                                   GtkCTreeNode *new_sibling);
266 void gtk_ctree_expand                            (GtkCTree     *ctree,
267                                                   GtkCTreeNode *node);
268 void gtk_ctree_expand_recursive                  (GtkCTree     *ctree,
269                                                   GtkCTreeNode *node);
270 void gtk_ctree_expand_to_depth                   (GtkCTree     *ctree,
271                                                   GtkCTreeNode *node,
272                                                   gint          depth);
273 void gtk_ctree_collapse                          (GtkCTree     *ctree,
274                                                   GtkCTreeNode *node);
275 void gtk_ctree_collapse_recursive                (GtkCTree     *ctree,
276                                                   GtkCTreeNode *node);
277 void gtk_ctree_collapse_to_depth                 (GtkCTree     *ctree,
278                                                   GtkCTreeNode *node,
279                                                   gint          depth);
280 void gtk_ctree_toggle_expansion                  (GtkCTree     *ctree,
281                                                   GtkCTreeNode *node);
282 void gtk_ctree_toggle_expansion_recursive        (GtkCTree     *ctree,
283                                                   GtkCTreeNode *node);
284 void gtk_ctree_select                            (GtkCTree     *ctree, 
285                                                   GtkCTreeNode *node);
286 void gtk_ctree_select_recursive                  (GtkCTree     *ctree, 
287                                                   GtkCTreeNode *node);
288 void gtk_ctree_unselect                          (GtkCTree     *ctree, 
289                                                   GtkCTreeNode *node);
290 void gtk_ctree_unselect_recursive                (GtkCTree     *ctree, 
291                                                   GtkCTreeNode *node);
292 void gtk_ctree_real_select_recursive             (GtkCTree     *ctree, 
293                                                   GtkCTreeNode *node, 
294                                                   gint          state);
295
296 /***********************************************************
297  *           Analogons of GtkCList functions               *
298  ***********************************************************/
299
300 void gtk_ctree_node_set_text                     (GtkCTree     *ctree,
301                                                   GtkCTreeNode *node,
302                                                   gint          column,
303                                                   const gchar  *text);
304 void gtk_ctree_node_set_pixmap                   (GtkCTree     *ctree,
305                                                   GtkCTreeNode *node,
306                                                   gint          column,
307                                                   GdkPixmap    *pixmap,
308                                                   GdkBitmap    *mask);
309 void gtk_ctree_node_set_pixtext                  (GtkCTree     *ctree,
310                                                   GtkCTreeNode *node,
311                                                   gint          column,
312                                                   const gchar  *text,
313                                                   guint8        spacing,
314                                                   GdkPixmap    *pixmap,
315                                                   GdkBitmap    *mask);
316 void gtk_ctree_set_node_info                     (GtkCTree     *ctree,
317                                                   GtkCTreeNode *node,
318                                                   const gchar  *text,
319                                                   guint8        spacing,
320                                                   GdkPixmap    *pixmap_closed,
321                                                   GdkBitmap    *mask_closed,
322                                                   GdkPixmap    *pixmap_opened,
323                                                   GdkBitmap    *mask_opened,
324                                                   gboolean      is_leaf,
325                                                   gboolean      expanded);
326 void gtk_ctree_node_set_shift                    (GtkCTree     *ctree,
327                                                   GtkCTreeNode *node,
328                                                   gint          column,
329                                                   gint          vertical,
330                                                   gint          horizontal);
331 void gtk_ctree_node_set_selectable               (GtkCTree     *ctree,
332                                                   GtkCTreeNode *node,
333                                                   gboolean      selectable);
334 gboolean gtk_ctree_node_get_selectable           (GtkCTree     *ctree,
335                                                   GtkCTreeNode *node);
336 GtkCellType gtk_ctree_node_get_cell_type         (GtkCTree     *ctree,
337                                                   GtkCTreeNode *node,
338                                                   gint          column);
339 gint gtk_ctree_node_get_text                     (GtkCTree     *ctree,
340                                                   GtkCTreeNode *node,
341                                                   gint          column,
342                                                   gchar       **text);
343 gint gtk_ctree_node_get_pixmap                   (GtkCTree     *ctree,
344                                                   GtkCTreeNode *node,
345                                                   gint          column,
346                                                   GdkPixmap   **pixmap,
347                                                   GdkBitmap   **mask);
348 gint gtk_ctree_node_get_pixtext                  (GtkCTree     *ctree,
349                                                   GtkCTreeNode *node,
350                                                   gint          column,
351                                                   gchar       **text,
352                                                   guint8       *spacing,
353                                                   GdkPixmap   **pixmap,
354                                                   GdkBitmap   **mask);
355 gint gtk_ctree_get_node_info                     (GtkCTree     *ctree,
356                                                   GtkCTreeNode *node,
357                                                   gchar       **text,
358                                                   guint8       *spacing,
359                                                   GdkPixmap   **pixmap_closed,
360                                                   GdkBitmap   **mask_closed,
361                                                   GdkPixmap   **pixmap_opened,
362                                                   GdkBitmap   **mask_opened,
363                                                   gboolean     *is_leaf,
364                                                   gboolean     *expanded);
365 void gtk_ctree_node_set_row_style                (GtkCTree     *ctree,
366                                                   GtkCTreeNode *node,
367                                                   GtkStyle     *style);
368 GtkStyle * gtk_ctree_node_get_row_style          (GtkCTree     *ctree,
369                                                   GtkCTreeNode *node);
370 void gtk_ctree_node_set_cell_style               (GtkCTree     *ctree,
371                                                   GtkCTreeNode *node,
372                                                   gint          column,
373                                                   GtkStyle     *style);
374 GtkStyle * gtk_ctree_node_get_cell_style         (GtkCTree     *ctree,
375                                                   GtkCTreeNode *node,
376                                                   gint          column);
377 void gtk_ctree_node_set_foreground               (GtkCTree     *ctree,
378                                                   GtkCTreeNode *node,
379                                                   GdkColor     *color);
380 void gtk_ctree_node_set_background               (GtkCTree     *ctree,
381                                                   GtkCTreeNode *node,
382                                                   GdkColor     *color);
383 void gtk_ctree_node_set_row_data                 (GtkCTree     *ctree,
384                                                   GtkCTreeNode *node,
385                                                   gpointer      data);
386 void gtk_ctree_node_set_row_data_full            (GtkCTree     *ctree,
387                                                   GtkCTreeNode *node,
388                                                   gpointer      data,
389                                                   GtkDestroyNotify destroy);
390 gpointer gtk_ctree_node_get_row_data             (GtkCTree     *ctree,
391                                                   GtkCTreeNode *node);
392 void gtk_ctree_node_moveto                       (GtkCTree     *ctree,
393                                                   GtkCTreeNode *node,
394                                                   gint          column,
395                                                   gfloat        row_align,
396                                                   gfloat        col_align);
397 GtkVisibility gtk_ctree_node_is_visible          (GtkCTree     *ctree,
398                                                   GtkCTreeNode *node);
399
400 /***********************************************************
401  *             GtkCTree specific functions                 *
402  ***********************************************************/
403
404 void gtk_ctree_set_indent            (GtkCTree                *ctree, 
405                                       gint                     indent);
406 void gtk_ctree_set_spacing           (GtkCTree                *ctree, 
407                                       gint                     spacing);
408 void gtk_ctree_set_show_stub         (GtkCTree                *ctree, 
409                                       gboolean                 show_stub);
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);
416
417 /***********************************************************
418  *             Tree sorting functions                      *
419  ***********************************************************/
420
421 void gtk_ctree_sort_node                         (GtkCTree     *ctree, 
422                                                   GtkCTreeNode *node);
423 void gtk_ctree_sort_recursive                    (GtkCTree     *ctree, 
424                                                   GtkCTreeNode *node);
425
426
427 /* deprecated*/
428 void gtk_ctree_show_stub             (GtkCTree                *ctree, 
429                                       gboolean                 show_stub);
430 void gtk_ctree_set_reorderable       (GtkCTree                *ctree,
431                                       gboolean                 reorderable);
432 void gtk_ctree_set_use_drag_icons    (GtkCTree                *ctree,
433                                       gboolean                 use_icons);
434
435
436 #ifdef __cplusplus
437 }
438 #endif                          /* __cplusplus */
439
440 #endif                          /* __GTK_CTREE_H__ */