summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-11 11:11:43 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-08-23 06:28:58 +0000
commit0f2dbaf025513ce906fc08b5153dea15142ff35a (patch)
tree54b1817cc7550afaac39479c2540fda5702c727a
parente8bdcd57657e427bdc9a7bfef58033015b0b299f (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.cpp10
-rw-r--r--src/render/io/scene_p.h2
-rw-r--r--tests/auto/render/sceneloader/tst_sceneloader.cpp22
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