From e4dcccc409f7ef41de27175f5e7c00094598f529 Mon Sep 17 00:00:00 2001 From: nick black Date: Thu, 30 Jan 2020 19:54:20 -0500 Subject: [PATCH] selector: implement scrolling --- src/lib/selector.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/lib/selector.c b/src/lib/selector.c index 984f7503c..e313f1c67 100644 --- a/src/lib/selector.c +++ b/src/lib/selector.c @@ -62,7 +62,9 @@ ncselector_draw(ncselector* n){ if(printidx == n->selected){ ncplane_styles_off(n->ncp, CELL_STYLE_REVERSE); } - ++printidx; + if(++printidx == n->itemcount){ + printidx = 0; + } ++printed; } return notcurses_render(n->ncp->nc); @@ -203,6 +205,12 @@ char* ncselector_selected(const ncselector* n){ } void ncselector_previtem(ncselector* n, char** newitem){ +fprintf(stderr, "MAX: %u COUNT: %u SELECTED: %u START: %u\n", n->maxdisplay, n->itemcount, n->selected, n->startdisp); + if(n->selected == n->startdisp && n->maxdisplay && n->maxdisplay < n->itemcount){ + if(n->startdisp-- == 0){ + n->startdisp = n->itemcount - 1; + } + } if(n->selected == 0){ n->selected = n->itemcount; } @@ -215,6 +223,13 @@ void ncselector_previtem(ncselector* n, char** newitem){ void ncselector_nextitem(ncselector* n, char** newitem){ ++n->selected; + if(n->maxdisplay && n->maxdisplay < n->itemcount){ + if((n->startdisp + n->maxdisplay) % n->itemcount == (n->selected % n->itemcount)){ + if(++n->startdisp == n->itemcount){ + n->startdisp = 0; + } + } + } if(n->selected == n->itemcount){ n->selected = 0; }