diff options
author | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2018-11-30 16:13:30 +0200 |
---|---|---|
committer | Jere Tuliniemi <jere.tuliniemi@qt.io> | 2018-12-03 09:12:09 +0000 |
commit | 911b1715659a8721ce0dc5d60289cd0feeec534f (patch) | |
tree | 312dabe68c73fc56a004316bfb530b15f427d8f6 | |
parent | 4d9818a19db4e793423d5ab3c29044ef19f6d235 (diff) |
Check if a matdef file exists when renaming matdef
Materialdef shouldn't be able to be named the same as an unused
materialdef. Previous checks only applied to matdefs used in the scene.
Change-Id: Iab9882cdcc3b035dcbdfb480f33297330a258dfa
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r-- | src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp index 166cc8f2..33ca1461 100644 --- a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp +++ b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp @@ -1761,7 +1761,8 @@ void InspectorControlModel::setPropertyValue(long instance, int handle, const QV if (!bridge->CheckNameUnique(parentInstance, instance, realNewName)) { QString origNewName = newName.toQString(); - newName = bridge->GetUniqueChildName(parentInstance, instance, realNewName); + realNewName = bridge->GetUniqueChildName(parentInstance, instance, realNewName); + newName = realNewName; if (bridge->isInsideMaterialContainer(instance)) { int slashIndex = newName.rfind('/'); if (slashIndex != Q3DStudio::CString::ENDOFSTRING) @@ -1772,9 +1773,31 @@ void InspectorControlModel::setPropertyValue(long instance, int handle, const QV g_StudioApp.GetDialogs()->DisplayObjectRenamed(origNewName, newName.toQString(), true); } + + const auto sceneEditor = doc->getSceneEditor(); + + // A materialdef with the same name might exists as a file but not in the container, + // so an additional check is needed for that case + if (bridge->isInsideMaterialContainer(instance)) { + int i = 1; + while (QFileInfo(sceneEditor->getFilePathFromMaterialName( + realNewName.toQString())).exists()) { + ++i; + realNewName = Q3DStudio::CString::fromQString( + realNewName.toQString() + QString::number(i)); + if (!bridge->CheckNameUnique(parentInstance, instance, realNewName)) { + realNewName = bridge->GetUniqueChildName( + parentInstance, instance, realNewName); + } + } + newName = realNewName; + int slashIndex = newName.rfind('/'); + if (slashIndex != Q3DStudio::CString::ENDOFSTRING) + newName = newName.substr(slashIndex + 1); + } + if (newName != currentName) { if (bridge->isInsideMaterialContainer(instance)) { - const auto sceneEditor = doc->getSceneEditor(); const auto properOldName = sceneEditor->GetName(instance).toQString(); const auto dirPath = doc->GetDocumentDirectory().toQString(); for (size_t matIdx = 0, end = m_matDatas.size(); matIdx < end; ++matIdx) { |