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