summaryrefslogtreecommitdiffstats
path: root/editorlib
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2016-09-15 17:17:58 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2016-09-19 06:58:29 +0000
commitc42f391cd2a5a713f8c7c7e576c1c1b401228c15 (patch)
tree6ad0d40a7a4f85d25c4dff426c9bb3c9a747ebb6 /editorlib
parent106f387792f5624d315865f0a9b2a901224dcac1 (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.cpp4
-rw-r--r--editorlib/src/editorutils.cpp10
-rw-r--r--editorlib/src/editorutils.h1
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