summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2018-11-30 16:13:30 +0200
committerJere Tuliniemi <jere.tuliniemi@qt.io>2018-12-03 09:12:09 +0000
commit911b1715659a8721ce0dc5d60289cd0feeec534f (patch)
tree312dabe68c73fc56a004316bfb530b15f427d8f6
parent4d9818a19db4e793423d5ab3c29044ef19f6d235 (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.cpp27
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) {