From 4eeda7244acbc97c2937ecb6768309539e28e35a Mon Sep 17 00:00:00 2001 From: Julian Hurst Date: Wed, 12 Mar 2025 10:16:02 +0100 Subject: list: Handle size properly --- .gitignore | 1 + cmd/list.ha | 1 + cmd/list_strictsz.ha | 19 +++++++++++++++++++ tui/widget/list/list.ha | 13 ++++++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 cmd/list_strictsz.ha diff --git a/.gitignore b/.gitignore index 48d880d..7b990ab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /text /list +/list_strictsz diff --git a/cmd/list.ha b/cmd/list.ha index 9a86d23..8729dd9 100644 --- a/cmd/list.ha +++ b/cmd/list.ha @@ -2,6 +2,7 @@ use tui; use tui::layout; use tui::widget; use tui::widget::list; +use unix::tty; use io; use fmt; use time; diff --git a/cmd/list_strictsz.ha b/cmd/list_strictsz.ha new file mode 100644 index 0000000..1a7ea1c --- /dev/null +++ b/cmd/list_strictsz.ha @@ -0,0 +1,19 @@ +use tui; +use tui::layout; +use tui::widget; +use tui::widget::list; +use unix::tty; +use io; +use fmt; +use time; + +export fn main() void = { + const out = tui::init()!; + defer io::close(out)!; + let li = list::newlist(out, (1, 1), tty::ttysize { + rows = 2, + columns = 2, + }, "hello", "world")!; + let l = layout::newvlayout(&li); + l.layout.print(&l); +}; diff --git a/tui/widget/list/list.ha b/tui/widget/list/list.ha index a4ec77e..7e60299 100644 --- a/tui/widget/list/list.ha +++ b/tui/widget/list/list.ha @@ -52,7 +52,18 @@ export fn printlist(widget: *widget::widget) void = { const list = widget: *list; let st = memio::dynamic(); defer io::close(&st)!; - memio::concat(&st, strings::join("\n", list.items[list.frame.start..list.frame.end]...))!; + 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.frame.end - 1) { + memio::concat(&st, "\n")!; + }; + }; widget::print(list.widget.out, memio::string(&st)!, (1, 1)); }; -- cgit v1.2.3