menuinput.lua 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. MenuInput = class()
  2. function MenuInput:init()
  3. self.inputs = {}
  4. self.focused = nil
  5. end
  6. function MenuInput:textinput(character)
  7. if self.focused then
  8. if character:match('%w') then self.inputs[self.focused].val = self.inputs[self.focused].val .. character end
  9. end
  10. end
  11. function MenuInput:keypressed(key)
  12. if key == 'backspace' and self.focused then
  13. self.inputs[self.focused].val = self.inputs[self.focused].val:sub(1, -2)
  14. elseif key == 'tab' then
  15. if not self.focused then
  16. self:focusInput(self.inputs[1])
  17. else
  18. local idx
  19. for i = 1, #self.inputs do
  20. if self.inputs[i] == self.focused then idx = i break end
  21. end
  22. self:focusInput(self.inputs[idx % #self.inputs + 1])
  23. end
  24. end
  25. end
  26. function MenuInput:clear()
  27. self.focused = nil
  28. table.clear(self.inputs)
  29. end
  30. function MenuInput:addInput(name, default)
  31. self.inputs[name] = {
  32. val = default,
  33. default = default
  34. }
  35. table.insert(self.inputs, name)
  36. end
  37. function MenuInput:val(name)
  38. return self.inputs[name].val
  39. end
  40. function MenuInput:focusInput(input)
  41. self:unfocus()
  42. self.focused = input
  43. if self.inputs[self.focused].default == self.inputs[self.focused].val then self.inputs[self.focused].val = '' end
  44. end
  45. function MenuInput:unfocus()
  46. if not self.focused then return end
  47. if self.inputs[self.focused].val == '' and self.inputs[self.focused].default then self.inputs[self.focused].val = self.inputs[self.focused].default end
  48. self.focused = nil
  49. end