1/* 2 * Copyright 2015-2018, Axel D��rfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef EVENTS_H 6#define EVENTS_H 7 8 9#include <Messenger.h> 10#include <String.h> 11 12 13class BaseJob; 14class Event; 15 16 17class EventRegistrator { 18public: 19 virtual status_t RegisterExternalEvent(Event* event, 20 const char* name, 21 const BStringList& arguments) = 0; 22 virtual void UnregisterExternalEvent(Event* event, 23 const char* name) = 0; 24}; 25 26 27class Event { 28public: 29 Event(Event* parent); 30 virtual ~Event(); 31 32 virtual status_t Register( 33 EventRegistrator& registrator) = 0; 34 virtual void Unregister( 35 EventRegistrator& registrator) = 0; 36 37 bool Triggered() const; 38 virtual void Trigger(Event* origin); 39 virtual void ResetTrigger(); 40 41 virtual BaseJob* Owner() const; 42 virtual void SetOwner(BaseJob* owner); 43 44 Event* Parent() const; 45 46 virtual BString ToString() const = 0; 47 48protected: 49 Event* fParent; 50 bool fTriggered; 51}; 52 53 54class Events { 55public: 56 static Event* FromMessage(const BMessenger& target, 57 const BMessage& message); 58 static Event* AddOnDemand(const BMessenger& target, Event* event); 59 static Event* ResolveExternalEvent(Event* event, 60 const char* name, uint32 flags); 61 static void TriggerExternalEvent(Event* event); 62 static void ResetStickyExternalEvent(Event* event); 63 static bool TriggerDemand(Event* event, bool testOnly = false); 64}; 65 66 67#endif // EVENTS_H 68