"""Simple observer-pattern callback registry."""
[docs]
class CallbackHandler:
"""Manages a set of registered callback functions.
Widgets register callables via :meth:`register` and receive a
numeric ID for later removal. Iterating over the handler
invokes all registered callbacks.
"""
def __init__(self):
self.n_registered = -1
self.callback_functions = {}
[docs]
def register(self, callback) -> int:
self.n_registered += 1
self.callback_functions[self.n_registered] = callback
return self.n_registered
[docs]
def pop(self, n: int):
if n in self.callback_functions:
self.callback_functions.pop(n)
[docs]
def clear(self):
self.callback_functions.clear()
def __iter__(self):
return self.callback_functions.values().__iter__()