xref: /haiku/src/servers/launch/Events.h (revision e048384d778494243edf0187eaa8550dae58c840)
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