Système d’événements

Le système d’événements de Gaphor fournit une API pour gérer les événements et pour s’abonner aux événements.

Dans Gaphor, nous gérons les abonnements aux gestionnaires d’événements via le service EventManager. Gaphor est fortement axé sur les événements :

  • Les modifications du modèle chargé sont émises sous forme d’événements

  • Les modifications apportées aux diagrammes sont émises sous forme d’événements

  • Les modifications de l’interface utilisateur sont émises sous forme d’événements

Bien que Gaphor dépende fortement de GTK pour son interface utilisateur, il utilise son propre système de distribution d’événements. Les événements peuvent être structurés en hiérarchies. Par exemple, un événement AttributeUpdated est un sous-type de ElementUpdated. Si nous sommes intéressés par toutes les modifications apportées aux éléments, nous pouvons également enregistrer l’événement ElementUpdated et recevoir tous les événements AttributeUpdated.

class gaphor.core.eventmanager.EventManager[source]

Le gestionnaire d’événements offre un moyen souple de distribuer des événements.

La gestion des événements est un élément central de Gaphor. Il permet aux composants de Gaphor de réagir aux changements dans l’application.

Les événements sont distribués par type.

class subscribe(self, handler: Callable[[object], None])

Enregistrer un gestionnaire.

Les gestionnaires sont déclenchés (exécutés) lorsque des événements sont émis par la méthode handle.

class unsubscribe(self, handler: Callable[[object], None])

Annuler l’enregistrement d’un gestionnaire précédemment enregistré.

class handle(self, *events: object)

Envoyer des notifications d’événements aux gestionnaires enregistrés.

gaphor.core.event_handler(*event_types)[source]

Marquer une fonction/méthode comme gestionnaire d’événement pour un type d’événement particulier.

Compte tenu du type d’événement personnalisé :

>>> class CustomEvent:
...     def __str__(self):
...         return type(self).__name__

Vous pouvez l’appliquer à une méthode ou à une fonction de traitement :

>>> @event_handler(CustomEvent)
... def custom_handler(event: CustomEvent):
...     print(event)

Cela vous permettra de laisser un gestionnaire d’événements s’occuper de l’événement :

>>> event_manager = EventManager()
>>> event_manager.subscribe(custom_handler)
>>> event_manager.handle(CustomEvent())
CustomEvent

Sous le capot, les événements sont gérés par la bibliothèque Generics. Pour plus d’informations sur la façon dont la bibliothèque Generic gère les événements, voir la documentation Generic.