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