From 212026861fc9fb80455df21f14ed5a641465bd50 Mon Sep 17 00:00:00 2001 From: Robob27 Date: Tue, 14 Feb 2023 20:33:33 -0500 Subject: [PATCH] WIP list fix --- library/lua/gui/widgets.lua | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/library/lua/gui/widgets.lua b/library/lua/gui/widgets.lua index ffe26936d..9343be548 100644 --- a/library/lua/gui/widgets.lua +++ b/library/lua/gui/widgets.lua @@ -1611,6 +1611,15 @@ function List:setChoices(choices, selected) end self:setSelected(selected) + + -- Check if page_top needs to be adjusted + if #self.choices - self.page_size < 0 then + self.page_top = 1 + elseif self.selected <= math.floor(self.page_size / 2) then + self.page_top = 1 + elseif self.selected >= #self.choices - math.floor(self.page_size / 2) then + self.page_top = #self.choices - self.page_size + 1 + end end function List:setSelected(selected) @@ -1651,10 +1660,26 @@ local function update_list_scrollbar(list) end function List:postComputeFrame(body) - self.page_size = math.max(1, math.floor(body.height / self.row_height)) - if #self.choices - self.page_size < 0 then + local row_count = math.floor(body.height / self.row_height) + self.page_size = math.max(1, row_count) + + local num_choices = #self.choices + if num_choices == 0 then self.page_top = 1 + update_list_scrollbar(self) + return end + + local max_page_top = math.max(1, num_choices - row_count + 1) + + if self.selected > num_choices - row_count then + self.page_top = max_page_top + elseif self.selected < self.page_top then + self.page_top = self.selected + else + self.page_top = math.max(1, self.selected - row_count + 1) + end + update_list_scrollbar(self) end