ExperimentalGear/scripts/components/pager/pageview.lua

74 lines
1.5 KiB
Lua
Raw Normal View History

require("common.class")
---@class PageView
---@field pageStack Page[]
2022-04-05 23:53:19 +02:00
local PageView = {
__tostring = function () return "PageView" end
}
local function pushStack(t, o)
table.insert(t, 1, o)
end
local function popStack(t)
return table.remove(t, 1)
end
---Create a new PageView instance
---@param rootPage Page
---@return PageView
function PageView:new(rootPage)
local o = Base(self)
--set viewHandler as this instance for rootPage
rootPage.viewHandler = o
--set instance members
o.pageStack = {}
pushStack(o.pageStack, rootPage)
return o
end
---Navigate to page
---@param page Page
function PageView:navigate(page)
page.viewHandler = self
pushStack(self.pageStack, page)
end
---Replace the current pageStack with a new root page
---@param page Page
function PageView:replace(page)
--clear pageStack
while self.pageStack[1] do
self:back()
end
self:navigate(page)
end
---Navigate to the previous page
function PageView:back()
if not self.pageStack[1] then
game.Log("PageView:back() : pageStack empty, cannot go back", game.LOGGER_WARNING)
return
end
self.pageStack[1].viewHandler = nil
popStack(self.pageStack)
end
function PageView:render(deltaTime)
if not self.pageStack[1] then
-- pageStack empty, cannot render, but do not error out, also do not log every frame
return
else
self.pageStack[1]:render(deltaTime)
end
end
2022-04-05 23:53:19 +02:00
return PageView