ExperimentalGear/scripts/api/page/pageview.lua

75 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 = {
__name = "PageView"
2022-04-05 23:53:19 +02:00
}
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
---@return PageView
function PageView.new()
local self = CreateInstance(PageView)
self.pageStack = {}
return self
end
---Get page from pageStack
---@param index? integer # defaults to 1 (top of the stack)
---@return Page
function PageView:get(index)
index = index or 1
return self.pageStack[index]
end
---Navigate to page
---@param page Page # page to put on top of the pageStack
function PageView:navigate(page)
page.viewHandler = self
pushStack(self.pageStack, page)
end
---Replace the current pageStack with a new root page
---@param rootPage Page
function PageView:replace(rootPage)
2022-04-24 01:38:28 +02:00
self:clear()
self:navigate(rootPage)
end
---Navigate to the previous page
function PageView:back()
if not self:get() then
game.Log(self .. ":back() : pageStack empty, cannot go back", game.LOGGER_WARNING)
return
end
self:get().viewHandler = nil
popStack(self.pageStack)
end
2022-04-24 01:38:28 +02:00
---Clear the pageStack
function PageView:clear()
--clear pageStack
while self:get() do
self:back()
end
end
---@param deltaTime number # frametime in seconds
function PageView:render(deltaTime)
if self:get() then
self:get():render(deltaTime)
end
end
2022-04-05 23:53:19 +02:00
return PageView