15b6c827eSAxel Dörfler /* 25b6c827eSAxel Dörfler * Copyright 2015, 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: 195b6c827eSAxel Dörfler virtual status_t RegisterEvent(Event* event) = 0; 205b6c827eSAxel Dörfler virtual void UnregisterEvent(Event* event) = 0; 215b6c827eSAxel Dörfler }; 225b6c827eSAxel Dörfler 235b6c827eSAxel Dörfler 245b6c827eSAxel Dörfler class Event { 255b6c827eSAxel Dörfler public: 265b6c827eSAxel Dörfler Event(Event* parent); 275b6c827eSAxel Dörfler virtual ~Event(); 285b6c827eSAxel Dörfler 295b6c827eSAxel Dörfler virtual status_t Register( 305b6c827eSAxel Dörfler EventRegistrator& registrator) const = 0; 315b6c827eSAxel Dörfler virtual void Unregister( 325b6c827eSAxel Dörfler EventRegistrator& registrator) const = 0; 335b6c827eSAxel Dörfler 345b6c827eSAxel Dörfler bool Triggered() const; 355b6c827eSAxel Dörfler virtual void Trigger(); 362c756e16SAxel Dörfler void ResetTrigger(); 375b6c827eSAxel Dörfler 385b6c827eSAxel Dörfler virtual BaseJob* Owner() const; 395b6c827eSAxel Dörfler virtual void SetOwner(BaseJob* owner); 405b6c827eSAxel Dörfler 415b6c827eSAxel Dörfler Event* Parent() const; 425b6c827eSAxel Dörfler 435b6c827eSAxel Dörfler virtual BString ToString() const = 0; 445b6c827eSAxel Dörfler 455b6c827eSAxel Dörfler private: 465b6c827eSAxel Dörfler Event* fParent; 475b6c827eSAxel Dörfler bool fTriggered; 485b6c827eSAxel Dörfler }; 495b6c827eSAxel Dörfler 505b6c827eSAxel Dörfler 515b6c827eSAxel Dörfler class Events { 525b6c827eSAxel Dörfler public: 535b6c827eSAxel Dörfler static Event* FromMessage(const BMessenger& target, 545b6c827eSAxel Dörfler const BMessage& message); 55*e048384dSAxel Dörfler static Event* AddOnDemand(const BMessenger& target, Event* event); 56d94e9c97SAxel Dörfler static bool ResolveRegisteredEvent(Event* event, 57d94e9c97SAxel Dörfler const char* name); 58d94e9c97SAxel Dörfler static void TriggerRegisteredEvent(Event* event, 59d94e9c97SAxel Dörfler const char* name); 605b6c827eSAxel Dörfler static bool TriggerDemand(Event* event); 615b6c827eSAxel Dörfler }; 625b6c827eSAxel Dörfler 635b6c827eSAxel Dörfler 645b6c827eSAxel Dörfler #endif // EVENTS_H 65