diff --git a/doc/man/man3/notcurses_multiselector.3.md b/doc/man/man3/notcurses_multiselector.3.md index d20123103..67430edea 100644 --- a/doc/man/man3/notcurses_multiselector.3.md +++ b/doc/man/man3/notcurses_multiselector.3.md @@ -44,6 +44,8 @@ typedef struct multiselector_options { **struct ncmultiselector* ncmultiselector_create(struct ncplane* n, int y, int x, const multiselector_options* opts);** +**int ncselector_selected(bool* selected, unsigned n);** + **struct ncplane* ncmultiselector_plane(struct ncmultiselector* n);** **bool ncmultiselector_offer_input(struct ncmultiselector* n, const struct ncinput* nc);** diff --git a/include/notcurses/notcurses.h b/include/notcurses/notcurses.h index 6b2cdc6c7..ef1c4fd66 100644 --- a/include/notcurses/notcurses.h +++ b/include/notcurses/notcurses.h @@ -2325,6 +2325,10 @@ struct ncmultiselector; API struct ncmultiselector* ncmultiselector_create(struct ncplane* n, int y, int x, const multiselector_options* opts); +// Return selected vector. An array of bools must be provided, along with its +// length. If that length doesn't match the itemcount, it is an error. +API int ncmultiselector_selected(struct ncmultiselector* n, bool* selected, unsigned count); + // Return a reference to the ncmultiselector's underlying ncplane. API struct ncplane* ncmultiselector_plane(struct ncmultiselector* n); diff --git a/python/src/notcurses/build_notcurses.py b/python/src/notcurses/build_notcurses.py index 2c8129b8f..384c7de66 100644 --- a/python/src/notcurses/build_notcurses.py +++ b/python/src/notcurses/build_notcurses.py @@ -322,6 +322,7 @@ typedef struct multiselector_options { uint64_t bgchannels; // background channels, used only in body } multiselector_options; struct ncmultiselector* ncmultiselector_create(struct ncplane* n, int y, int x, const multiselector_options* opts); +int ncselector_selected(bool* selected, unsigned n); struct ncplane* ncmultiselector_plane(struct ncmultiselector* n); bool ncmultiselector_offer_input(struct ncmultiselector* n, const struct ncinput* nc); void ncmultiselector_destroy(struct ncmultiselector* n, char** item); diff --git a/src/lib/selector.c b/src/lib/selector.c index 7c4a2dfc0..37c3ac802 100644 --- a/src/lib/selector.c +++ b/src/lib/selector.c @@ -745,3 +745,13 @@ void ncmultiselector_destroy(ncmultiselector* n, char** item){ free(n); } } + +int ncmultiselector_selected(ncmultiselector* n, bool* selected, unsigned count){ + if(n->itemcount != count || n->itemcount < 1){ + return -1; + } + while(--count){ + selected[count] = n->items[count].selected; + } + return 0; +}