Imported Upstream version 2008.1+svn1553
[opeanno-debian-packaging.git] / game / util / weakmethodlist.py
blob695f912e98ce614c83ca13158ebf82ac8457ef00
1 # ###################################################
2 # Copyright (C) 2008 The OpenAnno Team
3 # team@openanno.org
4 # This file is part of OpenAnno.
6 # OpenAnno is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the
18 # Free Software Foundation, Inc.,
19 # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 # ###################################################
22 from game.util import WeakMethod
24 class WeakMethodList(object):
25 """A class that handles zero to n callbacks."""
27 def __init__(self, callbacks = None):
28 """
29 @param callbacks: None, a function, a list of functions, or a tuple of functions
30 """
31 #self.__instance = instance
32 self.__callbacks = []
33 self.__add(callbacks)
35 def __add(self, callback):
36 """Internal function used to add callbacks"""
37 if callback is None:
38 pass
39 elif callable(callback):
40 self.__callbacks.append(WeakMethod(callback))
41 elif isinstance(callback, list, tuple):
42 for i in callback:
43 self.__add(i)
45 def append(self, elem):
46 """Just like list.append"""
47 self.__add(elem)
49 def execute(self):
50 """Execute all callbacks. Number of callbacks may be zero to n."""
51 for callback in self.__callbacks:
52 callback()