*** empty log message ***
This commit is contained in:
parent
98e5bb3e32
commit
1ddbac215a
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
|
||||
import DirectNotifyGlobal
|
||||
import DirectObject
|
||||
|
||||
|
||||
class InputState(DirectObject.DirectObject):
|
||||
"""
|
||||
InputState is for tracking the on/off state of some events.
|
||||
The initial usage is to watch some keyboard keys so that another
|
||||
task can poll the key states. By the way, in general polling is
|
||||
not a good idea, but it is useful in some situations. Know when
|
||||
to use it :) If in doubt, don't use this class and listen for
|
||||
events instead.
|
||||
"""
|
||||
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory("InputState")
|
||||
|
||||
def __init__(self):
|
||||
self.state = {}
|
||||
assert(self.debugPrint("InputState()"))
|
||||
|
||||
def delete(self):
|
||||
self.ignoreAll()
|
||||
|
||||
def watch(self, name, eventOn, eventOff, default = 0):
|
||||
"""
|
||||
name is any string (or actually any valid dictionary key).
|
||||
eventOn is the string name of the Messenger event that will
|
||||
set the state (set to 1).
|
||||
eventOff is the string name of the Messenger event that will
|
||||
clear the state (set to 0).
|
||||
default is the initial value (this will be returned from
|
||||
isSet() if a call is made before any eventOn or eventOff
|
||||
events occur.
|
||||
See Also: ignore()
|
||||
"""
|
||||
assert(self.debugPrint(
|
||||
"watch(name=%s, eventOn=%s, eventOff=%s, default=%s)"%(
|
||||
name, eventOn, eventOff, default)))
|
||||
self.accept(eventOn, self.set, [name, 1])
|
||||
self.accept(eventOff, self.set, [name, 0])
|
||||
self.state[name] = default
|
||||
|
||||
def ignore(self, name):
|
||||
"""
|
||||
The opposite of watch(name, ...)
|
||||
See Also: watch()
|
||||
"""
|
||||
self.ignore(eventOn)
|
||||
self.ignore(eventOff)
|
||||
del state[name]
|
||||
|
||||
def set(self, name, isSet):
|
||||
assert(self.debugPrint("set(name=%s, isSet=%s)"%(name, isSet)))
|
||||
self.state[name] = isSet
|
||||
|
||||
def isSet(self, name):
|
||||
"""
|
||||
returns 0, 1, or None (if we're not tracking it at all)
|
||||
"""
|
||||
#assert(self.debugPrint("isSet(name=%s)"%(name)))
|
||||
return self.state.get(name)
|
||||
|
||||
if __debug__:
|
||||
def debugPrint(self, message):
|
||||
"""for debugging"""
|
||||
return self.notify.debug(
|
||||
"%s (%s) %s"%(id(self), len(self.state), message))
|
||||
|
||||
Loading…
Reference in New Issue