summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJere Tuliniemi <jere.tuliniemi@qt.io>2018-11-28 16:50:08 +0200
committerJere Tuliniemi <jere.tuliniemi@qt.io>2018-11-30 10:34:24 +0000
commit1f226b9786aac4e1210b81ac1e67aed9cad9d948 (patch)
treea508661e5646d790b534b43b517900441795ab3f
parent580f0715ee1c292bf3c5104905187ecf11c82659 (diff)
Fix issues with material renaming
Disable basic material renaming by removing the name property from the inspector, disabling rename from the timeline context menu and disabling double clicking of the basic material in the timeline. Refresh the inspector after rename to fix reverting to previous value. Force a reference update after a rename by emitting assetNameChanged. Task-number: QT3DS-2774 Change-Id: I4c1658ee8a4f206db90c46878e75cc0bb690956b Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/Authoring/Studio/Application/ProjectFile.cpp1
-rw-r--r--src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp17
-rw-r--r--src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp5
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp20
4 files changed, 32 insertions, 11 deletions
diff --git a/src/Authoring/Studio/Application/ProjectFile.cpp b/src/Authoring/Studio/Application/ProjectFile.cpp
index f314a312..4b433f06 100644
--- a/src/Authoring/Studio/Application/ProjectFile.cpp
+++ b/src/Authoring/Studio/Application/ProjectFile.cpp
@@ -823,6 +823,7 @@ void ProjectFile::renameMaterial(const QString &oldName, const QString &newName)
oldName, newName);
}
}
+ Q_EMIT assetNameChanged();
}
/**
diff --git a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
index ea6786c7..cfaa17a8 100644
--- a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
+++ b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
@@ -835,15 +835,20 @@ InspectorControlBase* InspectorControlModel::createItem(Qt3DSDMInspectable *insp
if (metaProperty.m_IsHidden)
return nullptr;
+ Q3DStudio::CString title;
+ title.Assign(metaProperty.m_FormalName.c_str());
+ if (title.IsEmpty())
+ title.Assign(metaProperty.m_Name.c_str());
+
+ // Hide name for basic materials
+ if (title == "Name" && isBasicMaterial())
+ return nullptr;
+
InspectorControlBase *item = new InspectorControlBase;
item->m_property = metaProperty.m_Property;
item->m_instance = inspectable->GetGroupInstance(groupIndex);
item->m_metaProperty = metaProperty;
- Q3DStudio::CString title;
- title.Assign(metaProperty.m_FormalName.c_str());
- if (title.IsEmpty())
- title.Assign(metaProperty.m_Name.c_str());
item->m_title = title.toQString();
const auto propertySystem = studio->GetPropertySystem();
@@ -1788,7 +1793,7 @@ void InspectorControlModel::setPropertyValue(long instance, int handle, const QV
QVector<qt3dsdm::Qt3DSDMInstanceHandle> refMats;
doc->getSceneReferencedMaterials(doc->GetSceneInstance(), refMats);
- for (auto &refMat : refMats) {
+ for (auto &refMat : qAsConst(refMats)) {
const auto origMat = bridge->getMaterialReference(refMat);
if (origMat.Valid() && (long)origMat == instance) {
sceneEditor->setMaterialSourcePath(
@@ -1811,7 +1816,7 @@ void InspectorControlModel::setPropertyValue(long instance, int handle, const QV
bridge->GetNameProperty());
g_StudioApp.GetCore()->getProjectFile().renameMaterial(
properName.toQString(), newName.toQString());
- refreshTree();
+ refresh();
doc->SetModifiedFlag();
}
break;
diff --git a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
index e8b48a4d..47df8a27 100644
--- a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
+++ b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
@@ -571,9 +571,12 @@ bool Qt3DSDMTimelineItemBinding::IsVisibleEnabled() const
bool Qt3DSDMTimelineItemBinding::IsValidTransaction(EUserTransaction inTransaction)
{
qt3dsdm::Qt3DSDMInstanceHandle theInstance = GetInstance();
+ const auto bridge = m_StudioSystem->GetClientDataModelBridge();
switch (inTransaction) {
case EUserTransaction_Rename:
- return (GetObjectType() != OBJTYPE_SCENE && GetObjectType() != OBJTYPE_IMAGE);
+ return (GetObjectType() != OBJTYPE_SCENE && GetObjectType() != OBJTYPE_IMAGE
+ && (bridge->GetObjectType(theInstance) != OBJTYPE_REFERENCEDMATERIAL
+ || bridge->GetSourcePath(theInstance).IsEmpty()));
case EUserTransaction_Duplicate:
if (theInstance.Valid())
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
index d742241a..ea520e65 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp
@@ -53,6 +53,8 @@
#include "TimeEditDlg.h"
#include "StudioClipboard.h"
#include "Dialogs.h"
+#include "Qt3DSDMStudioSystem.h"
+#include "ClientDataModelBridge.h"
#include <QtWidgets/qcombobox.h>
#include <QtWidgets/qgraphicssceneevent.h>
@@ -858,10 +860,20 @@ void TimelineGraphicsScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even
if (treeLabelItem->parentRow()->isProperty()) {
treeLabelItem->parentRow()->togglePropertyExpanded();
} else if (!treeLabelItem->isLocked()
- && treeLabelItem->parentRow()->rowType() != OBJTYPE_SCENE) {
- // Tree labels text can be edited with double-click, except for Scene label
- treeLabelItem->setEnabled(true);
- treeLabelItem->setFocus();
+ && treeLabelItem->parentRow()->rowType() != OBJTYPE_SCENE
+ && treeLabelItem->parentRow()->rowType() != OBJTYPE_IMAGE) {
+ qt3dsdm::Qt3DSDMInstanceHandle instance
+ = static_cast<Qt3DSDMTimelineItemBinding *>(
+ treeLabelItem->parentRow()->getBinding())->GetInstance();
+ const auto bridge = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()
+ ->GetClientDataModelBridge();
+ if (bridge->GetObjectType(instance) != OBJTYPE_REFERENCEDMATERIAL
+ || bridge->GetSourcePath(instance).IsEmpty()) {
+ // Tree labels text can be edited with double-click,
+ // except for Scene label and basic materials
+ treeLabelItem->setEnabled(true);
+ treeLabelItem->setFocus();
+ }
}
} else if (item->type() == TimelineItem::TypeRowTimeline) {
RowTimeline *rowTimeline = static_cast<RowTimeline *>(item);