summaryrefslogtreecommitdiffstats
path: root/src/core/qpostman.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-09-17 15:34:04 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-09-30 10:21:43 +0200
commit1462bf3e8f896cf2ef8b30a952769fa02acb253c (patch)
tree8101ec8a2bbcd09f47ec7e8c1ea8edf0e9469e7e /src/core/qpostman.cpp
parentb3c7fd36830ef71e336a97fc5e69864f29cfc628 (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.cpp27
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