diff options
Diffstat (limited to 'tui/widget/list/scrolllist.ha')
| -rw-r--r-- | tui/widget/list/scrolllist.ha | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/tui/widget/list/scrolllist.ha b/tui/widget/list/scrolllist.ha index 55cee9a..5057116 100644 --- a/tui/widget/list/scrolllist.ha +++ b/tui/widget/list/scrolllist.ha @@ -53,28 +53,10 @@ style: (*widget::style | void), items: str...) (scrolllist | tty::error) = { fn printscrolllist(widget: *widget::widget) void = { const list = widget: *scrolllist; - let st = memio::dynamic(); - defer io::close(&st)!; - for (let i = list.frame.start; i < list.frame.end; i += 1) { - //let item = match (list.widget.sz) { - //case let sz: tty::ttysize => - // yield strings::sub(list.items[i], 0z, sz.columns); - //case widget::nosize => - // yield list.items[i]; - //}; - //memio::concat(&st, item)!; - if (i == list.cursor) { - memio::concat(&st, "\x1B[7m")!; - }; - memio::concat(&st, list.items[i])!; - if (i == list.cursor) { - memio::concat(&st, "\x1B[27m")!; - }; - if (i != list.frame.end - 1) { - memio::concat(&st, widget::NEWLINE)!; - }; + list.widget.buf = widget::linesbuf { + lines = list.items[list.frame.start..list.frame.end], + styles = &stylesscrolllist, }; - list.widget.buf = memio::string(&st)!; widget::print(list); }; @@ -131,3 +113,18 @@ export fn bottom(li: *scrolllist) void = { li.frame.end = len(li.items): u16; li.frame.start = len(li.items): u16 - sz; }; + +fn stylesscrolllist(widget: *widget::widget, txt: str, idx: size) str = { + const list = widget: *scrolllist; + const idx = idx + list.frame.start; + let st = memio::dynamic(); + defer io::close(&st)!; + if (idx == list.cursor) { + memio::concat(&st, "\x1B[7m")!; + }; + memio::concat(&st, txt)!; + if (idx == list.cursor) { + memio::concat(&st, "\x1B[27m")!; + }; + return strings::dup(memio::string(&st)!); +}; |
