event.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from copy import copy
  2. from geometry import Positionable
  3. from touch_objects import OBJECT_NAMES
  4. class Event(Positionable):
  5. """
  6. Abstract base class for events triggered by an event driver. These events
  7. are delegated to gesture trackers, to be translated to gestures. To be able
  8. to check whether an event is located within a area, a position is
  9. required. Therefore, the touch object that triggers the event is is linked
  10. to the event object.
  11. """
  12. _type = NotImplemented
  13. def __init__(self, touch_object):
  14. super(Event, self).__init__(*touch_object)
  15. self.touch_object = touch_object
  16. self.stopped = self.stopped_immidiate = False
  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_type(self):
  24. return self._type
  25. def get_touch_object(self):
  26. return self.touch_object
  27. def stop_propagation(self):
  28. self.stopped = True
  29. def is_propagation_stopped(self):
  30. return self.stopped
  31. def stop_immidiate_propagation(self):
  32. self.stop_propagation()
  33. self.stopped_immidiate = True
  34. def is_immediate_propagation_stopped(self):
  35. return self.stopped_immidiate
  36. def clone(self):
  37. return copy(self)