Система подій

Система подій у Gaphor надає API для обробки подій і підписки на події.

У Gaphor ми керуємо підписками на обробник подій через службу EventManager. Gaphor дуже орієнтований на події:

  • Зміни в завантаженій моделі видаються як події

  • Зміни на діаграмах видаються як події

  • Зміни в інтерфейсі користувача випромінюються як події

Хоча користувацький інтерфейс Gaphor значною мірою залежить від GTK, Gaphor використовує власний диспетчер подій. Події можна структурувати у вигляді ієрархій. Наприклад, подія AttributeUpdated є підтипом події ElementUpdated. Якщо нас цікавлять всі зміни в елементах, ми також можемо зареєструвати ElementUpdated і отримувати всі події AttributeUpdated.

class gaphor.core.eventmanager.EventManager[source]

Менеджер подій забезпечує гнучкий спосіб відправки подій.

Диспетчеризація подій є центральним компонентом Gaphor. Це дозволяє компонентам Gaphor реагувати на зміни в програмі.

Події розсилаються за типом.

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

Зареєструйте обробника.

Обробники запускаються (виконуються), коли події надходять через метод handle.

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

Скасувати реєстрацію попередньо зареєстрованого обробника.

class handle(self, *events: object)

Надсилати сповіщення про події зареєстрованим обробникам.

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

Позначте функцію/метод як обробник події для певного типу події.

Враховуючи настроюваний тип події:

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

Ви можете застосувати це до методу або функції обробника:

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

Це дозволить вам дозволити керування подією менеджеру подій:

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

Under the hood events are handled by the Generics library. For more information about how the Generic library handles events see the Generic documentation.