summaryrefslogtreecommitdiff
path: root/Libraries/LibCore/CObject.h
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-07-25 19:49:28 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-07-25 19:49:28 +0200
commita599317624fb8428eb64cf719affcdd075f5c9d5 (patch)
tree7669ffd4a1acab1b0caf003443ed470de6fe34ea /Libraries/LibCore/CObject.h
parentd21a4f7518ced2b49e20b3b2521c80b0afec216d (diff)
downloadserenity-a599317624fb8428eb64cf719affcdd075f5c9d5.zip
LibCore: Introduce a C_OBJECT macro.
This macro goes at the top of every CObject-derived class like so: class SomeClass : public CObject { C_OBJECT(SomeClass) public: ... At the moment, all it does is create an override for the class_name() getter but in the future this will be used to automatically insert member functions into these classes.
Diffstat (limited to 'Libraries/LibCore/CObject.h')
-rw-r--r--Libraries/LibCore/CObject.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/Libraries/LibCore/CObject.h b/Libraries/LibCore/CObject.h
index d0df0530be..247198c904 100644
--- a/Libraries/LibCore/CObject.h
+++ b/Libraries/LibCore/CObject.h
@@ -11,13 +11,16 @@ class CChildEvent;
class CCustomEvent;
class CTimerEvent;
+#define C_OBJECT(klass) \
+public: \
+ virtual const char* class_name() const override { return #klass; }
+
class CObject : public Weakable<CObject> {
+ // NOTE: No C_OBJECT macro for CObject itself.
public:
- CObject(CObject* parent = nullptr, bool is_widget = false);
virtual ~CObject();
- virtual const char* class_name() const { return "CObject"; }
-
+ virtual const char* class_name() const = 0;
virtual void event(CEvent&);
const String& name() const { return m_name; }
@@ -58,6 +61,8 @@ public:
virtual bool is_window() const { return false; }
protected:
+ CObject(CObject* parent = nullptr, bool is_widget = false);
+
virtual void timer_event(CTimerEvent&);
virtual void child_event(CChildEvent&);
virtual void custom_event(CCustomEvent&);