diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/aspects/qabstractaspect.cpp | 5 | ||||
-rw-r--r-- | src/core/aspects/qabstractaspect.h | 1 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine.cpp | 22 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine.h | 1 | ||||
-rw-r--r-- | src/core/aspects/qaspectmanager.cpp | 7 | ||||
-rw-r--r-- | src/core/aspects/qaspectmanager_p.h | 1 |
6 files changed, 33 insertions, 4 deletions
diff --git a/src/core/aspects/qabstractaspect.cpp b/src/core/aspects/qabstractaspect.cpp index f01124e19..3217d10b3 100644 --- a/src/core/aspects/qabstractaspect.cpp +++ b/src/core/aspects/qabstractaspect.cpp @@ -422,6 +422,11 @@ void QAbstractAspect::scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job) d->m_singleShotJobs.push_back(job); } +QStringList QAbstractAspect::dependencies() const +{ + return {}; +} + namespace Debug { AsynchronousCommandReply::AsynchronousCommandReply(const QString &commandName, QObject *parent) diff --git a/src/core/aspects/qabstractaspect.h b/src/core/aspects/qabstractaspect.h index 4dcc59cec..144f267cf 100644 --- a/src/core/aspects/qabstractaspect.h +++ b/src/core/aspects/qabstractaspect.h @@ -69,6 +69,7 @@ public: ~QAbstractAspect(); void scheduleSingleShotJob(const Qt3DCore::QAspectJobPtr &job); + virtual QStringList dependencies() const; protected: explicit QAbstractAspect(QAbstractAspectPrivate &dd, QObject *parent = nullptr); diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp index 946355d05..8ede0905d 100644 --- a/src/core/aspects/qaspectengine.cpp +++ b/src/core/aspects/qaspectengine.cpp @@ -296,10 +296,13 @@ void QAspectEnginePrivate::exitSimulationLoop() void QAspectEngine::registerAspect(QAbstractAspect *aspect) { Q_D(QAspectEngine); - // The aspect is moved to the AspectThread - // AspectManager::registerAspect is called in the context - // of the AspectThread. This is turns call aspect->onInitialize - // still in the same AspectThread context + + const QStringList dependencies = aspect->dependencies(); + for (const auto &name: dependencies) { + if (!d->m_namedAspects.contains(name)) + registerAspect(name); + } + d->m_aspects << aspect; d->m_aspectManager->registerAspect(aspect); } @@ -378,6 +381,17 @@ QVector<QAbstractAspect *> QAspectEngine::aspects() const } /*! + * \return the asepect matching the \a name + * + * \note Required that the aspect was registered by name + */ +QAbstractAspect *QAspectEngine::aspect(const QString &name) const +{ + Q_D(const QAspectEngine); + return d->m_namedAspects.value(name, nullptr); +} + +/*! * Executes the given \a command on aspect engine. Valid commands are: * \list * \li "list aspects" diff --git a/src/core/aspects/qaspectengine.h b/src/core/aspects/qaspectengine.h index ac34e0c54..71662a27e 100644 --- a/src/core/aspects/qaspectengine.h +++ b/src/core/aspects/qaspectengine.h @@ -82,6 +82,7 @@ public: void unregisterAspect(const QString &name); QVector<QAbstractAspect*> aspects() const; + QAbstractAspect *aspect(const QString &name) const; QVariant executeCommand(const QString &command); diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp index aac209588..a327ddaf8 100644 --- a/src/core/aspects/qaspectmanager.cpp +++ b/src/core/aspects/qaspectmanager.cpp @@ -51,6 +51,7 @@ #include <Qt3DCore/private/qabstractaspect_p.h> #include <Qt3DCore/private/qabstractaspectjobmanager_p.h> #include <Qt3DCore/private/qabstractframeadvanceservice_p.h> +#include <Qt3DCore/private/qaspectengine_p.h> // TODO Make the kind of job manager configurable (e.g. ThreadWeaver vs Intel TBB) #include <Qt3DCore/private/qaspectjobmanager_p.h> #include <Qt3DCore/private/qaspectjob_p.h> @@ -395,6 +396,12 @@ const QVector<QAbstractAspect *> &QAspectManager::aspects() const return m_aspects; } +QAbstractAspect *QAspectManager::aspect(const QString &name) const +{ + auto dengine = QAspectEnginePrivate::get(m_engine); + return dengine->m_namedAspects.value(name, nullptr); +} + QAbstractAspectJobManager *QAspectManager::jobManager() const { return m_jobManager; diff --git a/src/core/aspects/qaspectmanager_p.h b/src/core/aspects/qaspectmanager_p.h index d3b3992fe..9633149f6 100644 --- a/src/core/aspects/qaspectmanager_p.h +++ b/src/core/aspects/qaspectmanager_p.h @@ -110,6 +110,7 @@ public Q_SLOTS: public: const QVector<QAbstractAspect *> &aspects() const; + QAbstractAspect *aspect(const QString &name) const; QAbstractAspectJobManager *jobManager() const; QChangeArbiter *changeArbiter() const; QServiceLocator *serviceLocator() const; |