Improve some sieve-related translations
[claws.git] / src / gtk / gtkcmctree.h
blob33d177f87f0b9b26ab1a7e18edc2cf6c998f445f
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 * GtkCMCTree 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 Lesser 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 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser 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.
25 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
26 * file for a list of people on the GTK+ Team. See the ChangeLog
27 * files for a list of changes. These files are distributed with
28 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
31 #ifndef __GTK_CMCTREE_H__
32 #define __GTK_CMCTREE_H__
34 #include "gtkcmclist.h"
36 G_BEGIN_DECLS
38 #define GTK_TYPE_CMCTREE (gtk_cmctree_get_type ())
39 #define GTK_CMCTREE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_CMCTREE, GtkCMCTree))
40 #define GTK_CMCTREE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_CMCTREE, GtkCMCTreeClass))
41 #define GTK_IS_CMCTREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_CMCTREE))
42 #define GTK_IS_CMCTREE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_CMCTREE))
43 #define GTK_CMCTREE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CMCTREE, GtkCMCTreeClass))
45 #define GTK_CMCTREE_ROW(_node_) ((GtkCMCTreeRow *)(((GList *)(_node_))->data))
46 #define GTK_CMCTREE_NODE(_node_) ((GtkCMCTreeNode *)((_node_)))
47 #define GTK_CMCTREE_NODE_NEXT(_nnode_) ((GtkCMCTreeNode *)(((GList *)(_nnode_))->next))
48 #define GTK_CMCTREE_NODE_PREV(_pnode_) ((GtkCMCTreeNode *)(((GList *)(_pnode_))->prev))
49 #define GTK_CMCTREE_FUNC(_func_) ((GtkCMCTreeFunc)(_func_))
51 #define GTK_TYPE_CMCTREE_NODE (gtk_cmctree_node_get_type ())
53 GType gtk_cmctree_pos_get_type (void) G_GNUC_CONST;
54 #define GTK_TYPE_CMCTREE_POS (gtk_cmctree_pos_get_type())
55 GType gtk_cmctree_line_style_get_type (void) G_GNUC_CONST;
56 #define GTK_TYPE_CMCTREE_LINE_STYLE (gtk_cmctree_line_style_get_type())
57 GType gtk_cmctree_expander_style_get_type (void) G_GNUC_CONST;
58 #define GTK_TYPE_CMCTREE_EXPANDER_STYLE (gtk_cmctree_expander_style_get_type())
59 GType gtk_cmctree_expansion_type_get_type (void) G_GNUC_CONST;
60 #define GTK_TYPE_CMCTREE_EXPANSION_TYPE (gtk_cmctree_expansion_type_get_type())
62 typedef enum
64 GTK_CMCTREE_POS_BEFORE,
65 GTK_CMCTREE_POS_AS_CHILD,
66 GTK_CMCTREE_POS_AFTER
67 } GtkCMCTreePos;
69 typedef enum
71 GTK_CMCTREE_LINES_NONE
72 } GtkCMCTreeLineStyle;
74 typedef enum
76 GTK_CMCTREE_EXPANDER_NONE,
77 GTK_CMCTREE_EXPANDER_TRIANGLE
78 } GtkCMCTreeExpanderStyle;
80 typedef enum
82 GTK_CMCTREE_EXPANSION_EXPAND,
83 GTK_CMCTREE_EXPANSION_EXPAND_RECURSIVE,
84 GTK_CMCTREE_EXPANSION_COLLAPSE,
85 GTK_CMCTREE_EXPANSION_COLLAPSE_RECURSIVE,
86 GTK_CMCTREE_EXPANSION_TOGGLE,
87 GTK_CMCTREE_EXPANSION_TOGGLE_RECURSIVE
88 } GtkCMCTreeExpansionType;
90 typedef struct _GtkCMCTree GtkCMCTree;
91 typedef struct _GtkCMCTreeClass GtkCMCTreeClass;
92 typedef struct _GtkCMCTreeRow GtkCMCTreeRow;
93 typedef struct _GtkCMCTreeNode GtkCMCTreeNode;
95 typedef void (*GtkCMCTreeFunc) (GtkCMCTree *ctree,
96 GtkCMCTreeNode *node,
97 gpointer data);
99 typedef gboolean (*GtkCMCTreeGNodeFunc) (GtkCMCTree *ctree,
100 guint depth,
101 GNode *gnode,
102 GtkCMCTreeNode *cnode,
103 gpointer data);
105 typedef gboolean (*GtkCMCTreeCompareDragFunc) (GtkCMCTree *ctree,
106 GtkCMCTreeNode *source_node,
107 GtkCMCTreeNode *new_parent,
108 GtkCMCTreeNode *new_sibling);
110 struct _GtkCMCTree
112 GtkCMCList clist;
114 gint tree_indent;
115 gint tree_spacing;
116 gint tree_column;
118 guint line_style : 2;
119 guint expander_style : 2;
120 guint show_stub : 1;
122 GtkCMCTreeCompareDragFunc drag_compare;
125 struct _GtkCMCTreeClass
127 GtkCMCListClass parent_class;
129 void (*tree_select_row) (GtkCMCTree *ctree,
130 GtkCMCTreeNode *row,
131 gint column);
132 void (*tree_unselect_row) (GtkCMCTree *ctree,
133 GtkCMCTreeNode *row,
134 gint column);
135 void (*tree_expand) (GtkCMCTree *ctree,
136 GtkCMCTreeNode *node);
137 void (*tree_collapse) (GtkCMCTree *ctree,
138 GtkCMCTreeNode *node);
139 void (*tree_move) (GtkCMCTree *ctree,
140 GtkCMCTreeNode *node,
141 GtkCMCTreeNode *new_parent,
142 GtkCMCTreeNode *new_sibling);
143 void (*change_focus_row_expansion) (GtkCMCTree *ctree,
144 GtkCMCTreeExpansionType action);
147 struct _GtkCMCTreeRow
149 GtkCMCListRow row;
151 GtkCMCTreeNode *parent;
152 GtkCMCTreeNode *sibling;
153 GtkCMCTreeNode *children;
155 GdkPixbuf *pixbuf_closed;
156 GdkPixbuf *pixbuf_opened;
158 guint16 level;
160 guint is_leaf : 1;
161 guint expanded : 1;
164 struct _GtkCMCTreeNode {
165 GList list;
169 /***********************************************************
170 * Creation, insertion, deletion *
171 ***********************************************************/
173 GType gtk_cmctree_get_type (void);
174 GtkWidget * gtk_cmctree_new_with_titles (gint columns,
175 gint tree_column,
176 gchar *titles[]);
177 GtkWidget * gtk_cmctree_new (gint columns,
178 gint tree_column);
179 GtkCMCTreeNode * gtk_cmctree_insert_node (GtkCMCTree *ctree,
180 GtkCMCTreeNode *parent,
181 GtkCMCTreeNode *sibling,
182 gchar *text[],
183 guint8 spacing,
184 GdkPixbuf *pixbuf_closed,
185 GdkPixbuf *pixbuf_opened,
186 gboolean is_leaf,
187 gboolean expanded);
188 void gtk_cmctree_remove_node (GtkCMCTree *ctree,
189 GtkCMCTreeNode *node);
190 GtkCMCTreeNode * gtk_cmctree_insert_gnode (GtkCMCTree *ctree,
191 GtkCMCTreeNode *parent,
192 GtkCMCTreeNode *sibling,
193 GNode *gnode,
194 GtkCMCTreeGNodeFunc func,
195 gpointer data);
196 GNode * gtk_cmctree_export_to_gnode (GtkCMCTree *ctree,
197 GNode *parent,
198 GNode *sibling,
199 GtkCMCTreeNode *node,
200 GtkCMCTreeGNodeFunc func,
201 gpointer data);
203 /***********************************************************
204 * Generic recursive functions, querying / finding tree *
205 * information *
206 ***********************************************************/
208 void gtk_cmctree_post_recursive (GtkCMCTree *ctree,
209 GtkCMCTreeNode *node,
210 GtkCMCTreeFunc func,
211 gpointer data);
212 void gtk_cmctree_post_recursive_to_depth (GtkCMCTree *ctree,
213 GtkCMCTreeNode *node,
214 gint depth,
215 GtkCMCTreeFunc func,
216 gpointer data);
217 void gtk_cmctree_pre_recursive (GtkCMCTree *ctree,
218 GtkCMCTreeNode *node,
219 GtkCMCTreeFunc func,
220 gpointer data);
221 void gtk_cmctree_pre_recursive_to_depth (GtkCMCTree *ctree,
222 GtkCMCTreeNode *node,
223 gint depth,
224 GtkCMCTreeFunc func,
225 gpointer data);
226 gboolean gtk_cmctree_is_viewable (GtkCMCTree *ctree,
227 GtkCMCTreeNode *node);
228 GtkCMCTreeNode * gtk_cmctree_last (GtkCMCTree *ctree,
229 GtkCMCTreeNode *node);
230 GtkCMCTreeNode * gtk_cmctree_find_node_ptr (GtkCMCTree *ctree,
231 GtkCMCTreeRow *ctree_row);
232 GtkCMCTreeNode * gtk_cmctree_node_nth (GtkCMCTree *ctree,
233 guint row);
234 gboolean gtk_cmctree_find (GtkCMCTree *ctree,
235 GtkCMCTreeNode *node,
236 GtkCMCTreeNode *child);
237 gboolean gtk_cmctree_is_ancestor (GtkCMCTree *ctree,
238 GtkCMCTreeNode *node,
239 GtkCMCTreeNode *child);
240 GtkCMCTreeNode * gtk_cmctree_find_by_row_data (GtkCMCTree *ctree,
241 GtkCMCTreeNode *node,
242 gpointer data);
243 /* returns a GList of all GtkCMCTreeNodes with row->data == data. */
244 GList * gtk_cmctree_find_all_by_row_data (GtkCMCTree *ctree,
245 GtkCMCTreeNode *node,
246 gpointer data);
247 GtkCMCTreeNode * gtk_cmctree_find_by_row_data_custom (GtkCMCTree *ctree,
248 GtkCMCTreeNode *node,
249 gpointer data,
250 GCompareFunc func);
251 /* returns a GList of all GtkCMCTreeNodes with row->data == data. */
252 GList * gtk_cmctree_find_all_by_row_data_custom (GtkCMCTree *ctree,
253 GtkCMCTreeNode *node,
254 gpointer data,
255 GCompareFunc func);
257 /* This assumes that x and y coordinates are inside the clist_window.
258 * Returns true if the coordinates are inside a tree expander on
259 * one of the rows. */
260 gboolean gtk_cmctree_is_hot_spot (GtkCMCTree *ctree,
261 gint x,
262 gint y);
264 /***********************************************************
265 * Tree signals : move, expand, collapse, (un)select *
266 ***********************************************************/
268 void gtk_cmctree_move (GtkCMCTree *ctree,
269 GtkCMCTreeNode *node,
270 GtkCMCTreeNode *new_parent,
271 GtkCMCTreeNode *new_sibling);
272 void gtk_cmctree_expand (GtkCMCTree *ctree,
273 GtkCMCTreeNode *node);
274 void gtk_cmctree_expand_recursive (GtkCMCTree *ctree,
275 GtkCMCTreeNode *node);
276 void gtk_cmctree_expand_to_depth (GtkCMCTree *ctree,
277 GtkCMCTreeNode *node,
278 gint depth);
279 void gtk_cmctree_collapse (GtkCMCTree *ctree,
280 GtkCMCTreeNode *node);
281 void gtk_cmctree_collapse_recursive (GtkCMCTree *ctree,
282 GtkCMCTreeNode *node);
283 void gtk_cmctree_collapse_to_depth (GtkCMCTree *ctree,
284 GtkCMCTreeNode *node,
285 gint depth);
286 void gtk_cmctree_toggle_expansion (GtkCMCTree *ctree,
287 GtkCMCTreeNode *node);
288 void gtk_cmctree_toggle_expansion_recursive (GtkCMCTree *ctree,
289 GtkCMCTreeNode *node);
290 void gtk_cmctree_select (GtkCMCTree *ctree,
291 GtkCMCTreeNode *node);
292 void gtk_cmctree_select_recursive (GtkCMCTree *ctree,
293 GtkCMCTreeNode *node);
294 void gtk_cmctree_unselect (GtkCMCTree *ctree,
295 GtkCMCTreeNode *node);
296 void gtk_cmctree_unselect_recursive (GtkCMCTree *ctree,
297 GtkCMCTreeNode *node);
298 void gtk_cmctree_real_select_recursive (GtkCMCTree *ctree,
299 GtkCMCTreeNode *node,
300 gint state);
302 /***********************************************************
303 * Analogons of GtkCMCList functions *
304 ***********************************************************/
306 void gtk_cmctree_node_set_text (GtkCMCTree *ctree,
307 GtkCMCTreeNode *node,
308 gint column,
309 const gchar *text);
310 void gtk_cmctree_node_set_pixbuf (GtkCMCTree *ctree,
311 GtkCMCTreeNode *node,
312 gint column,
313 GdkPixbuf *pixbuf);
314 void gtk_cmctree_node_set_pixtext (GtkCMCTree *ctree,
315 GtkCMCTreeNode *node,
316 gint column,
317 const gchar *text,
318 guint8 spacing,
319 GdkPixbuf *pixbuf);
320 void gtk_cmctree_set_node_info (GtkCMCTree *ctree,
321 GtkCMCTreeNode *node,
322 const gchar *text,
323 guint8 spacing,
324 GdkPixbuf *pixbuf_closed,
325 GdkPixbuf *pixbuf_opened,
326 gboolean is_leaf,
327 gboolean expanded);
328 void gtk_cmctree_node_set_shift (GtkCMCTree *ctree,
329 GtkCMCTreeNode *node,
330 gint column,
331 gint vertical,
332 gint horizontal);
333 void gtk_cmctree_node_set_selectable (GtkCMCTree *ctree,
334 GtkCMCTreeNode *node,
335 gboolean selectable);
336 gboolean gtk_cmctree_node_get_selectable (GtkCMCTree *ctree,
337 GtkCMCTreeNode *node);
338 GtkCMCellType gtk_cmctree_node_get_cell_type (GtkCMCTree *ctree,
339 GtkCMCTreeNode *node,
340 gint column);
341 gboolean gtk_cmctree_node_get_text (GtkCMCTree *ctree,
342 GtkCMCTreeNode *node,
343 gint column,
344 gchar **text);
345 gboolean gtk_cmctree_node_get_pixbuf (GtkCMCTree *ctree,
346 GtkCMCTreeNode *node,
347 gint column,
348 GdkPixbuf **pixbuf);
349 gboolean gtk_cmctree_node_get_pixtext (GtkCMCTree *ctree,
350 GtkCMCTreeNode *node,
351 gint column,
352 gchar **text,
353 guint8 *spacing,
354 GdkPixbuf **pixbuf);
355 gboolean gtk_cmctree_get_node_info (GtkCMCTree *ctree,
356 GtkCMCTreeNode *node,
357 gchar **text,
358 guint8 *spacing,
359 GdkPixbuf **pixbuf_closed,
360 GdkPixbuf **pixbuf_opened,
361 gboolean *is_leaf,
362 gboolean *expanded);
363 void gtk_cmctree_node_set_row_style (GtkCMCTree *ctree,
364 GtkCMCTreeNode *node,
365 GtkStyle *style);
366 GtkStyle * gtk_cmctree_node_get_row_style (GtkCMCTree *ctree,
367 GtkCMCTreeNode *node);
368 void gtk_cmctree_node_set_cell_style (GtkCMCTree *ctree,
369 GtkCMCTreeNode *node,
370 gint column,
371 GtkStyle *style);
372 GtkStyle * gtk_cmctree_node_get_cell_style (GtkCMCTree *ctree,
373 GtkCMCTreeNode *node,
374 gint column);
375 void gtk_cmctree_node_set_foreground (GtkCMCTree *ctree,
376 GtkCMCTreeNode *node,
377 const GdkRGBA *color);
378 void gtk_cmctree_node_set_background (GtkCMCTree *ctree,
379 GtkCMCTreeNode *node,
380 const GdkRGBA *color);
381 void gtk_cmctree_node_set_row_data (GtkCMCTree *ctree,
382 GtkCMCTreeNode *node,
383 gpointer data);
384 void gtk_cmctree_node_set_row_data_full (GtkCMCTree *ctree,
385 GtkCMCTreeNode *node,
386 gpointer data,
387 GDestroyNotify destroy);
388 gpointer gtk_cmctree_node_get_row_data (GtkCMCTree *ctree,
389 GtkCMCTreeNode *node);
390 void gtk_cmctree_node_moveto (GtkCMCTree *ctree,
391 GtkCMCTreeNode *node,
392 gint column,
393 gfloat row_align,
394 gfloat col_align);
395 GtkVisibility gtk_cmctree_node_is_visible (GtkCMCTree *ctree,
396 GtkCMCTreeNode *node);
398 /***********************************************************
399 * GtkCMCTree specific functions *
400 ***********************************************************/
402 void gtk_cmctree_set_indent (GtkCMCTree *ctree,
403 gint indent);
404 void gtk_cmctree_set_spacing (GtkCMCTree *ctree,
405 gint spacing);
406 void gtk_cmctree_set_show_stub (GtkCMCTree *ctree,
407 gboolean show_stub);
408 void gtk_cmctree_set_line_style (GtkCMCTree *ctree,
409 GtkCMCTreeLineStyle line_style);
410 void gtk_cmctree_set_expander_style (GtkCMCTree *ctree,
411 GtkCMCTreeExpanderStyle expander_style);
412 void gtk_cmctree_set_drag_compare_func (GtkCMCTree *ctree,
413 GtkCMCTreeCompareDragFunc cmp_func);
415 /***********************************************************
416 * Tree sorting functions *
417 ***********************************************************/
419 void gtk_cmctree_sort_node (GtkCMCTree *ctree,
420 GtkCMCTreeNode *node);
421 void gtk_cmctree_sort_recursive (GtkCMCTree *ctree,
422 GtkCMCTreeNode *node);
425 #define gtk_cmctree_set_reorderable(t,r) gtk_cmclist_set_reorderable((GtkCMCList*) (t),(r))
427 /* GType for the GtkCMCTreeNode. This is a boxed type, although it uses
428 * no-op's for the copy and free routines. It is defined in order to
429 * provide type information for the signal arguments
431 GType gtk_cmctree_node_get_type (void) G_GNUC_CONST;
433 G_END_DECLS
435 #endif /* __GTK_CMCTREE_H__ */