PageRenderTime 29ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/library/Timer.py

http://pyjamas.googlecode.com/
Python | 88 lines | 83 code | 4 blank | 1 comment | 1 complexity | f50b7c72c592026b02a545b9be2f436a MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. #Timer().hookWindowClosing()
  2. timers = []
  3. class Timer:
  4. MIN_PERIOD = 1
  5. def __init__(self, delay = 0, object = None):
  6. self.isRepeating = False
  7. self.timerId = 0
  8. self.listener = object
  9. if delay >= Timer.MIN_PERIOD:
  10. self.schedule(delay)
  11. def clearInterval(self, id):
  12. JS("""
  13. $wnd.clearInterval(id);
  14. """)
  15. def clearTimeout(self, id):
  16. JS("""
  17. $wnd.clearTimeout(id);
  18. """)
  19. def createInterval(self, timer, period):
  20. JS("""
  21. return $wnd.setInterval(function() { timer.fire(); }, period);
  22. """)
  23. def createTimeout(self, timer, delay):
  24. JS("""
  25. return $wnd.setTimeout(function() { timer.fire(); }, delay);
  26. """)
  27. # TODO - requires Window.addWindowCloseListener
  28. def hookWindowClosing(self):
  29. pass
  30. def cancel(self):
  31. global timers
  32. if self.isRepeating:
  33. self.clearInterval(self.timerId)
  34. else:
  35. self.clearTimeout(self.timerId)
  36. timers.remove(self)
  37. def run(self):
  38. if self.listener:
  39. self.listener.onTimer(self.timerId)
  40. def schedule(self, delayMillis):
  41. global timers
  42. if delayMillis < Timer.MIN_PERIOD:
  43. alert("Timer delay must be positive")
  44. self.cancel()
  45. self.isRepeating = False
  46. self.timerId = self.createTimeout(self, delayMillis)
  47. timers.append(self)
  48. def scheduleRepeating(self, periodMillis):
  49. global timers
  50. if periodMillis < Timer.MIN_PERIOD:
  51. alert("Timer period must be positive")
  52. self.cancel()
  53. self.isRepeating = True
  54. self.timerId = self.createInterval(self, periodMillis)
  55. timers.append(self)
  56. # TODO: UncaughtExceptionHandler, fireAndCatch
  57. def fire(self):
  58. self.fireImpl()
  59. def fireImpl(self):
  60. global timers
  61. if not self.isRepeating:
  62. timers.remove(self)
  63. self.run()
  64. def getID(self):
  65. return self.timerId