15b6c827eSAxel Dörfler /* 2a77aa747SAxel Dörfler * Copyright 2015-2018, Axel Dörfler, axeld@pinc-software.de. 35b6c827eSAxel Dörfler * Distributed under the terms of the MIT License. 45b6c827eSAxel Dörfler */ 55b6c827eSAxel Dörfler #ifndef EVENTS_H 65b6c827eSAxel Dörfler #define EVENTS_H 75b6c827eSAxel Dörfler 85b6c827eSAxel Dörfler 95b6c827eSAxel Dörfler #include <Messenger.h> 105b6c827eSAxel Dörfler #include <String.h> 115b6c827eSAxel Dörfler 125b6c827eSAxel Dörfler 135b6c827eSAxel Dörfler class BaseJob; 145b6c827eSAxel Dörfler class Event; 155b6c827eSAxel Dörfler 165b6c827eSAxel Dörfler 175b6c827eSAxel Dörfler class EventRegistrator { 185b6c827eSAxel Dörfler public: 197cd19b7eSAxel Dörfler virtual status_t RegisterExternalEvent(Event* event, 207cd19b7eSAxel Dörfler const char* name, 217cd19b7eSAxel Dörfler const BStringList& arguments) = 0; 227cd19b7eSAxel Dörfler virtual void UnregisterExternalEvent(Event* event, 237cd19b7eSAxel Dörfler const char* name) = 0; 245b6c827eSAxel Dörfler }; 255b6c827eSAxel Dörfler 265b6c827eSAxel Dörfler 275b6c827eSAxel Dörfler class Event { 285b6c827eSAxel Dörfler public: 295b6c827eSAxel Dörfler Event(Event* parent); 305b6c827eSAxel Dörfler virtual ~Event(); 315b6c827eSAxel Dörfler 325b6c827eSAxel Dörfler virtual status_t Register( 337cd19b7eSAxel Dörfler EventRegistrator& registrator) = 0; 345b6c827eSAxel Dörfler virtual void Unregister( 357cd19b7eSAxel Dörfler EventRegistrator& registrator) = 0; 365b6c827eSAxel Dörfler 375b6c827eSAxel Dörfler bool Triggered() const; 38a77aa747SAxel Dörfler virtual void Trigger(Event* origin); 397cd19b7eSAxel Dörfler virtual void ResetTrigger(); 405b6c827eSAxel Dörfler 415b6c827eSAxel Dörfler virtual BaseJob* Owner() const; 425b6c827eSAxel Dörfler virtual void SetOwner(BaseJob* owner); 435b6c827eSAxel Dörfler 445b6c827eSAxel Dörfler Event* Parent() const; 455b6c827eSAxel Dörfler 465b6c827eSAxel Dörfler virtual BString ToString() const = 0; 475b6c827eSAxel Dörfler 487cd19b7eSAxel Dörfler protected: 495b6c827eSAxel Dörfler Event* fParent; 505b6c827eSAxel Dörfler bool fTriggered; 515b6c827eSAxel Dörfler }; 525b6c827eSAxel Dörfler 535b6c827eSAxel Dörfler 545b6c827eSAxel Dörfler class Events { 555b6c827eSAxel Dörfler public: 565b6c827eSAxel Dörfler static Event* FromMessage(const BMessenger& target, 575b6c827eSAxel Dörfler const BMessage& message); 58e048384dSAxel Dörfler static Event* AddOnDemand(const BMessenger& target, Event* event); 59*b19b3d9bSAugustin Cavalier static Event* ResolveExternalEvent(Event* event, 607cd19b7eSAxel Dörfler const char* name, uint32 flags); 61*b19b3d9bSAugustin Cavalier static void TriggerExternalEvent(Event* event); 62*b19b3d9bSAugustin Cavalier static void ResetStickyExternalEvent(Event* event); 63236e68efSAxel Dörfler static bool TriggerDemand(Event* event, bool testOnly = false); 645b6c827eSAxel Dörfler }; 655b6c827eSAxel Dörfler 665b6c827eSAxel Dörfler 675b6c827eSAxel Dörfler #endif // EVENTS_H 68