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