Menu = Object:extend()

function Menu:new(x,y,w,h)
  self.x = x
  self.y = y
  self.w = w
  self.h = h
  self.listWidget = {}
  self.selected = 0
  self.selectedPrevious = 0

  self.destroyed = false
  self.focus = false
  self.cancel = 0
  self.virtualpad = vpad()
end

function Menu:setLastWidgetCancel()
  self.cancel = #self.listWidget
end

function Menu:cancelAction()
  if (self.cancel ~= 0) then
    self.listWidget[self.cancel]:action()
  end
end

function Menu:update(dt)
  -- Cette fonction ne contient rien par défaut
end

function Menu:empty()
  self.listWidget = {}
  self.cancel = 0
end

function Menu:resize(x,y,w,h)
  self.x = x
  self.y = y
  self.w = w
  self.h = h
end

function Menu:destroy()
  self.destroyed = true
end

function Menu:draw()
  -- Cette fonction ne contient rien par défaut
end

function Menu:keyreleased(key, code)
  -- Cette fonction ne contient rien par défaut
end

function Menu:mousemoved(x, y)
  -- Cette fonction ne contient rien par défaut
end

function Menu:mousepressed( x, y, button, istouch )
  -- Cette fonction ne contient rien par défaut
end

function Menu:addWidget(newwidget)
  if #self.listWidget == 0 then
    self.selected = 1
  end
  table.insert(self.listWidget, newwidget)
end

function Menu:updateWidgets(dt)
  self:clearWidgets()
  for i,v in ipairs(self.listWidget) do
    v.id = i
    v:update(dt)
  end
end

function Menu:clearWidgets() -- On retire les widgets marquées comme supprimées
  for i,v in ipairs(self.listWidget) do
    if (v.destroyed == true) then
      table.remove(self.listWidget, i)
    end
  end
end

function Menu:moveCursor(new_selected)
  if new_selected < 1 then
    self.selected = #self.listWidget + new_selected
  else
    if new_selected > #self.listWidget then
      self.selected = new_selected - #self.listWidget
    else
      self.selected = new_selected
    end
  end
end
