[libdazzle] tree-node: add child helpers
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] tree-node: add child helpers
- Date: Wed, 6 Dec 2017 00:13:25 +0000 (UTC)
commit c0d0b3045cb5676dff81d23247615a86da3a6a4b
Author: Christian Hergert <chergert redhat com>
Date: Tue Dec 5 16:10:58 2017 -0800
tree-node: add child helpers
This adds a dzl_tree_node_n_children() helper to get the number of children
for a node. It must have already been built to query this value.
It also adds dzl_tree_node_nth_child() which will get the @nth child of a
node and also requires the node have been built (although not the children
of the node).
src/tree/dzl-tree-node.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++
src/tree/dzl-tree-node.h | 5 ++++
2 files changed, 63 insertions(+), 0 deletions(-)
---
diff --git a/src/tree/dzl-tree-node.c b/src/tree/dzl-tree-node.c
index 1e1e6f9..04b0a4e 100644
--- a/src/tree/dzl-tree-node.c
+++ b/src/tree/dzl-tree-node.c
@@ -1236,3 +1236,61 @@ dzl_tree_node_set_reset_on_collapse (DzlTreeNode *self,
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_RESET_ON_COLLAPSE]);
}
}
+
+guint
+dzl_tree_node_n_children (DzlTreeNode *self)
+{
+ g_return_val_if_fail (DZL_IS_TREE_NODE (self), 0);
+
+ if (!self->needs_build && self->tree != NULL)
+ {
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ model = GTK_TREE_MODEL (_dzl_tree_get_store (self->tree));
+
+ if (dzl_tree_node_get_iter (self, &iter))
+ return gtk_tree_model_iter_n_children (model, &iter);
+ }
+
+ return 0;
+}
+
+/**
+ * dzl_tree_node_nth_child:
+ * @self: a #DzlTreeNode
+ * @nth: the index of the child
+ *
+ * Gets the @nth child of @self or %NULL if it does not exist.
+ *
+ * Returns: (transfer full) (nullable): a #DzlTreeNode or %NULL
+ */
+DzlTreeNode *
+dzl_tree_node_nth_child (DzlTreeNode *self,
+ guint nth)
+{
+ g_return_val_if_fail (DZL_IS_TREE_NODE (self), NULL);
+ g_return_val_if_fail (!self->needs_build, NULL);
+
+ if (self->tree != NULL)
+ {
+ GtkTreeIter parent;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ model = GTK_TREE_MODEL (_dzl_tree_get_store (self->tree));
+
+ if (dzl_tree_node_get_iter (self, &parent) &&
+ gtk_tree_model_iter_nth_child (model, &iter, &parent, nth))
+ {
+ g_autoptr(DzlTreeNode) node = NULL;
+
+ gtk_tree_model_get (model, &iter, 0, &node, -1);
+ g_assert (DZL_IS_TREE_NODE (node));
+
+ return g_steal_pointer (&node);
+ }
+ }
+
+ return NULL;
+}
diff --git a/src/tree/dzl-tree-node.h b/src/tree/dzl-tree-node.h
index ae654ae..096b12c 100644
--- a/src/tree/dzl-tree-node.h
+++ b/src/tree/dzl-tree-node.h
@@ -48,6 +48,11 @@ GtkTreePath *dzl_tree_node_get_path (DzlTreeNode *nod
DZL_AVAILABLE_IN_ALL
gboolean dzl_tree_node_get_iter (DzlTreeNode *node,
GtkTreeIter *iter);
+DZL_AVAILABLE_IN_3_28
+guint dzl_tree_node_n_children (DzlTreeNode *self);
+DZL_AVAILABLE_IN_3_28
+DzlTreeNode *dzl_tree_node_nth_child (DzlTreeNode *self,
+ guint nth);
DZL_AVAILABLE_IN_ALL
void dzl_tree_node_prepend (DzlTreeNode *node,
DzlTreeNode *child);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]