keyboard_screen.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import pygame
  2. from .base_screen import BaseScreen
  3. from ..graphic_utils import ScreenObjectsManager, TouchAndTextItem
  4. from ..input import InputManager
  5. class Keyboard(BaseScreen):
  6. def __init__(self, size, base_size, manager, fonts, listener):
  7. BaseScreen.__init__(self, size, base_size, manager, fonts)
  8. self.base_width = size[0]/10
  9. self.base_height = size[1]/5
  10. self.listener = listener
  11. self.manager = manager
  12. try:
  13. self.font is None
  14. except AttributeError:
  15. self.font = pygame.font.SysFont("arial", size[1]/6)
  16. self.keyboards = [ScreenObjectsManager(), ScreenObjectsManager()]
  17. self.other_objects = ScreenObjectsManager()
  18. self.current_keyboard = 0
  19. rows = [['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],
  20. ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', '-'],
  21. [',', 'z', 'x', 'c', 'v', 'b', 'n', 'm', '.', '_']]
  22. line = self.base_height
  23. for row in rows:
  24. pos = 0
  25. for key in row:
  26. button = \
  27. TouchAndTextItem(self.font, key,
  28. (pos, line),
  29. (self.base_width, self.base_height),
  30. center=True, background=(150, 150, 150))
  31. self.keyboards[self.current_keyboard].\
  32. set_touch_object(key, button)
  33. pos += self.base_width
  34. line += self.base_height
  35. self.current_keyboard = 1
  36. rows = [['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
  37. ['!', '@', '#', '$', '%', '&', '/', '(', ')', '='],
  38. ['?', '{', '}', '_', '[', ']', '+', '<', '>', '*']]
  39. line = self.base_height
  40. for row in rows:
  41. pos = 0
  42. for key in row:
  43. button = \
  44. TouchAndTextItem(self.font, key, (pos, line),
  45. (self.base_width, self.base_height),
  46. center=True, background=(150, 150, 150))
  47. self.keyboards[self.current_keyboard].\
  48. set_touch_object(key, button)
  49. pos += self.base_width
  50. line += self.base_height
  51. self.current_keyboard = 0
  52. # Symbol button
  53. button = TouchAndTextItem(self.font, "123",
  54. (0, self.base_height*4),
  55. (self.base_width*2, self.base_height),
  56. center=True, background=(150, 150, 150))
  57. self.other_objects.set_touch_object("symbols", button)
  58. # remove button
  59. button = TouchAndTextItem(self.font, "<-",
  60. (self.base_width*2, self.base_height*4),
  61. (self.base_width*2, self.base_height),
  62. center=True, background=(150, 150, 150))
  63. self.other_objects.set_touch_object("remove", button)
  64. # Space button
  65. button = TouchAndTextItem(self.font, " ",
  66. (self.base_width*4, self.base_height*4),
  67. (self.base_width*4, self.base_height),
  68. center=True, background=(150, 150, 150))
  69. self.other_objects.set_touch_object("space", button)
  70. # OK button
  71. button = TouchAndTextItem(self.font, "->",
  72. (self.base_width*8, self.base_height*4),
  73. (self.base_width*2, self.base_height),
  74. center=True, background=(150, 150, 150))
  75. self.other_objects.set_touch_object("ok", button)
  76. # EditText button
  77. button = TouchAndTextItem(self.font, "",
  78. (0, 0),
  79. (self.base_width*10, self.base_height),
  80. center=True)
  81. self.other_objects.set_object("text", button)
  82. def update(self, screen):
  83. screen.fill((0, 0, 0))
  84. self.keyboards[self.current_keyboard].render(screen)
  85. self.other_objects.render(screen)
  86. def touch_event(self, touch_event):
  87. if touch_event.type == InputManager.click:
  88. keys = self.keyboards[self.current_keyboard]\
  89. .get_touch_objects_in_pos(touch_event.current_pos)
  90. for key in keys:
  91. self.other_objects.get_object("text").add_text(key, False)
  92. keys = self.other_objects.get_touch_objects_in_pos(
  93. touch_event.current_pos)
  94. for key in keys:
  95. if key == 'symbols':
  96. if self.current_keyboard == 0:
  97. self.current_keyboard = 1
  98. else:
  99. self.current_keyboard = 0
  100. elif key == "remove":
  101. self.other_objects.get_object("text").remove_text(1, False)
  102. elif key == "space":
  103. self.other_objects.get_object("text").add_text(" ", False)
  104. elif key == "ok":
  105. text = self.other_objects.get_object("text").text
  106. self.listener.text_input(text)
  107. self.manager.close_keyboard()
  108. elif touch_event.type == InputManager.key:
  109. if len(touch_event.unicode):
  110. if touch_event.unicode == u'\x08':
  111. self.other_objects.get_object("text").remove_text(1, False)
  112. else:
  113. self.other_objects.get_object("text").add_text(
  114. touch_event.unicode, False)