Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
notcurses_reel(3)					       notcurses_reel(3)

NAME
     notcurses_reel - high-level widget for hierarchical data

SYNOPSIS
     #include <notcurses/notcurses.h>

	    #define NCREEL_OPTION_INFINITESCROLL 0x0001
	    #define NCREEL_OPTION_CIRCULAR	 0x0002

	    struct ncreel;
	    struct ncplane;
	    struct nctablet;

	    typedef struct ncreel_options {
	      // notcurses can draw a border around the ncreel, and also
	      // around the component tablets. inhibit borders by setting all
	      // valid bits in the masks. partially inhibit borders by setting
	      // individual bits in the masks. the appropriate attr and pair
	      // values will be used to style the borders. focused and
	      // non-focused tablets can have different styles. you can instead
	      // draw your own borders, or forgo borders entirely.
	      unsigned bordermask; // bitfield; 1s will not be drawn
	      uint64_t borderchan; // attributes used for ncreel border
	      unsigned tabletmask; // bitfield for tablet borders
	      uint64_t tabletchan; // tablet border styling channel
	      uint64_t focusedchan;// focused tablet border styling channel
	      uint64_t flags;	   // bitfield over NCREEL_OPTION_*
	    } ncreel_options;

     struct  ncreel*  ncreel_create(struct  ncplane*  nc,  const ncreel_options*
     popts);

     struct ncplane* ncreel_plane(struct ncreel* nr);

     typedef int (tabletcb)(struct nctablet t, bool cliptop);

     struct nctablet* ncreel_add(struct  ncreel*  nr,  struct  nctablet*  after,
     struct nctablet* before, tabletcb cb, void* opaque);

     int ncreel_tabletcount(const struct ncreel* nr);

     int ncreel_del(struct ncreel* nr, struct nctablet* t);

     int ncreel_redraw(struct ncreel* nr);

     struct nctablet* ncreel_focused(struct ncreel* nr);

     struct nctablet* ncreel_next(struct ncreel* nr);

     struct nctablet* ncreel_prev(struct ncreel* nr);

     bool ncreel_offer_input(struct ncreel* nr, const ncinput* ni);

     void ncreel_destroy(struct ncreel* nr);

     void* nctablet_userptr(struct nctablet* t);

     struct ncplane* nctablet_plane(struct nctablet* t);

DESCRIPTION
     An  ncreel  is  a widget for display and manipulation of hierarchical data,
     intended to make effective use of the display area  while	supporting  key-
     boards,  mice, and haptic interfaces.  A series of nctablets are ordered on
     a virtual cylinder; the tablets can grow and shrink freely.   Moving  among
     the  tablets "spins" the cylinder.  ncreels support optional borders around
     the reel and/or tablets.

     ncreel_redraw arranges the tablets, invoking the tabletcb defined by  each.
     It will invoke the callbacks of only those tablets currently visible.  This
     function  ought  be  called  whenever  the data within a tablet need be re-
     freshed.  The return value of this callback is the number	of  lines  drawn
     into  the	ncplane.  The tablet will be grown or shrunk as necessary to re-
     flect this return value.

     Unless the reel is devoid of tablets, there is always  a  "focused"  tablet
     (the  first  tablet  added  to an empty reel becomes focused).  The focused
     tablet can change via ncreel_next and ncreel_prev.  If ncreel_del is called
     on the focused tablet, and at least one other tablet remains,  some  tablet
     receives the focus.

     Calling   functions   which   change   the   reel,  including  ncreel_next,
     ncreel_prev, ncreel_del, and ncreel_add,  implicitly  calls  ncreel_redraw.
     This behavior must not be relied upon, as it is likely to go away.

   LAYOUT
     When  the	user  invokes ncreel_redraw, Notcurses can't assume it knows the
     size of any tablets--one or more might have changed since	the  last  draw.
     Only  after  a callback does ncreel_redraw know how many rows a tablet will
     occupy.

     A redraw operation starts with the focused tablet.  Its callback is invoked
     with a plane as large as the reel, i.e.  the focused tablet can occupy  the
     entire  reel,  to	the  exclusion of any other tablets.  The focused tablet
     will be kept where it was, if possible; growth  might  force  it  to  move.
     There  is	now one tablet locked into place, and zero, one, or two areas of
     empty space.  Tablets are successively lain out in these spaces  until  the
     reel is filled.

     In general, if the reel is not full, tablets will be drawn towards the top,
     but this ought not be relied on.

   THE TABLET CALLBACK
     The  tablet  callback  (of  type  tabletcb) is called with an ncplane and a
     bool.  The callback function ought not rely on the absolute position of the
     plane, as it might be moved.  The bool indicates whether the plane ought be
     filled in from the bottom, or from the top (this is only meaningful if  the
     plane  is insufficiently large to contain all the tablet's available data).
     The callback ought not resize the plane (it will be resized  following  re-
     turn).   The  callback must return the number of rows used (it is perfectly
     valid to use zero rows), or a negative number if there was an error.

     Returning more rows than the plane has available is an error.

RETURN VALUES
     ncreel_focused, ncreel_prev, and ncreel_next all return the focused tablet,
     unless no tablets exist, in which case they return NULL.

     ncreel_add returns the newly-added nctablet.

BUGS
     I can't decide whether to require the user to  explicitly	call  ncreel_re-
     draw.   Doing  so	means changes can be batched up without a redraw, but it
     also makes things more complicated for both me and the user.

SEE ALSO
     notcurses(3), notcurses_input(3), notcurses_plane(3)

AUTHORS
     nick black nickblack@linux.com

				     v3.0.16		       notcurses_reel(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=notcurses_reel&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help