2
0

DirectObject.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from MessengerGlobal import *
  2. from DirectNotifyGlobal import *
  3. from PythonUtil import *
  4. class DirectObject:
  5. """
  6. This is the class that all Direct/SAL classes should inherit from
  7. """
  8. #def __del__(self):
  9. # print "Destructing: ", self.__class__.__name__
  10. # Event Handling
  11. def __initEvents(self):
  12. # this function exists because:
  13. # - DirectObject does not have a constructor, and adding one
  14. # would involve touching many, many files
  15. # - a constructor that creates self.events would cause every
  16. # DirectObject to incur the cost of an additional function
  17. # call and dictionary creation
  18. # - DirectObjects that do not use the messenger should not have
  19. # an unused dictionary taking up space
  20. # - the speed hit of calling this function on calls to accept,
  21. # ignore, etc. is negligible, since they are not called often
  22. if not hasattr(self, "events"):
  23. # list of events that this object is accepting
  24. # we use a dictionary to avoid linear searches
  25. self.events = {}
  26. def accept(self, event, method, extraArgs=[]):
  27. self.__initEvents()
  28. ifAbsentPut(self.events, event, None)
  29. messenger.accept(event, self, method, extraArgs, 1)
  30. def acceptOnce(self, event, method, extraArgs=[]):
  31. self.__initEvents()
  32. ifAbsentPut(self.events, event, None)
  33. messenger.accept(event, self, method, extraArgs, 0)
  34. def _INTERNAL_acceptOnceExpired(self, event):
  35. """ this should only be called by the messenger """
  36. if self.events.has_key(event):
  37. del self.events[event]
  38. def ignore(self, event):
  39. self.__initEvents()
  40. if self.events.has_key(event):
  41. del self.events[event]
  42. messenger.ignore(event, self)
  43. def ignoreAll(self):
  44. self.__initEvents()
  45. for event in self.events.keys():
  46. messenger.ignore(event, self)
  47. self.events.clear()
  48. def isAccepting(self, event):
  49. self.__initEvents()
  50. return self.events.has_key(event)
  51. def isIgnoring(self, event):
  52. return not self.isAccepting(event)