summaryrefslogtreecommitdiff
path: root/desktop/treeview.h
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-07-25 16:06:34 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2013-07-25 16:06:34 +0100
commit4697d1ccc1d6190788b931352b1e3a931dd0a0f7 (patch)
treef862555e46115d1db360db9ad2e509784b9b5739 /desktop/treeview.h
parent17abee0045e51b72a1dda9de0c187c71c252fc56 (diff)
downloadnetsurf-4697d1ccc1d6190788b931352b1e3a931dd0a0f7.tar.gz
netsurf-4697d1ccc1d6190788b931352b1e3a931dd0a0f7.tar.bz2
Expose treeview walker.
Diffstat (limited to 'desktop/treeview.h')
-rw-r--r--desktop/treeview.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/desktop/treeview.h b/desktop/treeview.h
index 82a7af17f..ddd9be661 100644
--- a/desktop/treeview.h
+++ b/desktop/treeview.h
@@ -33,6 +33,12 @@
typedef struct treeview treeview;
typedef struct treeview_node treeview_node;
+enum treeview_node_type {
+ TREE_NODE_ROOT = (1 << 0),
+ TREE_NODE_FOLDER = (1 << 1),
+ TREE_NODE_ENTRY = (1 << 2)
+};
+
enum treeview_relationship {
TREE_REL_FIRST_CHILD,
TREE_REL_NEXT_SIBLING
@@ -208,6 +214,37 @@ nserror treeview_update_node_entry(treeview *tree,
const struct treeview_field_data fields[],
void *data);
+
+/**
+ * Client callback for treeview_walk
+ *
+ * \param ctx Client context
+ * \param node_data Client data for the current treeview node
+ * \param type The node type
+ * \param abort Set to true to abort treeview walk prematurely
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ */
+typedef nserror (*treeview_walk_callback)(void *ctx, void *node_data,
+ enum treeview_node_type type, bool *abort);
+
+/**
+ * Walk (depth first) a treeview subtree, calling a callback at each node of
+ * required type.
+ *
+ * \param tree Treeview object to walk
+ * \param root Root node to walk tree from (or NULL for tree root)
+ * \param walk_cb Function to call on each node
+ * \param ctx Client context, passed back to callback function
+ * \param type The node type(s) of interest
+ * \return NSERROR_OK on success, or appropriate error otherwise
+ *
+ * Note, if deleting returned node, walk_cb must terminate the treeview walk by
+ * setting abort to true.
+ */
+nserror treeview_walk(treeview *tree, treeview_node *root,
+ treeview_walk_callback walk_cb, void *ctx,
+ enum treeview_node_type type);
+
/**
* Delete a treeview node
*