summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2018-12-04 15:37:53 +0200
committerMahmoud Badri <mahmoud.badri@qt.io>2018-12-07 09:48:15 +0000
commitb62fc3df51e84f77abb28c518e6a5b94d973ddd7 (patch)
tree3dbd22f2ae82b182ab1a0163e36be8ee8ce81cf1
parentfe7d761863dc6f0da20319ddccd38ae3016ed2c3 (diff)
Fix a bug where undoing material type change doesnt update in the scene
Also prevent adding duplicates to the file change list Task-number: QT3DS-2768 Change-Id: I3e3f2869f6bb215ce86425a5ea25f7ea07fdffdc Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Utility/q3dsdirwatcher.cpp9
-rw-r--r--src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp24
2 files changed, 29 insertions, 4 deletions
diff --git a/src/Authoring/Client/Code/Core/Utility/q3dsdirwatcher.cpp b/src/Authoring/Client/Code/Core/Utility/q3dsdirwatcher.cpp
index 4ce3ae9d..a3601a28 100644
--- a/src/Authoring/Client/Code/Core/Utility/q3dsdirwatcher.cpp
+++ b/src/Authoring/Client/Code/Core/Utility/q3dsdirwatcher.cpp
@@ -212,11 +212,16 @@ void Q3DSDirWatcher::sendRecords()
void Q3DSDirWatcher::addRecord(const QString &path, FileModificationType::Enum type)
{
- m_records.push_back(getRecordFromCache(path, type));
+ auto iter = std::find_if(m_records.begin(), m_records.end(),
+ [&](SFileModificationRecord &m) -> bool
+ { return m.m_File == path && m.m_ModificationType == type; });
+
+ if (iter == m_records.end()) // add only unique entries
+ m_records.push_back(getRecordFromCache(path, type));
}
SFileModificationRecord Q3DSDirWatcher::getRecordFromCache(const QString &path,
- FileModificationType::Enum type)
+ FileModificationType::Enum type)
{
if (m_recordCache.contains(path)) {
m_recordCache[path].m_ModificationType = type;
diff --git a/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp b/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
index 4016fb33..10d79c02 100644
--- a/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
+++ b/src/Authoring/Studio/Palettes/Inspector/InspectorControlView.cpp
@@ -157,10 +157,30 @@ void InspectorControlView::onFilesChanged(
Q3DStudio::CFilePath::GetRelativePathFromBase(
g_StudioApp.GetCore()->GetDoc()->GetDocumentDirectory(),
record.m_File));
- if (record.m_ModificationType == Q3DStudio::FileModificationType::Created)
+
+ if (record.m_ModificationType == Q3DStudio::FileModificationType::Created) {
qt3dsdm::binary_sort_insert_unique(m_fileList, relativePath);
- else if (record.m_ModificationType == Q3DStudio::FileModificationType::Destroyed)
+ } else if (record.m_ModificationType
+ == Q3DStudio::FileModificationType::Destroyed) {
qt3dsdm::binary_sort_erase(m_fileList, relativePath);
+ } else if (record.m_ModificationType == Q3DStudio::FileModificationType::Modified) {
+ // TODO: Hot fix for a case when undoing a material type change does not update
+ // in the scene (QT3DS-2768) (any better solution?)
+ // This fix should be checked and removed if not needed after (QT3DS-2827) is
+ // fixed
+ const auto doc = g_StudioApp.GetCore()->GetDoc();
+ const auto bridge = doc->GetStudioSystem()->GetClientDataModelBridge();
+ auto mat = doc->getSceneEditor()->getMaterial(record.m_File.toQString());
+ QVector<qt3dsdm::Qt3DSDMInstanceHandle> refMats;
+ doc->getSceneReferencedMaterials(doc->GetSceneInstance(), refMats);
+ for (auto &refMat : qAsConst(refMats)) {
+ if (bridge->getMaterialReference(refMat) == mat) {
+ const auto dispatch = g_StudioApp.GetCore()->GetDispatch();
+ dispatch->FireImmediateRefreshInstance(refMat);
+ break;
+ }
+ }
+ }
} else if (isInList(fontExtensions, record.m_File.GetExtension())) {
if (record.m_ModificationType == Q3DStudio::FileModificationType::Created
|| record.m_ModificationType == Q3DStudio::FileModificationType::Destroyed) {