Mercurial > projects > qtd
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