require("common.class") ---@class Page ---@field content Field[] ---@field viewHandler nil|PageView local Page = { drawBackground = nil, ---@type nil|fun(deltaTime: number) drawHeader = nil, ---@type nil|fun(deltaTime: number) drawFooter = nil, ---@type nil|fun(deltaTime: number) } ---Create a new Page instance ---@param o? table ---@return Page function Page:new(o) o = Base(self, o) --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 ---Refresh content values function Page:refreshFields() for _, field in ipairs(self.content) do field.parent = self end end ---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