[libdazzle] treebuilder: add node-expanded and node-collapsed
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdazzle] treebuilder: add node-expanded and node-collapsed
- Date: Wed, 29 Nov 2017 11:43:13 +0000 (UTC)
commit 634d1057d4156605a4af332fe1b6f9bdeeca6233
Author: Christian Hergert <chergert redhat com>
Date: Wed Nov 29 03:39:10 2017 -0800
treebuilder: add node-expanded and node-collapsed
This allows for builders to track the expand/collapse of nodes.
This can be useful to track external data.
We might want to do this for indirect nodes as well, but that
gets tricky in that we probably want to only do so when the
node is getting removed from rebuild-on-collapse.
src/tree/dzl-tree-builder.c | 50 +++++++++++++++++++++++++++++++++++++++++++
src/tree/dzl-tree-builder.h | 6 +++++
src/tree/dzl-tree-private.h | 4 +++
src/tree/dzl-tree.c | 15 +++++++++++++
4 files changed, 75 insertions(+), 0 deletions(-)
---
diff --git a/src/tree/dzl-tree-builder.c b/src/tree/dzl-tree-builder.c
index 457c076..dd8d6d0 100644
--- a/src/tree/dzl-tree-builder.c
+++ b/src/tree/dzl-tree-builder.c
@@ -41,6 +41,8 @@ enum {
REMOVED,
BUILD_NODE,
NODE_ACTIVATED,
+ NODE_COLLAPSED,
+ NODE_EXPANDED,
NODE_POPUP,
NODE_SELECTED,
NODE_UNSELECTED,
@@ -127,6 +129,26 @@ _dzl_tree_builder_removed (DzlTreeBuilder *builder,
}
void
+_dzl_tree_builder_node_collapsed (DzlTreeBuilder *builder,
+ DzlTreeNode *node)
+{
+ g_return_if_fail (DZL_IS_TREE_BUILDER (builder));
+ g_return_if_fail (DZL_IS_TREE_NODE (node));
+
+ g_signal_emit (builder, signals [NODE_COLLAPSED], 0, node);
+}
+
+void
+_dzl_tree_builder_node_expanded (DzlTreeBuilder *builder,
+ DzlTreeNode *node)
+{
+ g_return_if_fail (DZL_IS_TREE_BUILDER (builder));
+ g_return_if_fail (DZL_IS_TREE_NODE (node));
+
+ g_signal_emit (builder, signals [NODE_EXPANDED], 0, node);
+}
+
+void
_dzl_tree_builder_set_tree (DzlTreeBuilder *builder,
DzlTree *tree)
{
@@ -262,6 +284,34 @@ dzl_tree_builder_class_init (DzlTreeBuilderClass *klass)
1,
DZL_TYPE_TREE_NODE);
+ signals [NODE_COLLAPSED] =
+ g_signal_new ("node-collapsed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, node_collapsed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1,
+ DZL_TYPE_TREE_NODE);
+ g_signal_set_va_marshaller (signals [NODE_COLLAPSED],
+ G_TYPE_FROM_CLASS (klass),
+ g_cclosure_marshal_VOID__OBJECTv);
+
+ signals [NODE_EXPANDED] =
+ g_signal_new ("node-expanded",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (DzlTreeBuilderClass, node_expanded),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1,
+ DZL_TYPE_TREE_NODE);
+ g_signal_set_va_marshaller (signals [NODE_EXPANDED],
+ G_TYPE_FROM_CLASS (klass),
+ g_cclosure_marshal_VOID__OBJECTv);
+
signals [NODE_POPUP] =
g_signal_new ("node-popup",
G_TYPE_FROM_CLASS (klass),
diff --git a/src/tree/dzl-tree-builder.h b/src/tree/dzl-tree-builder.h
index 554af2c..7f3e821 100644
--- a/src/tree/dzl-tree-builder.h
+++ b/src/tree/dzl-tree-builder.h
@@ -47,6 +47,12 @@ struct _DzlTreeBuilderClass
void (*node_popup) (DzlTreeBuilder *builder,
DzlTreeNode *node,
GMenu *menu);
+ void (*node_expanded) (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
+ void (*node_collapsed) (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
+
+ gpointer padding[12];
};
DZL_AVAILABLE_IN_ALL
diff --git a/src/tree/dzl-tree-private.h b/src/tree/dzl-tree-private.h
index 22ce170..ff8928a 100644
--- a/src/tree/dzl-tree-private.h
+++ b/src/tree/dzl-tree-private.h
@@ -75,6 +75,10 @@ void _dzl_tree_builder_node_selected (DzlTreeBuilder *builder,
DzlTreeNode *node);
void _dzl_tree_builder_node_unselected (DzlTreeBuilder *builder,
DzlTreeNode *node);
+void _dzl_tree_builder_node_collapsed (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
+void _dzl_tree_builder_node_expanded (DzlTreeBuilder *builder,
+ DzlTreeNode *node);
G_END_DECLS
diff --git a/src/tree/dzl-tree.c b/src/tree/dzl-tree.c
index 711bf5e..596e172 100644
--- a/src/tree/dzl-tree.c
+++ b/src/tree/dzl-tree.c
@@ -594,6 +594,7 @@ dzl_tree_row_expanded (GtkTreeView *tree_view,
GtkTreePath *path)
{
DzlTree *self = (DzlTree *)tree_view;
+ DzlTreePrivate *priv = dzl_tree_get_instance_private (self);
GtkTreeModel *model;
DzlTreeNode *node;
@@ -616,6 +617,13 @@ dzl_tree_row_expanded (GtkTreeView *tree_view,
dzl_tree_node_select (node);
}
+ /* Notify builders of expand */
+ for (guint i = 0; i < priv->builders->len; i++)
+ {
+ DzlTreeBuilder *builder = g_ptr_array_index (priv->builders, i);
+ _dzl_tree_builder_node_expanded (builder, node);
+ }
+
g_clear_object (&node);
}
@@ -664,6 +672,13 @@ dzl_tree_row_collapsed (GtkTreeView *tree_view,
_dzl_tree_node_set_needs_build (node, TRUE);
}
+ /* Notify builders of collapse */
+ for (guint i = 0; i < priv->builders->len; i++)
+ {
+ DzlTreeBuilder *builder = g_ptr_array_index (priv->builders, i);
+ _dzl_tree_builder_node_collapsed (builder, node);
+ }
+
g_clear_object (&node);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]