cc/listview.lua
Ben e414f229db
Refactor, add listview to requests view
Update line by line and do full redraw only when necessary.
2024-06-02 00:52:58 +02:00

62 lines
1.3 KiB
Lua

local backingList = {}
local paginationOffset = 1
local frame = term.current()
local drawLine = nil
local function setTerm(termlike)
frame = termlike
end
local function setDrawLineFunc(drawLineFunc)
drawLine = drawLineFunc
end
local function redrawLine(idx)
if drawLine then
local tw, th = frame.getSize()
if idx >= paginationOffset and idx-paginationOffset <= th then
frame.setCursorPos(1,idx-paginationOffset+1)
drawLine(frame, backingList[idx])
end
end
end
local function itemAt(idx)
return backingList[idx]
end
local function updateItemAt(idx, item)
backingList[idx] = item
redrawLine(idx)
end
local function redraw()
if drawLine then
local tw, th = frame.getSize()
local backingIdx = paginationOffset
for idx = 1, th, 1 do
if backingList[backingIdx] ~= nil then
frame.setCursorPos(idx)
drawLine(frame, backingList[backingIdx])
end
end
end
end
local function updatePage(newOffset)
if newOffset ~= paginationOffset then
paginationOffset = newOffset
redraw()
end
end
return {
setTerm=setTerm,
setDrawLineFunc=setDrawLineFunc,
itemAt=itemAt,
updateItemAt=updateItemAt,
redraw=redraw,
updatePage=updatePage,
}