Poodletooth-iLand/panda/direct/showbase/BulletinBoard.py
2015-03-03 17:10:12 -05:00

60 lines
2 KiB
Python

"""Undocumented Module"""
__all__ = ['BulletinBoard']
from direct.directnotify import DirectNotifyGlobal
class BulletinBoard:
"""This class implements a global location for key/value pairs to be
stored. Intended to prevent coders from putting global variables directly
on showbase, so that potential name collisions can be more easily
detected."""
notify = DirectNotifyGlobal.directNotify.newCategory('BulletinBoard')
def __init__(self):
self._dict = {}
def get(self, postName, default=None):
return self._dict.get(postName, default)
def has(self, postName):
return postName in self._dict
def getEvent(self, postName):
return 'bboard-%s' % postName
def getRemoveEvent(self, postName):
return 'bboard-remove-%s' % postName
def post(self, postName, value=None):
if postName in self._dict:
BulletinBoard.notify.warning('changing %s from %s to %s' % (
postName, self._dict[postName], value))
self.update(postName, value)
def update(self, postName, value):
"""can use this to set value the first time"""
if postName in self._dict:
BulletinBoard.notify.info('update: posting %s' % (postName))
self._dict[postName] = value
messenger.send(self.getEvent(postName))
def remove(self, postName):
if postName in self._dict:
del self._dict[postName]
messenger.send(self.getRemoveEvent(postName))
def removeIfEqual(self, postName, value):
# only remove the post if its value is a particular value
if self.has(postName):
if self.get(postName) == value:
self.remove(postName)
def __repr__(self):
str = 'Bulletin Board Contents\n'
str += '======================='
keys = self._dict.keys()
keys.sort()
for postName in keys:
str += '\n%s: %s' % (postName, self._dict[postName])
return str