59 lines
1.4 KiB
Lua
59 lines
1.4 KiB
Lua
|
require("titlescreen.service.common")
|
||
|
|
||
|
---@class Page
|
||
|
local Page = {
|
||
|
title = "",
|
||
|
selectedIdx = 0,
|
||
|
fields = {}, ---@type Field[]
|
||
|
footer = PAGE_DEFAULT_FOOTER,
|
||
|
viewHandler = nil ---@type PageView
|
||
|
}
|
||
|
|
||
|
function Page:new(o, parent, title)
|
||
|
o = o or {}
|
||
|
setmetatable(o, self)
|
||
|
self.__index = self
|
||
|
self.parent = parent or nil
|
||
|
self.title = title or ""
|
||
|
return o
|
||
|
end
|
||
|
|
||
|
---Add field to page
|
||
|
---@param field Field
|
||
|
function Page:addField(field)
|
||
|
field.parent = self
|
||
|
table.insert(self.fields, field)
|
||
|
end
|
||
|
|
||
|
function Page:handleButtonInput(button)
|
||
|
if self.fields[selectedIndex] and self.fields[selectedIndex].handleButtonInput then
|
||
|
self.fields[selectedIndex].handleButtonInput(button)
|
||
|
else
|
||
|
HandlePageButtonInput(self, button)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Page:handleKnobInput(knob, delta)
|
||
|
if self.fields[selectedIndex] and self.fields[selectedIndex].handleKnobInput then
|
||
|
self.fields[selectedIndex].handleKnobInput(knob, delta)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Page:render(deltaTime)
|
||
|
--render page stuff
|
||
|
---background
|
||
|
---header
|
||
|
---footer
|
||
|
if self.fields[selectedIndex] and self.fields[selectedIndex].drawCustomFooter then
|
||
|
self.fields[selectedIndex].drawCustomFooter()
|
||
|
else
|
||
|
DrawPageFooter(self.footer)
|
||
|
end
|
||
|
|
||
|
--render children
|
||
|
for _, field in ipairs(self.fields) do
|
||
|
field.render(deltaTime)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return Page
|