xref: /haiku/src/servers/launch/Events.h (revision 5b6c827e828a20bb9d7bb357bdcac799fa51d7df)
1*5b6c827eSAxel Dörfler /*
2*5b6c827eSAxel Dörfler  * Copyright 2015, Axel Dörfler, axeld@pinc-software.de.
3*5b6c827eSAxel Dörfler  * Distributed under the terms of the MIT License.
4*5b6c827eSAxel Dörfler  */
5*5b6c827eSAxel Dörfler #ifndef EVENTS_H
6*5b6c827eSAxel Dörfler #define EVENTS_H
7*5b6c827eSAxel Dörfler 
8*5b6c827eSAxel Dörfler 
9*5b6c827eSAxel Dörfler #include <Messenger.h>
10*5b6c827eSAxel Dörfler #include <String.h>
11*5b6c827eSAxel Dörfler 
12*5b6c827eSAxel Dörfler 
13*5b6c827eSAxel Dörfler class BaseJob;
14*5b6c827eSAxel Dörfler class Event;
15*5b6c827eSAxel Dörfler 
16*5b6c827eSAxel Dörfler 
17*5b6c827eSAxel Dörfler class EventRegistrator {
18*5b6c827eSAxel Dörfler public:
19*5b6c827eSAxel Dörfler 	virtual	status_t			RegisterEvent(Event* event) = 0;
20*5b6c827eSAxel Dörfler 	virtual	void				UnregisterEvent(Event* event) = 0;
21*5b6c827eSAxel Dörfler };
22*5b6c827eSAxel Dörfler 
23*5b6c827eSAxel Dörfler 
24*5b6c827eSAxel Dörfler class Event {
25*5b6c827eSAxel Dörfler public:
26*5b6c827eSAxel Dörfler 								Event(Event* parent);
27*5b6c827eSAxel Dörfler 	virtual						~Event();
28*5b6c827eSAxel Dörfler 
29*5b6c827eSAxel Dörfler 	virtual	status_t			Register(
30*5b6c827eSAxel Dörfler 									EventRegistrator& registrator) const = 0;
31*5b6c827eSAxel Dörfler 	virtual	void				Unregister(
32*5b6c827eSAxel Dörfler 									EventRegistrator& registrator) const = 0;
33*5b6c827eSAxel Dörfler 
34*5b6c827eSAxel Dörfler 			bool				Triggered() const;
35*5b6c827eSAxel Dörfler 	virtual	void				Trigger();
36*5b6c827eSAxel Dörfler 
37*5b6c827eSAxel Dörfler 	virtual	BaseJob*			Owner() const;
38*5b6c827eSAxel Dörfler 	virtual	void				SetOwner(BaseJob* owner);
39*5b6c827eSAxel Dörfler 
40*5b6c827eSAxel Dörfler 			Event*				Parent() const;
41*5b6c827eSAxel Dörfler 
42*5b6c827eSAxel Dörfler 	virtual	BString				ToString() const = 0;
43*5b6c827eSAxel Dörfler 
44*5b6c827eSAxel Dörfler private:
45*5b6c827eSAxel Dörfler 			Event*				fParent;
46*5b6c827eSAxel Dörfler 			bool				fTriggered;
47*5b6c827eSAxel Dörfler };
48*5b6c827eSAxel Dörfler 
49*5b6c827eSAxel Dörfler 
50*5b6c827eSAxel Dörfler class Events {
51*5b6c827eSAxel Dörfler public:
52*5b6c827eSAxel Dörfler 	static	Event*			FromMessage(const BMessenger& target,
53*5b6c827eSAxel Dörfler 								const BMessage& message);
54*5b6c827eSAxel Dörfler 	static	Event*			AddOnDemand(Event* event);
55*5b6c827eSAxel Dörfler 	static	bool			TriggerDemand(Event* event);
56*5b6c827eSAxel Dörfler };
57*5b6c827eSAxel Dörfler 
58*5b6c827eSAxel Dörfler 
59*5b6c827eSAxel Dörfler #endif // EVENTS_H
60