From 4fd1f4935c2baeb0214772ad3f82430bd1bee56e Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Sun, 28 Jul 2024 23:02:15 +0200 Subject: [PATCH] feat: start work on makeing filelist_view scrollable --- src/tui/filelist_view.zig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/tui/filelist_view.zig b/src/tui/filelist_view.zig index 4ca0a54..87c8462 100644 --- a/src/tui/filelist_view.zig +++ b/src/tui/filelist_view.zig @@ -34,7 +34,7 @@ commands: Commands = undefined, items: usize = 0, view_pos: usize = 0, -total_items: usize = 0, +view_rows: usize = 0, entries: std.ArrayList(Entry) = undefined, const Entry = struct { @@ -73,6 +73,8 @@ pub fn handle_resize(self: *Self, pos: Widget.Box) void { self.plane.move_yx(@intCast(pos.y), @intCast(pos.x)) catch return; self.plane.resize_simple(@intCast(pos.h), @intCast(pos.w)) catch return; self.menu.resize(pos); + self.view_rows = pos.h; + self.update_scrollbar(); } pub fn walk(self: *Self, walk_ctx: *anyopaque, f: Widget.WalkFn, w: *Widget) bool { @@ -91,6 +93,7 @@ pub fn add_item(self: *Self, entry_: Entry) !void { cbor.writeValue(writer, idx) catch return; self.menu.add_item_with_handler(label.items, handle_menu_action) catch return; self.menu.resize(Widget.Box.from(self.plane)); + self.update_scrollbar(); } pub fn reset(self: *Self) void { @@ -146,6 +149,10 @@ fn handle_scroll(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!void { _ = try m.match(.{ "scroll_to", tp.extract(&self.view_pos) }); } +fn update_scrollbar(self: *Self) void { + self.menu.scrollbar.?.set(@intCast(self.entries.items.len), @intCast(self.view_rows), @intCast(self.view_pos)); +} + fn handle_menu_action(menu: **Menu.State(*Self), button: *Button.State(*Menu.State(*Self))) void { const self = menu.*.opts.ctx; var idx: usize = undefined;