require("common.globals") require("common.class") ---@class Page ---@field content Field[] ---@field viewHandler nil|PageView local Page = { __name = "Page", } ---Create a new Page instance ---@param params? Page # initial parameters ---@return Page function Page.new(params) params = params or {} --set default parameters params.content = params.content or {} params.viewHandler = params.viewHandler or nil return CreateInstance(Page, params) end ---Initialize Page function Page:init() self:onInit() 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 ---@param button integer # options are under the `game` table prefixed with `BUTTON` function Page:handleButtonInput(button) if button == game.BUTTON_BCK then if self.viewHandler then self.viewHandler:back() end end end ---@param knob integer # `0` = Left, `1` = Right ---@param delta number # in radians, `-2*pi` to `0` (turning CCW) and `0` to `2*pi` (turning CW) function Page:handleKnobInput(knob, delta) end ---@param x number ---@param y number ---@param button integer function Page:handleMouseInput(x, y, button) end function Page:onInit() end function Page:onInvalidation() end ---@param deltaTime number # frametime in seconds function Page:drawBackground(deltaTime) end ---@param deltaTime number # frametime in seconds function Page:drawContent(deltaTime) for _, child in ipairs(self.content) do child:render(deltaTime) end end ---@param deltaTime number # frametime in seconds function Page:drawForeground(deltaTime) end ---@param deltaTime number # frametime in seconds function Page:render(deltaTime) self:drawBackground(deltaTime) self:drawContent(deltaTime) self:drawForeground(deltaTime) end return Page