diff include/QObjectEntity.h @ 254:34a37904ff77

(none)
author maxter
date Sun, 30 Aug 2009 10:59:56 +0000
parents 37eed70de029
children 18bd68f586c6
line wrap: on
line diff
--- a/include/QObjectEntity.h	Sun Aug 30 09:59:12 2009 +0000
+++ b/include/QObjectEntity.h	Sun Aug 30 10:59:56 2009 +0000
@@ -1,16 +1,49 @@
 #ifndef QQOBJECTENTITY_H
 #define QQOBJECTENTITY_H
 
-#include <cstdlib>
+#include "qtd_core.h"
+#include <qobject.h>
+#include <iostream>
+
+QTD_EXPORT(void, qtd_delete_d_qobject, (void* dPtr))
 
-class Qtd_QObjectEntity
+#ifdef CPP_SHARED
+#define qtd_delete_d_qobject qtd_get_qtd_delete_d_qobject()
+#endif
+
+//TODO: user data ID must be registered with QObject::registerUserData;
+#define userDataId 0
+
+class QtD_QObjectEntity : public QtD_Entity, public QObjectUserData
 {
 public:
-	Qtd_QObjectEntity(void *d_ptr) { _d_ptr = d_ptr; }
-	void *d_entity() const { return _d_ptr; }
+
+    QtD_QObjectEntity(QObject *qObject, void *dId) : QtD_Entity(dId)
+    {
+        qObject->setUserData(userDataId, this);
+    }
 
-private:
-	void *_d_ptr;
+    virtual ~QtD_QObjectEntity()
+    {        
+        if (dId)
+            destroyEntity();     
+    }
+    
+    inline void destroyEntity(QObject *qObject = NULL)
+    {
+        Q_ASSERT(dId);
+        qtd_delete_d_qobject(dId);
+        if (qObject)
+        {
+            qObject->setUserData(userDataId, NULL);
+            dId = NULL;
+        }
+    }
+
+    inline static QtD_QObjectEntity* getQObjectEntity(const QObject *qObject)
+    {
+        return static_cast<QtD_QObjectEntity*>(qObject->userData(userDataId));
+    }
 };
 
 #endif // QQOBJECTENTITY_H