summaryrefslogtreecommitdiff
path: root/Libraries/LibCore/CEvent.h
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/LibCore/CEvent.h')
-rw-r--r--Libraries/LibCore/CEvent.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/Libraries/LibCore/CEvent.h b/Libraries/LibCore/CEvent.h
new file mode 100644
index 0000000000..9d262c4a76
--- /dev/null
+++ b/Libraries/LibCore/CEvent.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#include <AK/AKString.h>
+#include <AK/Function.h>
+#include <AK/Types.h>
+#include <AK/WeakPtr.h>
+
+class CObject;
+
+class CEvent {
+public:
+ enum Type {
+ Invalid = 0,
+ Quit,
+ Timer,
+ DeferredDestroy,
+ DeferredInvoke,
+ ChildAdded,
+ ChildRemoved,
+ };
+
+ CEvent() {}
+ explicit CEvent(unsigned type)
+ : m_type(type)
+ {
+ }
+ virtual ~CEvent() {}
+
+ unsigned type() const { return m_type; }
+
+private:
+ unsigned m_type { Type::Invalid };
+};
+
+class CDeferredInvocationEvent : public CEvent {
+ friend class CEventLoop;
+
+public:
+ CDeferredInvocationEvent(Function<void(CObject&)> invokee)
+ : CEvent(CEvent::Type::DeferredInvoke)
+ , m_invokee(move(invokee))
+ {
+ }
+
+private:
+ Function<void(CObject&)> m_invokee;
+};
+
+class CTimerEvent final : public CEvent {
+public:
+ explicit CTimerEvent(int timer_id)
+ : CEvent(CEvent::Timer)
+ , m_timer_id(timer_id)
+ {
+ }
+ ~CTimerEvent() {}
+
+ int timer_id() const { return m_timer_id; }
+
+private:
+ int m_timer_id;
+};
+
+class CChildEvent final : public CEvent {
+public:
+ CChildEvent(Type, CObject& child);
+ ~CChildEvent();
+
+ CObject* child() { return m_child.ptr(); }
+ const CObject* child() const { return m_child.ptr(); }
+
+private:
+ WeakPtr<CObject> m_child;
+};