diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-08-11 11:11:43 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2016-08-23 06:28:58 +0000 |
commit | 0f2dbaf025513ce906fc08b5153dea15142ff35a (patch) | |
tree | 54b1817cc7550afaac39479c2540fda5702c727a | |
parent | e8bdcd57657e427bdc9a7bfef58033015b0b299f (diff) |
Scene: add a setStatus method
Will allow to set the status in the backend and update the frontend with it.
Change-Id: Iac47e9960b8ef56c4e45ea31c616c4bc2a8f3444
Task-number: QTBUG-54889
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/io/scene.cpp | 10 | ||||
-rw-r--r-- | src/render/io/scene_p.h | 2 | ||||
-rw-r--r-- | tests/auto/render/sceneloader/tst_sceneloader.cpp | 22 |
3 files changed, 34 insertions, 0 deletions
diff --git a/src/render/io/scene.cpp b/src/render/io/scene.cpp index bfb5e4571..cf1ca4736 100644 --- a/src/render/io/scene.cpp +++ b/src/render/io/scene.cpp @@ -65,6 +65,16 @@ void Scene::cleanup() m_source.clear(); } +void Scene::setStatus(QSceneLoader::Status status) +{ + // Send the new subtree to the frontend or notify failure + auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); + e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); + e->setPropertyName("status"); + e->setValue(QVariant::fromValue(status)); + notifyObservers(e); +} + void Scene::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) { const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QSceneLoaderData>>(change); diff --git a/src/render/io/scene_p.h b/src/render/io/scene_p.h index fc3494489..42e3121c9 100644 --- a/src/render/io/scene_p.h +++ b/src/render/io/scene_p.h @@ -52,6 +52,7 @@ // #include <Qt3DRender/private/backendnode_p.h> +#include <Qt3DRender/qsceneloader.h> #include <QtGlobal> #include <QUrl> @@ -77,6 +78,7 @@ public: void setSceneManager(SceneManager *manager); void cleanup(); + void setStatus(QSceneLoader::Status status); private: void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; diff --git a/tests/auto/render/sceneloader/tst_sceneloader.cpp b/tests/auto/render/sceneloader/tst_sceneloader.cpp index 7d31590d9..05f4f08b6 100644 --- a/tests/auto/render/sceneloader/tst_sceneloader.cpp +++ b/tests/auto/render/sceneloader/tst_sceneloader.cpp @@ -149,6 +149,28 @@ private Q_SLOTS: arbiter.events.clear(); } + + void checkStatusTransmission() + { + // GIVEN + TestRenderer renderer; + TestArbiter arbiter; + Qt3DRender::Render::Scene sceneLoader; + + Qt3DCore::QBackendNodePrivate::get(&sceneLoader)->setArbiter(&arbiter); + sceneLoader.setRenderer(&renderer); + + // WHEN + sceneLoader.setStatus(Qt3DRender::QSceneLoader::Ready); + + // THEN + Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>(); + QCOMPARE(arbiter.events.count(), 1); + QCOMPARE(change->propertyName(), "status"); + QCOMPARE(change->value().value<Qt3DRender::QSceneLoader::Status>(), Qt3DRender::QSceneLoader::Ready); + + arbiter.events.clear(); + } }; // Note: setSceneSubtree needs a QCoreApplication |