Whenever anything changes in the underlying data model, Flowkeeper emits events. To emit an event, the class needs
to subclass AbstractEventSource. All UI updates should be based on those events.
-
AbstractEventSource
BeforeUserCreate(user_identity: str, user_name: str),AfterUserCreate(user: User)BeforeUserDelete(user: User),AfterUserDelete(--//--)BeforeUserRename(user: User, old_name: str, new_name: str),AfterUserRename(--//--)BeforeBacklogCreate(backlog_name: str, backlog_owner: User, backlog_uid: str),AfterBacklogCreate(backlog: Backlog)BeforeBacklogDelete(backlog: Backlog),AfterBacklogDelete(--//--)BeforeBacklogRename(backlog: Backlog, old_name: str, new_name: str),AfterBacklogRename(--//--)BeforeWorkitemCreate(backlog_uid: str, workitem_uid: str, workitem_name: str),AfterWorkitemCreate(workitem: Workitem)BeforeWorkitemComplete(workitem: Workitem, target_state: str),AfterWorkitemComplete(--//--)BeforeWorkitemStart(pomodoro: Pomodoro, workitem: Workitem, work_duration: int),AfterWorkitemStart(--//--)BeforeWorkitemDelete(workitem: Workitem),AfterWorkitemDelete(--//--)BeforeWorkitemRename(workitem: Workitem, old_name: str, new_name: str),AfterWorkitemRename(--//--)BeforePomodoroAdd(workitem: Workitem, num_pomodoros: int),AfterPomodoroAdd(--//--)BeforePomodoroRemove(workitem: Workitem, num_pomodoros: int, pomodoros: List<Pomodoro>),AfterPomodoroRemove(--//--)BeforePomodoroWorkStart(pomodoro: Pomodoro, workitem: Workitem, work_duration: int),AfterPomodoroWorkStart(--//--)BeforePomodoroRestStart(pomodoro: Pomodoro, workitem: Workitem, rest_duration: int),AfterPomodoroRestStart(--//--)BeforePomodoroComplete(pomodoro: Pomodoro, workitem: Workitem, target_state: str),AfterPomodoroCompleteSourceMessagesRequested(),SourceMessagesProcessed()BeforeMessageProcessed(strategy: AbstractStrategy, auto: Bool),AfterMessageProcessed(--//--)PongReceived(uid: str)
-
AbstractSettings
BeforeSettingsChanged(old_values: dict[str, str], new_values: dict[str, str]),AfterSettingsChanged(--//--)
-
AbstractTableView
BeforeSelectionChanged(before: AbstractDataItem, after: AbstractDataItem),AfterSelectionChanged(--//--)
-
Application
AfterFontsChanged(main_font: QFont, header_font: QFont, application: Application)AfterSourceChanged(source: AbstractEventSource)
-
Heartbeat
WentOnline(ping: int),WentOffline(after: int, last_received: datetime)
-
PomodoroTimer
TimerTick(timer: PomodoroTimer)TimerWorkStart(timer: PomodoroTimer)TimerWorkComplete(timer: PomodoroTimer)TimerRestComplete(timer: PomodoroTimer, pomodoro: Pomodoro, workitem: Workitem)
The listeners can also pass the carry parameter. It is used for carrying some metadata through
the strategy -- event sequence. For example, when a user creates a workitem, the CreateWorkitemStrategy
is executed with carry="edit", the core data model is updated, and the WorkitemModel gets updated,
too. After that, the AfterWorkitemCreate event fires, carrying the edit parameter. In the
corresponding listener, we make the new table row editable, so that the user can update it immediately.
The mandatory event parameter for the callbacks
contains the event name.