haiku/src/servers/launch/Events.h

68 lines
1.5 KiB
C++

/*
* Copyright 2015-2018, Axel Dörfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef EVENTS_H
#define EVENTS_H
#include <Messenger.h>
#include <String.h>
class BaseJob;
class Event;
class EventRegistrator {
public:
virtual status_t RegisterExternalEvent(Event* event,
const char* name,
const BStringList& arguments) = 0;
virtual void UnregisterExternalEvent(Event* event,
const char* name) = 0;
};
class Event {
public:
Event(Event* parent);
virtual ~Event();
virtual status_t Register(
EventRegistrator& registrator) = 0;
virtual void Unregister(
EventRegistrator& registrator) = 0;
bool Triggered() const;
virtual void Trigger(Event* origin);
virtual void ResetTrigger();
virtual BaseJob* Owner() const;
virtual void SetOwner(BaseJob* owner);
Event* Parent() const;
virtual BString ToString() const = 0;
protected:
Event* fParent;
bool fTriggered;
};
class Events {
public:
static Event* FromMessage(const BMessenger& target,
const BMessage& message);
static Event* AddOnDemand(const BMessenger& target, Event* event);
static Event* ResolveExternalEvent(Event* event,
const char* name, uint32 flags);
static void TriggerExternalEvent(Event* event);
static void ResetStickyExternalEvent(Event* event);
static bool TriggerDemand(Event* event, bool testOnly = false);
};
#endif // EVENTS_H