Provided by: libnotcurses-core-dev_3.0.7+dfsg.1-1ubuntu4_amd64 bug

NAME

       notcurses_tree - high-level hierarchical line-based data

SYNOPSIS

       #include <notcurses/notcurses.h>

              struct nctree;
              struct ncplane;

              typedef struct nctree_item {
                void* curry;
                struct nctree_item* subs;
                unsigned subcount;
              } nctree_item;

              typedef struct nctree_options {
                const nctree_item* items; // top-level nctree_item array
                unsigned count;           // size of |items|
                int (*nctreecb)(struct ncplane*, void*, int); // item callback
                int indentcols;           // columns to indent per hierarchy
                uint64_t flags;           // bitfield of NCTREE_OPTION_*
              } nctree_options;

       struct nctree* nctree_create(struct ncplane* n, const nctree_options* opts);

       struct ncplane* nctree_plane(struct nctree* n);

       int nctree_redraw(struct nctree* n);

       bool nctree_offer_input(struct nctree* n, const ncinput* ni);

       void* nctree_focused(struct nctree* n);

       void* nctree_next(struct nctree* n);

       void* nctree_prev(struct nctree* n);

       void* nctree_goto(struct nctree* n, const int* path, int* failpath);

       int nctree_add(struct nctree* n, const unsigned* path, const nctree_item* add);

       int nctree_del(struct nctree* n, const unsigned* path);

       void nctree_destroy(struct nctree* n);

DESCRIPTION

       nctrees  organize  hierarchical  items,  and allow them to be browsed.  Each item can have
       arbitrary subitems.  Items can be collapsed and expanded.  The display supports  scrolling
       and searching.

       An  nctree  cannot  be  empty.   count  must be non-zero, and items must not be NULL.  The
       callback function nctreecb must also be non-NULL.

       The callback function nctreecb is called on tree items when the tree is redrawn.  It  will
       be  called  on  each  visible  item, and any item which has become hidden.  If the item is
       newly hidden, the ncplane argument will be NULL.   If  the  item  is  newly  visible,  the
       ncplane  argument  will  be  an empty plane.  If the item was already visible, the ncplane
       argument will be the same plane passed before.  If the item has not changed since the last
       time  the callback was invoked, there is no need to change the plane, and the callback can
       return immediately.  Otherwise, the plane ought be drawn by the callback.  Any unused rows
       ought  be trimmed away using ncplane_resize.  If the plane is expanded in the callback, it
       will be shrunk back down by the widget.  The int parameter  indicates  distance  from  the
       focused  item.   If  the  parameter  is  negative,  the item is before the focused item; a
       positive parameter implies that the item follows the focused item; the focused item itself
       is passed zero.

       nctree_goto, nctree_add, and nctree_del all use the concept of a path.  A path is an array
       of unsigned values, terminated by UINT_MAX, with each successive value indexing  into  the
       hierarchy  thus  far.  The root node of the nctree thus always has a 2-element path of [0,
       UINT_MAX].

RETURN VALUES

       nctree_create returns NULL for invalid options.  This includes a NULL  items  or  nctreecb
       field, or a zero count field.

       nctree_next  and  nctree_prev  both  return the curry pointer from the newly-focused item.
       nctree_focused returns the curry pointer from the already-focused item.

       nctree_goto returns the curry pointer from the newly-focused item.  If  path  is  invalid,
       the  first  invalid hierarchy level is written to failpath, and NULL is returned.  If path
       is valid, the value -1 is written to failpath.  Since it is possible for a  curry  pointer
       to be NULL, one should check failpath before assuming the operation failed.

       nctree_add and nctree_del both return -1 for an invalid path, and 0 otherwise.

NOTES

       nctree  shares  many  properties  with notcurses_reel.  Unlike the latter, nctrees support
       arbitrary hierarchical levels.

       nctree used to only handle static data,  but  nctree_add  and  nctree_del  were  added  in
       Notcurses 3.0.1.

SEE ALSO

       notcurses(3), notcurses_input(3), notcurses_plane(3), notcurses_reel(3)

AUTHORS

       nick black <nickblack@linux.com>.

                                              v3.0.7                            notcurses_tree(3)