tracker.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from logger import Logger
  2. class GestureTracker(Logger):
  3. """
  4. Abstract class for gesture tracker definitions. Contains methods for
  5. changing the state of touch points.
  6. """
  7. # Supported gesture types
  8. __gesture_types__ = []
  9. # Configurable properties (see configure() method)
  10. __configurable__ = []
  11. def __init__(self, window=None):
  12. # Hashmap of gesture types
  13. self.handlers = {}
  14. if window:
  15. window.add_tracker(self)
  16. def bind(self, gesture_type, handler, *args, **kwargs):
  17. """
  18. Bind a handler to a gesture type. Multiple handlers can be bound to a
  19. single gesture type. Optionally, (keyword) arguments that will be
  20. passed to the handler along with a Gesture object can be specified.
  21. """
  22. if gesture_type not in self.__gesture_types__:
  23. raise ValueError('Unsupported gesture type "%s".' % gesture_type)
  24. h = handler, args, kwargs
  25. if gesture_type not in self.handlers:
  26. self.handlers[gesture_type] = [h]
  27. else:
  28. self.handlers[gesture_type].append(h)
  29. def trigger(self, gesture):
  30. if gesture.__type__ not in self.handlers:
  31. self.debug('Triggered "%s", but no handlers are bound.'
  32. % gesture.__type__)
  33. return
  34. self.info('Triggered %s.' % gesture)
  35. for handler, args, kwargs in self.handlers[gesture.__type__]:
  36. handler(gesture, *args, **kwargs)
  37. def is_type_bound(self, gesture_type):
  38. return gesture_type in self.handlers
  39. def on_point_down(self, point):
  40. pass
  41. def on_point_move(self, point):
  42. pass
  43. def on_point_up(self, point):
  44. pass
  45. def configure(self, **kwargs):
  46. for name, value in kwargs.iteritems():
  47. if name not in self.__configurable__:
  48. raise ValueError('%s.%s is not a configurable property.'
  49. % (self.__class__.__name__, name))
  50. setattr(self, name, value)
  51. class Gesture(object):
  52. """
  53. Abstract class that represents a triggered gesture.
  54. """
  55. pass