diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-09-15 17:17:58 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-09-19 06:58:29 +0000 |
commit | c42f391cd2a5a713f8c7c7e576c1c1b401228c15 (patch) | |
tree | 6ad0d40a7a4f85d25c4dff426c9bb3c9a747ebb6 /editorlib | |
parent | 106f387792f5624d315865f0a9b2a901224dcac1 (diff) |
Hide the original entity loaded by scene loader
This is only necessary, because deleting scene loader entity crashes
and Qt3D doesn't propagate disabled status to child entities anymore.
Change-Id: Icc630d9f65fb94b5fa5b2ebc7e58043d2b574303
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'editorlib')
-rw-r--r-- | editorlib/src/editorsceneitemmodel.cpp | 4 | ||||
-rw-r--r-- | editorlib/src/editorutils.cpp | 10 | ||||
-rw-r--r-- | editorlib/src/editorutils.h | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/editorlib/src/editorsceneitemmodel.cpp b/editorlib/src/editorsceneitemmodel.cpp index 8460485..b575137 100644 --- a/editorlib/src/editorsceneitemmodel.cpp +++ b/editorlib/src/editorsceneitemmodel.cpp @@ -201,6 +201,10 @@ void EditorSceneItemModel::handleImportEntityLoaderStatusChanged() } else if (sceneLoader->status() == Qt3DRender::QSceneLoader::Error) { m_scene->setError(tr("Failed to import an Entity")); } + // TODO: Work around enabled false status not properly propagating to children + // TODO: Remove when fixed in Qt3D. + EditorUtils::setEnabledToSubtree(m_sceneLoaderEntity, false); + // TODO: deleteLater commented out as a workaround for entity deletion crash, // TODO: obviously causes memory leak. //m_sceneLoaderEntity->deleteLater(); diff --git a/editorlib/src/editorutils.cpp b/editorlib/src/editorutils.cpp index f499d92..82a2fe2 100644 --- a/editorlib/src/editorutils.cpp +++ b/editorlib/src/editorutils.cpp @@ -1288,6 +1288,16 @@ EditorUtils::InsertableEntities EditorUtils::insertableEntityType(Qt3DCore::QEnt return insertableType; } +void EditorUtils::setEnabledToSubtree(Qt3DCore::QEntity *entity, bool enable) +{ + entity->setEnabled(enable); + Q_FOREACH (QObject *child, entity->children()) { + Qt3DCore::QEntity *childEntity = qobject_cast<Qt3DCore::QEntity *>(child); + if (childEntity) + setEnabledToSubtree(childEntity, enable); + } +} + template <typename T> void EditorUtils::copyRenderParameters(T *source, T *target) diff --git a/editorlib/src/editorutils.h b/editorlib/src/editorutils.h index 61fcdd5..582462f 100644 --- a/editorlib/src/editorutils.h +++ b/editorlib/src/editorutils.h @@ -172,6 +172,7 @@ public: static void copyLockProperties(const QObject *source, QObject *target); static void lockProperty(const QByteArray &lockPropertyName, QObject *obj, bool lock); static InsertableEntities insertableEntityType(Qt3DCore::QEntity *entity); + static void setEnabledToSubtree(Qt3DCore::QEntity *entity, bool enable); private: // Private constructor to ensure no actual instance is created |