diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-09-17 15:34:04 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-09-30 10:21:43 +0200 |
commit | 1462bf3e8f896cf2ef8b30a952769fa02acb253c (patch) | |
tree | 8101ec8a2bbcd09f47ec7e8c1ea8edf0e9469e7e /src/core/qpostman.cpp | |
parent | b3c7fd36830ef71e336a97fc5e69864f29cfc628 (diff) |
QChangeArbiter/QScene refactoring
Added nodeIfFromObservable method in QSceneInterface/QScene.
Needed when the QChangeArbiter needs to find the QNode target from an
Observable.
QChangeArbiter/QPostman is passed a QObserverInterface, makes it easier to
unit test.
QPostMan sends change to QNode::sceneChangeEvent. This method should be
overloaded by subclasses of QNode.
Change-Id: If85fcb034b3fcdace82e63149ca7684d9d888d1c
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/qpostman.cpp')
-rw-r--r-- | src/core/qpostman.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/core/qpostman.cpp b/src/core/qpostman.cpp index cb583df0d..9a2272baf 100644 --- a/src/core/qpostman.cpp +++ b/src/core/qpostman.cpp @@ -42,7 +42,9 @@ #include "qpostman_p.h" #include <private/qobject_p.h> #include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DCore/qbackendscenepropertychange.h> #include <Qt3DCore/qscene.h> +#include <Qt3DCore/qnode.h> QT_BEGIN_NAMESPACE @@ -65,7 +67,7 @@ public: QPostman::QPostman(QObject *parent) : QObject(*new QPostmanPrivate(this), parent) { - qRegisterMetaType<QSharedPointer<QSceneChange> >("QSharedPointer<QSceneChanged>"); + qRegisterMetaType<QSceneChangePtr >("QSceneChangePtr"); } void QPostman::setScene(QSceneInterface *scene) @@ -74,21 +76,22 @@ void QPostman::setScene(QSceneInterface *scene) d->m_scene = scene; } -void QPostman::sceneChangeEvent(const QSceneChangePtr &) +void QPostman::sceneChangeEvent(const QSceneChangePtr &e) { - + QMetaObject::invokeMethod(this, + "notifyFrontendNode", + Q_ARG(QSceneChangePtr, e)); } -//void QPostman::sceneNodeUpdated(QSceneChangePtr &e) -//{ -// QMetaObject::invokeMethod(this, -// "notifyFrontendNode", -// Q_ARG(QSharedPointer<QSceneChange>, e)); -//} - -void QPostman::notifyFrontendNode(QSceneChangePtr &) +void QPostman::notifyFrontendNode(QSceneChangePtr e) { - // TO DO: Lookup in the engine's table if a node for the current + Q_D(QPostman); + QBackendScenePropertyChangePtr change = qSharedPointerDynamicCast<QBackendScenePropertyChange>(e); + if (!change.isNull() && d->m_scene != Q_NULLPTR) { + QNode *n = d->m_scene->lookupNode(change->targetNode()); + if (n != Q_NULLPTR) + n->sceneChangeEvent(change); + } } } //Qt3D |