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