'Registers an object for all listeners that it has functions for.  If
obj is an instance of a class, this will register that instance.  If obj
is a class, then this object will attempt to construct an instance of it
(without any parameters to the constructor) and then register that
instance (this throws an exception if the constructor required args).
Finally if obj is a sequence type this function will recursively call
itself with the contents of the sequence.  Do not pass in a recursive
list to this method.'

def AddListener(self, obj):

    if operator.isSequenceType(obj):
        for x in obj:
            self.AddListener(x)
    else:
        if (issubclass(type(obj), type) or (type(obj) == ClassType)):
            obj = obj()
        for key in self.Listeners.Keys:
            if hasattr(obj, str(key)):
                function = getattr(obj, str(key))
                self.AddEventListener(key, function)
