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

FreeBSD Manual Pages

  
 
  

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 da-
       ta, intended to make effective use of the display area while supporting
       keyboards, mice,	and haptic interfaces.	A series of nctablets are  or-
       dered  on  a  virtual cylinder; the tablets can grow and	shrink freely.
       Moving among the	tablets	"spins"	the cylinder.  ncreels support option-
       al 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	 refreshed.   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 reflect 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_re-
       draw.   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 in-
       voked  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 fo-
       cused 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 mean-
       ingful 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 return).  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_redraw.	Doing so means changes can be batched up without a re-
       draw, 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.8		     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+14.3.quarterly>

home | help