| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from MessengerGlobal import *
- from DirectNotifyGlobal import *
- from PythonUtil import *
- class DirectObject:
- """
- This is the class that all Direct/SAL classes should inherit from
- """
- #def __del__(self):
- # print "Destructing: ", self.__class__.__name__
- # Event Handling
- def __initEvents(self):
- # this function exists because:
- # - DirectObject does not have a constructor, and adding one
- # would involve touching many, many files
- # - a constructor that creates self.events would cause every
- # DirectObject to incur the cost of an additional function
- # call and dictionary creation
- # - DirectObjects that do not use the messenger should not have
- # an unused dictionary taking up space
- # - the speed hit of calling this function on calls to accept,
- # ignore, etc. is negligible, since they are not called often
- if not hasattr(self, "events"):
- # list of events that this object is accepting
- # we use a dictionary to avoid linear searches
- self.events = {}
- def accept(self, event, method, extraArgs=[]):
- self.__initEvents()
- ifAbsentPut(self.events, event, None)
- messenger.accept(event, self, method, extraArgs, 1)
- def acceptOnce(self, event, method, extraArgs=[]):
- self.__initEvents()
- ifAbsentPut(self.events, event, None)
- messenger.accept(event, self, method, extraArgs, 0)
- def _INTERNAL_acceptOnceExpired(self, event):
- """ this should only be called by the messenger """
- if self.events.has_key(event):
- del self.events[event]
- def ignore(self, event):
- self.__initEvents()
- if self.events.has_key(event):
- del self.events[event]
- messenger.ignore(event, self)
- def ignoreAll(self):
- self.__initEvents()
- for event in self.events.keys():
- messenger.ignore(event, self)
- self.events.clear()
- def isAccepting(self, event):
- self.__initEvents()
- return self.events.has_key(event)
- def isIgnoring(self, event):
- return not self.isAccepting(event)
|