2 * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #include "gtkmodelsimple.h"
21 #include "gtksignal.h"
42 static void gtk_model_simple_init (GtkModelSimple *model_simple);
43 static void gtk_model_simple_class_init (GtkModelSimpleClass *class);
44 static void gtk_model_simple_tree_model_init (GtkTreeModelIface *iface);
45 static gint gtk_real_model_simple_get_n_columns (GtkTreeModel *tree_model);
46 static GType gtk_real_model_simple_get_column_type (GtkTreeModel *tree_model,
48 static gboolean gtk_real_model_simple_get_iter (GtkTreeModel *tree_model,
51 static GtkTreePath *gtk_real_model_simple_get_path (GtkTreeModel *tree_model,
53 static void gtk_real_model_simple_get_value (GtkTreeModel *tree_model,
57 static gboolean gtk_real_model_simple_iter_next (GtkTreeModel *tree_model,
59 static gboolean gtk_real_model_simple_iter_children (GtkTreeModel *tree_model,
62 static gboolean gtk_real_model_simple_iter_has_child (GtkTreeModel *tree_model,
64 static gint gtk_real_model_simple_iter_n_children (GtkTreeModel *tree_model,
66 static gboolean gtk_real_model_simple_iter_nth_child (GtkTreeModel *tree_model,
70 static gboolean gtk_real_model_simple_iter_parent (GtkTreeModel *tree_model,
77 static guint model_simple_signals[LAST_SIGNAL] = { 0 };
81 gtk_model_simple_get_type (void)
83 static GtkType model_simple_type = 0;
85 if (!model_simple_type)
87 static const GTypeInfo model_simple_info =
89 sizeof (GtkModelSimpleClass),
91 NULL, /* base_finalize */
92 (GClassInitFunc) gtk_model_simple_class_init,
93 NULL, /* class_finalize */
94 NULL, /* class_data */
95 sizeof (GtkModelSimple),
97 (GInstanceInitFunc) gtk_model_simple_init
100 static const GInterfaceInfo tree_model_info =
102 (GInterfaceInitFunc) gtk_model_simple_tree_model_init,
107 model_simple_type = g_type_register_static (GTK_TYPE_TREE_MODEL, "GtkModelSimple", &model_simple_info, 0);
108 g_type_add_interface_static (model_simple_type,
113 return model_simple_type;
117 gtk_model_simple_new (void)
119 GtkModelSimple *retval;
121 retval = GTK_MODEL_SIMPLE (gtk_type_new (GTK_TYPE_MODEL_SIMPLE));
127 gtk_model_simple_class_init (GtkModelSimpleClass *class)
129 GtkObjectClass *object_class;
131 object_class = (GtkObjectClass*) class;
133 model_simple_signals[CHANGED] =
134 gtk_signal_new ("changed",
136 GTK_CLASS_TYPE (object_class),
137 GTK_SIGNAL_OFFSET (GtkModelSimpleClass, changed),
138 gtk_marshal_VOID__POINTER_POINTER,
142 model_simple_signals[INSERTED] =
143 gtk_signal_new ("inserted",
145 GTK_CLASS_TYPE (object_class),
146 GTK_SIGNAL_OFFSET (GtkModelSimpleClass, inserted),
147 gtk_marshal_VOID__POINTER_POINTER,
151 model_simple_signals[CHILD_TOGGLED] =
152 gtk_signal_new ("child_toggled",
154 GTK_CLASS_TYPE (object_class),
155 GTK_SIGNAL_OFFSET (GtkModelSimpleClass, child_toggled),
156 gtk_marshal_VOID__POINTER_POINTER,
160 model_simple_signals[DELETED] =
161 gtk_signal_new ("deleted",
163 GTK_CLASS_TYPE (object_class),
164 GTK_SIGNAL_OFFSET (GtkModelSimpleClass, deleted),
165 gtk_marshal_VOID__POINTER,
169 model_simple_signals[GET_N_COLUMNS] =
170 gtk_signal_new ("get_n_columns",
172 GTK_CLASS_TYPE (object_class),
174 gtk_marshal_INT__VOID,
176 model_simple_signals[GET_COLUMN_TYPE] =
177 gtk_signal_new ("get_column_type",
179 GTK_CLASS_TYPE (object_class),
181 gtk_marshal_INT__INT,
184 model_simple_signals[GET_ITER] =
185 gtk_signal_new ("get_iter",
187 GTK_CLASS_TYPE (object_class),
189 gtk_marshal_BOOLEAN__POINTER_POINTER,
193 model_simple_signals[GET_PATH] =
194 gtk_signal_new ("get_path",
196 GTK_CLASS_TYPE (object_class),
198 gtk_marshal_POINTER__POINTER,
201 model_simple_signals[GET_VALUE] =
202 gtk_signal_new ("get_value",
204 GTK_CLASS_TYPE (object_class),
206 gtk_marshal_VOID__POINTER_INT_POINTER,
211 model_simple_signals[ITER_NEXT] =
212 gtk_signal_new ("iter_next",
214 GTK_CLASS_TYPE (object_class),
216 gtk_marshal_BOOLEAN__POINTER,
219 model_simple_signals[ITER_CHILDREN] =
220 gtk_signal_new ("iter_children",
222 GTK_CLASS_TYPE (object_class),
224 gtk_marshal_BOOLEAN__POINTER_POINTER,
228 model_simple_signals[ITER_HAS_CHILD] =
229 gtk_signal_new ("iter_has_child",
231 GTK_CLASS_TYPE (object_class),
233 gtk_marshal_BOOLEAN__POINTER,
236 model_simple_signals[ITER_N_CHILDREN] =
237 gtk_signal_new ("iter_n_children",
239 GTK_CLASS_TYPE (object_class),
241 gtk_marshal_INT__POINTER,
244 model_simple_signals[ITER_NTH_CHILD] =
245 gtk_signal_new ("node_nth_child",
247 GTK_CLASS_TYPE (object_class),
249 gtk_marshal_BOOLEAN__POINTER_POINTER_INT,
253 model_simple_signals[ITER_PARENT] =
254 gtk_signal_new ("node_parent",
256 GTK_CLASS_TYPE (object_class),
258 gtk_marshal_BOOLEAN__POINTER_POINTER,
263 gtk_object_class_add_signals (object_class, model_simple_signals, LAST_SIGNAL);
267 gtk_model_simple_tree_model_init (GtkTreeModelIface *iface)
269 iface->get_n_columns = gtk_real_model_simple_get_n_columns;
270 iface->get_column_type = gtk_real_model_simple_get_column_type;
271 iface->get_iter = gtk_real_model_simple_get_iter;
272 iface->get_path = gtk_real_model_simple_get_path;
273 iface->get_value = gtk_real_model_simple_get_value;
274 iface->iter_next = gtk_real_model_simple_iter_next;
275 iface->iter_children = gtk_real_model_simple_iter_children;
276 iface->iter_has_child = gtk_real_model_simple_iter_has_child;
277 iface->iter_n_children = gtk_real_model_simple_iter_n_children;
278 iface->iter_nth_child = gtk_real_model_simple_iter_nth_child;
279 iface->iter_parent = gtk_real_model_simple_iter_parent;
284 gtk_model_simple_init (GtkModelSimple *model_simple)
286 model_simple->stamp = 1;
290 gtk_real_model_simple_get_n_columns (GtkTreeModel *tree_model)
294 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[GET_N_COLUMNS], &retval);
300 gtk_real_model_simple_get_column_type (GtkTreeModel *tree_model,
303 GType retval = G_TYPE_INVALID;
305 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[GET_COLUMN_TYPE], index, &retval);
311 gtk_real_model_simple_get_iter (GtkTreeModel *tree_model,
317 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[GET_ITER], iter, path, &retval);
323 gtk_real_model_simple_get_path (GtkTreeModel *tree_model,
328 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[GET_PATH], iter, &retval);
334 gtk_real_model_simple_get_value (GtkTreeModel *tree_model,
339 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[GET_VALUE], iter, column, value);
343 gtk_real_model_simple_iter_next (GtkTreeModel *tree_model,
346 gboolean retval = FALSE;
348 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_NEXT], iter, &retval);
354 gtk_real_model_simple_iter_children (GtkTreeModel *tree_model,
358 gboolean retval = FALSE;
360 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_CHILDREN], iter, parent, &retval);
366 gtk_real_model_simple_iter_has_child (GtkTreeModel *tree_model,
369 gboolean retval = FALSE;
371 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_HAS_CHILD], iter, &retval);
377 gtk_real_model_simple_iter_n_children (GtkTreeModel *tree_model,
382 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_N_CHILDREN], iter, &retval);
388 gtk_real_model_simple_iter_nth_child (GtkTreeModel *tree_model,
393 gboolean retval = FALSE;
395 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_NTH_CHILD], iter, parent, n, &retval);
401 gtk_real_model_simple_iter_parent (GtkTreeModel *tree_model,
405 gboolean retval = FALSE;
407 gtk_signal_emit (GTK_OBJECT (tree_model), model_simple_signals[ITER_PARENT], iter, child, &retval);
412 /* Public functions */
414 gtk_model_simple_changed (GtkModelSimple *simple,
418 g_return_if_fail (simple != NULL);
419 g_return_if_fail (GTK_IS_MODEL_SIMPLE (simple));
420 g_return_if_fail (path != NULL);
422 gtk_signal_emit_by_name (GTK_OBJECT (simple), "changed", path, iter);
426 gtk_model_simple_inserted (GtkModelSimple *simple,
430 g_return_if_fail (simple != NULL);
431 g_return_if_fail (GTK_IS_MODEL_SIMPLE (simple));
432 g_return_if_fail (path != NULL);
434 gtk_signal_emit_by_name (GTK_OBJECT (simple), "inserted", path, iter);
438 gtk_model_simple_child_toggled (GtkModelSimple *simple,
442 g_return_if_fail (simple != NULL);
443 g_return_if_fail (GTK_IS_MODEL_SIMPLE (simple));
444 g_return_if_fail (path != NULL);
446 gtk_signal_emit_by_name (GTK_OBJECT (simple), "child_toggled", path, iter);
450 gtk_model_simple_iter_deleted (GtkModelSimple *simple,
454 g_return_if_fail (simple != NULL);
455 g_return_if_fail (GTK_IS_MODEL_SIMPLE (simple));
456 g_return_if_fail (path != NULL);
458 gtk_signal_emit_by_name (GTK_OBJECT (simple), "iter_deleted", path, iter);