summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-03-29 13:56:20 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-04-02 06:00:08 +0000
commitd341649e1d5741046c3030bb368a5bec0b42085b (patch)
treee5fd84112a27be890384e103c0e411318d0aae59
parentd96f2732be3264c019d8523932ff35f714053152 (diff)
Disallow modifying default material by dragging things on it
Task-number: QT3DS-3245 Change-Id: I0ef73c495522311527fce221fb996bdcd953353e Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp9
-rw-r--r--src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h1
-rw-r--r--src/Authoring/Studio/DragAndDrop/FileDropSource.cpp13
-rw-r--r--src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp7
-rw-r--r--src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp6
-rw-r--r--src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h1
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/RowMover.cpp10
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp8
-rw-r--r--src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.h1
9 files changed, 40 insertions, 16 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
index 205d8e27..1fc0c411 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.cpp
@@ -1187,6 +1187,15 @@ QString CClientDataModelBridge::getMaterialContainerPath() const
return getMaterialContainerParentPath() + QStringLiteral(".") + getMaterialContainerName();
}
+bool CClientDataModelBridge::isDefaultMaterial(Qt3DSDMInstanceHandle instance) const
+{
+ if (!instance.Valid() || !m_DataCore->IsInstance(instance))
+ return false;
+
+ return GetObjectType(instance) == OBJTYPE_REFERENCEDMATERIAL
+ && GetSourcePath(instance) == Q3DStudio::CString::fromQString(getDefaultMaterialName());
+}
+
Qt3DSDMInstanceHandle CClientDataModelBridge::getMaterialContainer() const
{
IObjectReferenceHelper *objRefHelper = m_Doc->GetDataModelObjectReferenceHelper();
diff --git a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
index 9290f891..060fc8a2 100644
--- a/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
+++ b/src/Authoring/Client/Code/Core/Doc/ClientDataModelBridge/ClientDataModelBridge.h
@@ -378,6 +378,7 @@ public:
QString getMaterialContainerName() const;
QString getMaterialContainerParentPath() const;
QString getMaterialContainerPath() const;
+ bool isDefaultMaterial(qt3dsdm::Qt3DSDMInstanceHandle instance) const;
qt3dsdm::Qt3DSDMInstanceHandle getMaterialContainer() const;
std::set<Q3DStudio::CString> GetSourcePathList() const;
std::set<Q3DStudio::CString> GetFontFileList() const;
diff --git a/src/Authoring/Studio/DragAndDrop/FileDropSource.cpp b/src/Authoring/Studio/DragAndDrop/FileDropSource.cpp
index 944e358b..95c1b862 100644
--- a/src/Authoring/Studio/DragAndDrop/FileDropSource.cpp
+++ b/src/Authoring/Studio/DragAndDrop/FileDropSource.cpp
@@ -50,10 +50,14 @@ bool CFileDropSource::ValidateTarget(CDropTarget *inTarget)
{
using namespace Q3DStudio;
+ const auto bridge = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()
+ ->GetClientDataModelBridge();
EStudioObjectType targetType = (EStudioObjectType)inTarget->GetObjectType();
if (m_ObjectType & (OBJTYPE_PRESENTATION | OBJTYPE_QML_STREAM)) {
- SetHasValidTarget(targetType & (OBJTYPE_LAYER | OBJTYPE_MATERIAL | OBJTYPE_CUSTOMMATERIAL
- | OBJTYPE_REFERENCEDMATERIAL | OBJTYPE_IMAGE));
+ SetHasValidTarget(!bridge->isDefaultMaterial(inTarget->GetInstance())
+ && (targetType & (OBJTYPE_LAYER | OBJTYPE_MATERIAL
+ | OBJTYPE_CUSTOMMATERIAL | OBJTYPE_REFERENCEDMATERIAL
+ | OBJTYPE_IMAGE)));
return m_HasValidTarget;
}
@@ -71,11 +75,8 @@ bool CFileDropSource::ValidateTarget(CDropTarget *inTarget)
if (!targetIsValid && m_FileType == DocumentEditorFileType::Image) {
if (targetType & (OBJTYPE_MATERIAL | OBJTYPE_CUSTOMMATERIAL | OBJTYPE_REFERENCEDMATERIAL
| OBJTYPE_IMAGE)) {
- const auto bridge = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()
- ->GetClientDataModelBridge();
// Default material shouldn't be targeatable
- targetIsValid = bridge->GetSourcePath(inTarget->GetInstance()).toQString()
- != bridge->getDefaultMaterialName();
+ targetIsValid = !bridge->isDefaultMaterial(inTarget->GetInstance());
} else {
// Image isn't normally acceptable child of a scene, but dropping image on scene
// will create a rect with image as texture on active layer
diff --git a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
index 594455ea..47f9f7a5 100644
--- a/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
+++ b/src/Authoring/Studio/Palettes/Inspector/InspectorControlModel.cpp
@@ -233,12 +233,7 @@ bool InspectorControlModel::isDefaultMaterial() const
if (const auto inspectable = dynamic_cast<Qt3DSDMInspectable *>(m_inspectableBase))
instance = inspectable->GetGroupInstance(0);
- if (!instance.Valid() || !bridge->IsSceneGraphInstance(instance))
- return false;
-
- return bridge->GetObjectType(instance) == OBJTYPE_REFERENCEDMATERIAL
- && bridge->GetSourcePath(instance) == Q3DStudio::CString::fromQString(
- bridge->getDefaultMaterialName());
+ return bridge->isDefaultMaterial(instance);
}
bool InspectorControlModel::isAnimatableMaterial() const
diff --git a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
index 0297e17e..37b830b4 100644
--- a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
+++ b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
@@ -863,6 +863,12 @@ bool Qt3DSDMTimelineItemBinding::isRootComponent() const
return bridge->IsActiveComponent(m_DataHandle);
}
+bool Qt3DSDMTimelineItemBinding::isDefaultMaterial() const
+{
+ auto bridge = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem()->GetClientDataModelBridge();
+ return bridge->isDefaultMaterial(m_DataHandle);
+}
+
ITimelineItemProperty *
Qt3DSDMTimelineItemBinding::GetOrCreatePropertyBinding(Qt3DSDMPropertyHandle inPropertyHandle)
{
diff --git a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
index f8b5f0de..39c81c6d 100644
--- a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
+++ b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.h
@@ -185,6 +185,7 @@ public:
ITimelineItemProperty *GetPropertyBinding(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle);
bool isRootComponent() const;
+ bool isDefaultMaterial() const;
protected:
virtual ITimelineTimebar *CreateTimelineTimebar();
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowMover.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowMover.cpp
index aba37959..4641753b 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowMover.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/RowMover.cpp
@@ -227,9 +227,10 @@ void RowMover::updateTargetRow(const QPointF &scenePos, EStudioObjectType rowTyp
m_insertionTarget->setDnDState(RowTree::DnDState::SP_TARGET);
}
} else {
- if (rowAtMouse->rowType() == OBJTYPE_LAYER
- || rowAtMouse->rowType() == OBJTYPE_MATERIAL
- || rowAtMouse->rowType() == OBJTYPE_IMAGE) {
+ if ((rowAtMouse->rowType() == OBJTYPE_LAYER
+ || rowAtMouse->rowType() == OBJTYPE_MATERIAL
+ || rowAtMouse->rowType() == OBJTYPE_IMAGE)
+ && !rowAtMouse->isDefaultMaterial()) {
m_insertionTarget->setDnDState(RowTree::DnDState::SP_TARGET);
}
}
@@ -248,7 +249,8 @@ void RowMover::updateTargetRow(const QPointF &scenePos, EStudioObjectType rowTyp
if (rowAtMouse) {
double y = rowAtMouse->mapFromScene(scenePos).y();
if (y > TimelineConstants::ROW_H * .25 && y < TimelineConstants::ROW_H * .75) {
- if (rowAtMouse->rowType() & (OBJTYPE_LAYER | OBJTYPE_MATERIAL | OBJTYPE_IMAGE)) {
+ if (rowAtMouse->rowType() & (OBJTYPE_LAYER | OBJTYPE_MATERIAL | OBJTYPE_IMAGE)
+ && !rowAtMouse->isDefaultMaterial()) {
m_rowAutoExpand = nullptr;
m_autoExpandTimer.stop();
setVisible(false);
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
index b953c836..8015459a 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.cpp
@@ -1197,6 +1197,14 @@ bool RowTree::isMaster() const
return m_master;
}
+bool RowTree::isDefaultMaterial() const
+{
+ if (m_binding)
+ return static_cast<Qt3DSDMTimelineItemBinding *>(m_binding)->isDefaultMaterial();
+
+ return false;
+}
+
bool RowTree::empty() const
{
return m_childRows.empty() && m_childProps.empty();
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.h
index 41d3d7cb..7ac04c11 100644
--- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.h
+++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/ui/RowTree.h
@@ -114,6 +114,7 @@ public:
bool isComponent() const;
bool isComponentRoot() const;
bool isMaster() const;
+ bool isDefaultMaterial() const;
bool hasPropertyChildren() const;
bool empty() const; // has zero child rows (and zero properties)
bool selected() const;