diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2015-12-02 17:03:29 +0100 |
---|---|---|
committer | Kevin Ottens <kevin.ottens@kdab.com> | 2015-12-03 11:44:10 +0000 |
commit | 8a49e06fbbeff56993fe74868400b33709b24ac8 (patch) | |
tree | a7d3001ace9fcd1fc4a92d12f350a45289dd3fc4 /src/core | |
parent | c45b47e99eaf0bcecec606a304b338424d58561b (diff) |
Factor out in QAbstractAspect common behavior
There was code involving the node visitor duplicated in several aspect,
move that logic back into their common base class: QAbstractAspect.
Change-Id: I47320e93691edb43e3cccdd81753423816ad955d
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/aspects/qabstractaspect.cpp | 30 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.h | 8 |
2 files changed, 37 insertions, 1 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index 8c2e58939..3db95d315 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -41,6 +41,8 @@ #include <Qt3DCore/private/qaspectjobmanager_p.h> #include <private/qchangearbiter_p.h> #include <Qt3DCore/private/qscene_p.h> +#include <Qt3DCore/qnodevisitor.h> +#include <Qt3DCore/qscenepropertychange.h> QT_BEGIN_NAMESPACE @@ -92,6 +94,23 @@ void QAbstractAspect::registerBackendType(const QMetaObject &obj, const QBackend d->m_backendCreatorFunctors.insert(className(obj), functor); } +void QAbstractAspect::sceneNodeAdded(QSceneChangePtr &e) +{ + QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>(); + QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); + QNode *n = nodePtr.data(); + QNodeVisitor visitor; + visitor.traverse(n, this, &QAbstractAspect::visitNode); +} + +void QAbstractAspect::sceneNodeRemoved(QSceneChangePtr &e) +{ + QScenePropertyChangePtr propertyChange = e.staticCast<QScenePropertyChange>(); + QNodePtr nodePtr = propertyChange->value().value<QNodePtr>(); + QNode *n = nodePtr.data(); + QAbstractAspect::clearBackendNode(n); +} + QVariant QAbstractAspect::executeCommand(const QStringList &args) { Q_UNUSED(args); @@ -167,6 +186,12 @@ void QAbstractAspect::clearBackendNode(QNode *frontend) const } } +void QAbstractAspect::setRootEntity(QEntity *rootObject) +{ + QNodeVisitor visitor; + visitor.traverse(rootObject, this, &QAbstractAspect::visitNode); +} + void QAbstractAspect::registerAspect(QEntity *rootObject) { Q_D(QAbstractAspect); @@ -203,6 +228,11 @@ void QAbstractAspect::onShutdown() { } +void QAbstractAspect::visitNode(QNode *node) +{ + createBackendNode(node); +} + } // of namespace Qt3DCore QT_END_NAMESPACE diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h index 1aec7aa5f..7d121d9ae 100644 --- a/src/core/aspects/qabstractaspect.h +++ b/src/core/aspects/qabstractaspect.h @@ -81,6 +81,9 @@ public: void registerBackendType(const QBackendNodeFunctorPtr &functor); void registerBackendType(const QMetaObject &, const QBackendNodeFunctorPtr &functor); + void sceneNodeAdded(Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; + void sceneNodeRemoved(Qt3DCore::QSceneChangePtr &e) Q_DECL_OVERRIDE; + virtual QVariant executeCommand(const QStringList &args); protected: @@ -90,13 +93,16 @@ protected: QBackendNode *getBackendNode(QNode *frontend) const; void clearBackendNode(QNode *frontend) const; + virtual void setRootEntity(QEntity *rootObject); + private: - virtual void setRootEntity(QEntity *rootObject) = 0; virtual void onInitialize(const QVariantMap &data) = 0; virtual void onStartup(); virtual void onShutdown(); virtual void onCleanup() = 0; + virtual void visitNode(QNode *node); + Q_DECLARE_PRIVATE(QAbstractAspect) friend class QAspectManager; }; |