1 /* gtktreestore.h
2  * Copyright (C) 2000  Red Hat, Inc.,  Jonathan Blandford <jrb@redhat.com>
3  *
4  * scptreestore.h
5  * Copyright 2013 Dimitar Toshkov Zhekov <dimitar.zhekov@gmail.com>
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public
18  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef __SCP_TREE_STORE_H__
22 
23 G_BEGIN_DECLS
24 
25 #define SCP_TYPE_TREE_STORE (scp_tree_store_get_type())
26 #define SCP_TREE_STORE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SCP_TYPE_TREE_STORE, \
27 	ScpTreeStore))
28 #define SCP_TREE_STORE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SCP_TYPE_TREE_STORE, \
29 	ScpTreeStoreClass))
30 #define SCP_IS_TREE_STORE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SCP_TYPE_TREE_STORE))
31 #define SCP_IS_TREE_STORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SCP_TYPE_TREE_STORE))
32 #define SCP_TREE_STORE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), SCP_TYPE_TREE_STORE, \
33 	ScpTreeStoreClass))
34 
35 typedef struct _ScpTreeStorePrivate ScpTreeStorePrivate;
36 
37 typedef struct _ScpTreeStore
38 {
39 	GObject parent;
40 	ScpTreeStorePrivate *priv;
41 } ScpTreeStore;
42 
43 typedef struct _ScpTreeStoreClass
44 {
45 	GObjectClass parent_class;
46 	/* Padding for future expansion */
47 	void (*_scp_reserved1)(void);
48 	void (*_scp_reserved2)(void);
49 	void (*_scp_reserved3)(void);
50 	void (*_scp_reserved4)(void);
51 } ScpTreeStoreClass;
52 
53 /* Store */
54 GType scp_tree_store_get_type(void);
55 ScpTreeStore *scp_tree_store_new(gboolean sublevels, gint n_columns, ...);
56 ScpTreeStore *scp_tree_store_newv(gboolean sublevels, gint n_columns, GType *types);
57 gboolean scp_tree_store_set_column_types(ScpTreeStore *store, gint n_columns, GType *types);
58 void scp_tree_store_set_valuesv(ScpTreeStore *store, GtkTreeIter *iter, gint *columns,
59 	GValue *values, gint n_values);
60 void scp_tree_store_set_value(ScpTreeStore *store, GtkTreeIter *iter, gint column,
61 	GValue *value);
62 void scp_tree_store_set_valist(ScpTreeStore *store, GtkTreeIter *iter, va_list ap);
63 void scp_tree_store_set(ScpTreeStore *store, GtkTreeIter *iter, ...);
64 gboolean scp_tree_store_remove(ScpTreeStore *store, GtkTreeIter *iter);
65 void scp_tree_store_insert(ScpTreeStore *store, GtkTreeIter *iter, GtkTreeIter *parent,
66 	gint position);
67 #define scp_tree_store_prepend(store, iter, parent) \
68 	scp_tree_store_insert((store), (iter), (parent), 0)
69 #define scp_tree_store_append(store, iter, parent) \
70 	scp_tree_store_insert((store), (iter), (parent), -1)
71 void scp_tree_store_insert_with_valuesv(ScpTreeStore *store, GtkTreeIter *iter,
72 	GtkTreeIter *parent, gint position, gint *columns, GValue *values, gint n_values);
73 #define scp_tree_store_prepend_with_valuesv(store, iter, parent, columns, values, n_values) \
74 	scp_tree_store_insert_with_valuesv(store, iter, parent, 0, columns, values, n_values)
75 #define scp_tree_store_append_with_valuesv(store, iter, parent, columns, values, n_values) \
76 	scp_tree_store_insert_with_valuesv(store, iter, parent, -1, columns, values, n_values)
77 void scp_tree_store_insert_with_valist(ScpTreeStore *store, GtkTreeIter *iter, \
78 	GtkTreeIter *parent, gint position, va_list ap);
79 #define scp_tree_store_prepend_with_valist(store, iter, parent, ap) \
80 	scp_tree_store_insert_with_valist(store, iter, parent, 0, ap)
81 #define scp_tree_store_append_with_valist(store, iter, parent, ap) \
82 	scp_tree_store_insert_with_valist(store, iter, parent, -1, ap)
83 void scp_tree_store_insert_with_values(ScpTreeStore *store, GtkTreeIter *iter,
84 	GtkTreeIter *parent, gint position, ...);
85 #define scp_tree_store_prepend_with_values(store, iter, parent, ...) \
86 	scp_tree_store_insert_with_values(store, iter, parent, 0, __VA_ARGS__)
87 #define scp_tree_store_append_with_values(store, iter, parent, ...) \
88 	scp_tree_store_insert_with_values(store, iter, parent, -1, __VA_ARGS__)
89 void scp_tree_store_get_valist(ScpTreeStore *store, GtkTreeIter *iter, va_list var_args);
90 void scp_tree_store_get(ScpTreeStore *store, GtkTreeIter *iter, ...);
91 gboolean scp_tree_store_is_ancestor(ScpTreeStore *store, GtkTreeIter *iter,
92 	GtkTreeIter *descendant);
93 gint scp_tree_store_iter_depth(ScpTreeStore *store, GtkTreeIter *iter);
94 void scp_tree_store_clear_children(ScpTreeStore *store, GtkTreeIter *parent,
95 	gboolean emit_subsignals);
96 #define scp_tree_store_clear(store) scp_tree_store_clear_children((store), NULL, TRUE)
97 gboolean scp_tree_store_iter_is_valid(ScpTreeStore *store, GtkTreeIter *iter);
98 void scp_tree_store_reorder(ScpTreeStore *store, GtkTreeIter *parent, gint *new_order);
99 void scp_tree_store_swap(ScpTreeStore *store, GtkTreeIter *a, GtkTreeIter *b);
100 void scp_tree_store_move(ScpTreeStore *store, GtkTreeIter *iter, gint position);
101 gint scp_tree_store_iter_tell(ScpTreeStore *store, GtkTreeIter *iter);
102 
103 /* Model */
104 GtkTreeModelFlags scp_tree_store_get_flags(ScpTreeStore *store);
105 gint scp_tree_store_get_n_columns(ScpTreeStore *store);
106 GType scp_tree_store_get_column_type(ScpTreeStore *store, gint index);
107 gboolean scp_tree_store_get_iter(ScpTreeStore *store, GtkTreeIter *iter, GtkTreePath *path);
108 GtkTreePath *scp_tree_store_get_path(ScpTreeStore *store, GtkTreeIter *iter);
109 void scp_tree_store_get_value(ScpTreeStore *model, GtkTreeIter *iter, gint column,
110 	GValue *value);
111 gboolean scp_tree_store_iter_next(ScpTreeStore *store, GtkTreeIter *iter);
112 gboolean scp_tree_store_iter_previous(ScpTreeStore *store, GtkTreeIter *iter);
113 gboolean scp_tree_store_iter_children(ScpTreeStore *store, GtkTreeIter *iter,
114 	GtkTreeIter *parent);
115 gboolean scp_tree_store_iter_has_child(ScpTreeStore *store, GtkTreeIter *iter);
116 gint scp_tree_store_iter_n_children(ScpTreeStore *store, GtkTreeIter *iter);
117 gboolean scp_tree_store_iter_nth_child(ScpTreeStore *store, GtkTreeIter *iter,
118 	GtkTreeIter *parent, gint n);
119 #define scp_tree_store_get_iter_first(store, iter) \
120 	scp_tree_store_iter_nth_child((store), (iter), NULL, 0)
121 gboolean scp_tree_store_iter_parent(ScpTreeStore *store, GtkTreeIter *iter,
122 	GtkTreeIter *child);
123 void scp_tree_store_foreach(ScpTreeStore *store, GtkTreeModelForeachFunc func, gpointer gdata);
124 
125 /* DND */
126 gboolean scp_tree_store_row_draggable(ScpTreeStore *store, GtkTreePath *path);
127 gboolean scp_tree_store_drag_data_delete(ScpTreeStore *store, GtkTreePath *path);
128 gboolean scp_tree_store_drag_data_get(ScpTreeStore *store, GtkTreePath *path,
129 	GtkSelectionData *selection_data);
130 gboolean scp_tree_store_drag_data_received(ScpTreeStore *store, GtkTreePath *dest,
131 	GtkSelectionData *selection_data);
132 gboolean scp_tree_store_row_drop_possible(ScpTreeStore *store, GtkTreePath *dest_path,
133 	GtkSelectionData *selection_data);
134 
135 /* Sortable */
136 gboolean scp_tree_store_get_sort_column_id(ScpTreeStore *store, gint *sort_column_id,
137 	GtkSortType *order);
138 void scp_tree_store_set_sort_column_id(ScpTreeStore *store, gint sort_column_id,
139 	GtkSortType order);
140 void scp_tree_store_set_sort_func(ScpTreeStore *store, gint sort_column_id,
141 	GtkTreeIterCompareFunc func, gpointer data, GDestroyNotify destroy);
142 void scp_tree_store_set_default_sort_func(ScpTreeStore *store, GtkTreeIterCompareFunc func,
143 	gpointer data, GDestroyNotify destroy);
144 gboolean scp_tree_store_has_default_sort_func(ScpTreeStore *store);
145 
146 /* Extra */
147 void scp_tree_store_set_allocation(ScpTreeStore *store, guint toplevel_reserved,
148 	guint sublevel_reserved, gboolean sublevel_discard);
149 void scp_tree_store_set_utf8_collate(ScpTreeStore *store, gint column, gboolean collate);
150 gboolean scp_tree_store_get_utf8_collate(ScpTreeStore *store, gint column);
151 gint scp_tree_store_compare_func(ScpTreeStore *store, GtkTreeIter *a, GtkTreeIter *b,
152 	gpointer data);
153 gboolean scp_tree_store_iter_seek(ScpTreeStore *store, GtkTreeIter *iter, gint position);
154 gboolean scp_tree_store_search(ScpTreeStore *store, gboolean sublevels, gboolean linear_order,
155 	GtkTreeIter *iter, GtkTreeIter *parent, gint column, ...);
156 typedef gint (*ScpTreeStoreTraverseFunc)(ScpTreeStore *store, GtkTreeIter *iter,
157 	gpointer gdata);
158 gboolean scp_tree_store_traverse(ScpTreeStore *store, gboolean sublevels, GtkTreeIter *iter,
159 	GtkTreeIter *parent, ScpTreeStoreTraverseFunc func, gpointer gdata);
160 void scp_tree_store_register_dynamic(void);
161 
162 G_END_DECLS
163 
164 #define __SCP_TREE_STORE_H__ 1
165 #endif
166