event.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. from geometry import Positionable
  2. from touch_objects import OBJECT_NAMES
  3. class Event(Positionable):
  4. """
  5. Abstract base class for events triggered by an event driver. These events
  6. are delegated to gesture trackers, to be translated to gestures. To be able
  7. to check whether an event is located within a area, a position is
  8. required. Therefore, the touch object that triggers the event is is linked
  9. to the event object.
  10. """
  11. _type = NotImplemented
  12. def __init__(self, touch_object):
  13. super(Event, self).__init__(*touch_object)
  14. self.touch_object = touch_object
  15. self.stopped = self.stopped_immidiate = False
  16. self.offset = Positionable(0, 0)
  17. def __getattr__(self, name):
  18. if name in OBJECT_NAMES \
  19. and type(self.touch_object) == OBJECT_NAMES[name]:
  20. return self.touch_object
  21. raise AttributeError("'%s' object has no attribute '%s'"
  22. % (self.__class__.__name__, name))
  23. def get_offset(self):
  24. return self - self.offset
  25. def set_offset(self, offset):
  26. self.offset.set_position(*offset)
  27. def set_root_area(self, area):
  28. x, y = area
  29. self.x -= x
  30. self.y -= y
  31. def get_type(self):
  32. return self._type
  33. def get_touch_object(self):
  34. return self.touch_object
  35. def stop_propagation(self):
  36. self.stopped = True
  37. def is_propagation_stopped(self):
  38. return self.stopped
  39. def stop_immidiate_propagation(self):
  40. self.stop_propagation()
  41. self.stopped_immidiate = True
  42. def is_immediate_propagation_stopped(self):
  43. return self.stopped_immidiate