#include "gtktreemodel.h"
#include "gtkliststore.h"
#include "gtktreedatalist.h"
+#include "gtksignal.h"
#define G_SLIST(x) ((GSList *) x)
+enum {
+ NODE_CHANGED,
+ NODE_INSERTED,
+ NODE_CHILD_TOGGLED,
+ NODE_DELETED,
+ LAST_SIGNAL
+};
+
+static guint list_store_signals[LAST_SIGNAL] = { 0 };
+
static void gtk_list_store_init (GtkListStore *list_store);
static void gtk_list_store_class_init (GtkListStoreClass *class);
+static void gtk_list_store_tree_model_init (GtkTreeModelIface *iface);
static gint gtk_list_store_get_n_columns (GtkTreeModel *tree_model);
static GtkTreeNode gtk_list_store_get_node (GtkTreeModel *tree_model,
GtkTreePath *path);
GtkTreeNode node);
-static GtkTreeModelClass *parent_class = NULL;
-
-
GtkType
gtk_list_store_get_type (void)
{
(GInstanceInitFunc) gtk_list_store_init,
};
- list_store_type = g_type_register_static (GTK_TYPE_TREE_MODEL, "GtkListStore", &list_store_info);
+ static const GInterfaceInfo tree_model_info =
+ {
+ (GInterfaceInitFunc) gtk_list_store_tree_model_init,
+ NULL,
+ NULL
+ };
+
+ list_store_type = g_type_register_static (GTK_TYPE_OBJECT, "GtkListStore", &list_store_info);
+ g_type_add_interface_static (list_store_type,
+ GTK_TYPE_TREE_MODEL,
+ &tree_model_info);
}
return list_store_type;
gtk_list_store_class_init (GtkListStoreClass *class)
{
GtkObjectClass *object_class;
- GtkTreeModelClass *tree_model_class;
object_class = (GtkObjectClass*) class;
- tree_model_class = (GtkTreeModelClass *) class;
-
- parent_class = gtk_type_class (gtk_tree_model_get_type ());
-
- tree_model_class->get_n_columns = gtk_list_store_get_n_columns;
- tree_model_class->get_node = gtk_list_store_get_node;
- tree_model_class->get_path = gtk_list_store_get_path;
- tree_model_class->node_get_value = gtk_list_store_node_get_value;
- tree_model_class->node_next = gtk_list_store_node_next;
- tree_model_class->node_children = gtk_list_store_node_children;
- tree_model_class->node_has_child = gtk_list_store_node_has_child;
- tree_model_class->node_n_children = gtk_list_store_node_n_children;
- tree_model_class->node_nth_child = gtk_list_store_node_nth_child;
- tree_model_class->node_parent = gtk_list_store_node_parent;
+
+ list_store_signals[NODE_CHANGED] =
+ gtk_signal_new ("node_changed",
+ GTK_RUN_FIRST,
+ GTK_CLASS_TYPE (object_class),
+ GTK_SIGNAL_OFFSET (GtkListStoreClass, node_changed),
+ gtk_marshal_NONE__POINTER_POINTER,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_POINTER,
+ GTK_TYPE_POINTER);
+ list_store_signals[NODE_INSERTED] =
+ gtk_signal_new ("node_inserted",
+ GTK_RUN_FIRST,
+ GTK_CLASS_TYPE (object_class),
+ GTK_SIGNAL_OFFSET (GtkListStoreClass, node_inserted),
+ gtk_marshal_NONE__POINTER_POINTER,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_POINTER,
+ GTK_TYPE_POINTER);
+ list_store_signals[NODE_CHILD_TOGGLED] =
+ gtk_signal_new ("node_child_toggled",
+ GTK_RUN_FIRST,
+ GTK_CLASS_TYPE (object_class),
+ GTK_SIGNAL_OFFSET (GtkListStoreClass, node_child_toggled),
+ gtk_marshal_NONE__POINTER_POINTER,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_POINTER,
+ GTK_TYPE_POINTER);
+ list_store_signals[NODE_DELETED] =
+ gtk_signal_new ("node_deleted",
+ GTK_RUN_FIRST,
+ GTK_CLASS_TYPE (object_class),
+ GTK_SIGNAL_OFFSET (GtkListStoreClass, node_deleted),
+ gtk_marshal_NONE__POINTER,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_POINTER);
+
+
+ gtk_object_class_add_signals (object_class, list_store_signals, LAST_SIGNAL);
+}
+
+static void
+gtk_list_store_tree_model_init (GtkTreeModelIface *iface)
+{
+ iface->get_n_columns = gtk_list_store_get_n_columns;
+ iface->get_node = gtk_list_store_get_node;
+ iface->get_path = gtk_list_store_get_path;
+ iface->node_get_value = gtk_list_store_node_get_value;
+ iface->node_next = gtk_list_store_node_next;
+ iface->node_children = gtk_list_store_node_children;
+ iface->node_has_child = gtk_list_store_node_has_child;
+ iface->node_n_children = gtk_list_store_node_n_children;
+ iface->node_nth_child = gtk_list_store_node_nth_child;
+ iface->node_parent = gtk_list_store_node_parent;
}
static void