diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-09-17 16:38:50 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-09-30 10:21:54 +0200 |
commit | 143b5de7bf788c0e07e460c3c6150861a7eaaf7d (patch) | |
tree | b4c87167ae7708b2b65de8e398c919dd75629f6f /src/render/frontend/qabstractsceneloader.cpp | |
parent | 7acc347bee7bccca53269ae85417e68102dc79a1 (diff) |
Refactored QAbstractSceneLoader and QSceneLoader
QNode, also to make deep clones and shallow clones.
Change-Id: I38362485e3f7870da3d49aba95603fe4d61876fe
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qabstractsceneloader.cpp')
-rw-r--r-- | src/render/frontend/qabstractsceneloader.cpp | 98 |
1 files changed, 8 insertions, 90 deletions
diff --git a/src/render/frontend/qabstractsceneloader.cpp b/src/render/frontend/qabstractsceneloader.cpp index 2b0220c9b..f7bb8eec2 100644 --- a/src/render/frontend/qabstractsceneloader.cpp +++ b/src/render/frontend/qabstractsceneloader.cpp @@ -54,9 +54,7 @@ namespace Render { QAbstractSceneLoaderPrivate::QAbstractSceneLoaderPrivate(QAbstractSceneLoader *qq) : QComponentPrivate(qq) - , m_sceneNode(Q_NULLPTR) - , m_sceneChild(Q_NULLPTR) - , m_currentParser(Q_NULLPTR) + , m_status(QAbstractSceneLoader::Loading) { } @@ -68,8 +66,6 @@ QAbstractSceneLoader::QAbstractSceneLoader(QAbstractSceneLoaderPrivate &dd, QNod QAbstractSceneLoader::QAbstractSceneLoader(QNode *parent) : QComponent(*new QAbstractSceneLoaderPrivate(this), parent) { - Q_D(QAbstractSceneLoader); - d->m_sceneNode = this; } void QAbstractSceneLoader::copy(const QNode *ref) @@ -77,7 +73,6 @@ void QAbstractSceneLoader::copy(const QNode *ref) Q_D(QAbstractSceneLoader); const QAbstractSceneLoader *s = qobject_cast<const QAbstractSceneLoader *>(ref); if (s != Q_NULLPTR) { - d->m_sceneId = s->sceneId(); d->m_source = s->source(); } } @@ -88,43 +83,11 @@ QString QAbstractSceneLoader::source() const return d->m_source; } -QString QAbstractSceneLoader::sceneId() const -{ - Q_D(const QAbstractSceneLoader); - return d->m_sceneId; -} - -QAbstractSceneLoader *QAbstractSceneLoader::findInTree(QNode *root) -{ - if (!root) - return Q_NULLPTR; - - QAbstractSceneLoader* s = qobject_cast<QAbstractSceneLoader*>(root); - if (s) - return s; - - // recursive walk down the tree - foreach (QNode* nd, root->children()) { - s = findInTree(nd); - if (s) - return s; - } - - return Q_NULLPTR; -} - -void QAbstractSceneLoader::clear() -{ - Q_D(QAbstractSceneLoader); - d->m_sceneNode->removeAllChildren(); -} - void QAbstractSceneLoader::setSource(QString arg) { Q_D(QAbstractSceneLoader); if (d->m_source != arg) { d->m_source = arg; - rebuild(); emit sourceChanged(arg); QScenePropertyChangePtr change(new QScenePropertyChange(ComponentUpdated, this)); change->setPropertyName(QByteArrayLiteral("source")); @@ -133,64 +96,19 @@ void QAbstractSceneLoader::setSource(QString arg) } } -void QAbstractSceneLoader::setSceneId(QString arg) +QAbstractSceneLoader::Status QAbstractSceneLoader::status() const { - Q_D(QAbstractSceneLoader); - if (d->m_sceneId != arg) { - d->m_sceneId = arg; - rebuild(); - emit sceneIdChanged(arg); - } -} - -QNode *QAbstractSceneLoader::node(QString id) -{ - Q_D(QAbstractSceneLoader); - if (d->m_currentParser) - return d->m_currentParser->node(id); - return Q_NULLPTR; -} - -QNode *QAbstractSceneLoader::scene(QString id) -{ - Q_D(QAbstractSceneLoader); - if (d->m_currentParser) - return d->m_currentParser->scene(id); - return Q_NULLPTR; + Q_D(const QAbstractSceneLoader); + return d->m_status; } -// Move that into a jobs -void QAbstractSceneLoader::rebuild() +void QAbstractSceneLoader::setStatus(QAbstractSceneLoader::Status status) { Q_D(QAbstractSceneLoader); - if (d->m_sceneChild != Q_NULLPTR) { - d->m_sceneNode->removeChild(d->m_sceneChild); - d->m_sceneChild->deleteLater(); - } - - // Make scene parsers plugins - QList<AbstractSceneParser *> parsers; - parsers << new GLTFParser();// << new AssimpParser(); - - // TO DO: Load Scene Parsers - - bool parserFound = false; - Q_FOREACH (AbstractSceneParser *parser, parsers) { - if (parser->isPathExtensionSupported(d->m_source)) { - if (d->m_currentParser != Q_NULLPTR && parser != d->m_currentParser) { - delete d->m_currentParser; - d->m_currentParser = parser; - } - qCDebug(Render::Io) << Q_FUNC_INFO << parser; - parser->setFilePath(d->m_source); - if ((d->m_sceneChild = parser->scene(d->m_sceneId)) != Q_NULLPTR) - d->m_sceneNode->addChild(d->m_sceneChild); - parserFound = true; - break; - } + if (d->m_status != status) { + d->m_status = status; + emit statusChanged(); } - if (!parserFound) - qCWarning(Render::Frontend) << Q_FUNC_INFO << "Scene file format not supported by Qt3D"; } } // Render |