mirror of
https://github.com/liberatedsystems/openCom-Companion.git
synced 2024-11-24 06:10:36 +01:00
34 lines
1.2 KiB
Plaintext
34 lines
1.2 KiB
Plaintext
|
# The model implements the observer pattern. This means that the class must
|
||
|
# support adding, removing, and alerting observers. In this case, the model is
|
||
|
# completely independent of controllers and views. It is important that all
|
||
|
# registered observers implement a specific method that will be called by the
|
||
|
# model when they are notified (in this case, it is the `model_is_changed`
|
||
|
# method). For this, observers must be descendants of an abstract class,
|
||
|
# inheriting which, the `model_is_changed` method must be overridden.
|
||
|
|
||
|
|
||
|
class BaseScreenModel:
|
||
|
"""Implements a base class for model modules."""
|
||
|
|
||
|
_observers = []
|
||
|
|
||
|
def add_observer(self, observer) -> None:
|
||
|
self._observers.append(observer)
|
||
|
|
||
|
def remove_observer(self, observer) -> None:
|
||
|
self._observers.remove(observer)
|
||
|
|
||
|
def notify_observers(self, name_screen: str) -> None:
|
||
|
"""
|
||
|
Method that will be called by the observer when the model data changes.
|
||
|
|
||
|
:param name_screen:
|
||
|
name of the view for which the method should be called
|
||
|
:meth:`model_is_changed`.
|
||
|
"""
|
||
|
|
||
|
for observer in self._observers:
|
||
|
if observer.name == name_screen:
|
||
|
observer.model_is_changed()
|
||
|
break
|