2022-04-03 19:43:50 +02:00
|
|
|
require("common.class")
|
|
|
|
|
2022-04-03 01:35:41 +02:00
|
|
|
---@class Page
|
|
|
|
---@field content Field[]
|
|
|
|
---@field viewHandler nil|PageView
|
|
|
|
local Page = {
|
2022-04-03 19:43:50 +02:00
|
|
|
drawBackground = nil, ---@type nil|fun(deltaTime: number)
|
|
|
|
drawHeader = nil, ---@type nil|fun(deltaTime: number)
|
|
|
|
drawFooter = nil, ---@type nil|fun(deltaTime: number)
|
2022-04-03 01:35:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
---Create a new Page instance
|
|
|
|
---@param o? table
|
|
|
|
---@return Page
|
|
|
|
function Page:new(o)
|
2022-04-03 19:43:50 +02:00
|
|
|
o = Base(self, o)
|
2022-04-03 01:35:41 +02:00
|
|
|
|
|
|
|
--set instance members
|
|
|
|
|
|
|
|
o.content = o.content or {}
|
|
|
|
o.viewHandler = o.viewHandler or nil
|
|
|
|
|
|
|
|
return o
|
|
|
|
end
|
|
|
|
|
|
|
|
---Add field to page
|
|
|
|
---@param field Field
|
|
|
|
function Page:addField(field)
|
|
|
|
field.parent = self
|
|
|
|
table.insert(self.content, field)
|
|
|
|
end
|
|
|
|
|
2022-04-03 19:43:50 +02:00
|
|
|
---Refresh content values
|
|
|
|
function Page:refreshFields()
|
|
|
|
for _, field in ipairs(self.content) do
|
|
|
|
field.parent = self
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2022-04-03 01:35:41 +02:00
|
|
|
---Handle controller button input
|
|
|
|
---
|
|
|
|
---Overload this function to implement page-specific behaviour
|
|
|
|
---@param button integer
|
|
|
|
function Page:handleButtonInput(button)
|
|
|
|
if button == game.BUTTON_BCK then
|
|
|
|
if self.viewHandler then
|
|
|
|
self.viewHandler:back()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
---Handle controller knob input
|
|
|
|
---
|
|
|
|
---Overload this function to implement page-specific behaviour
|
|
|
|
---@param knob integer
|
|
|
|
---@param delta number
|
|
|
|
function Page:handleKnobInput(knob, delta) end
|
|
|
|
|
|
|
|
---Render page
|
|
|
|
---@param deltaTime number frametime in seconds
|
|
|
|
function Page:render(deltaTime)
|
|
|
|
---background
|
|
|
|
if self.drawBackground then
|
|
|
|
self:drawBackground(deltaTime)
|
|
|
|
end
|
|
|
|
|
|
|
|
--render children
|
|
|
|
for _, child in ipairs(self.content) do
|
|
|
|
child:render(deltaTime)
|
|
|
|
end
|
|
|
|
|
|
|
|
---header
|
|
|
|
if self.drawHeader then
|
|
|
|
self:drawHeader(deltaTime)
|
|
|
|
end
|
|
|
|
|
|
|
|
---footer
|
|
|
|
if self.drawFooter then
|
|
|
|
self:drawFooter(deltaTime)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
return Page
|