summaryrefslogtreecommitdiff
path: root/tui/widget/list/scrolllist.ha
diff options
context:
space:
mode:
Diffstat (limited to 'tui/widget/list/scrolllist.ha')
-rw-r--r--tui/widget/list/scrolllist.ha39
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)!);
+};