diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-03-29 13:56:20 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-04-02 06:00:08 +0000 |
commit | d341649e1d5741046c3030bb368a5bec0b42085b (patch) | |
tree | e5fd84112a27be890384e103c0e411318d0aae59 | |
parent | d96f2732be3264c019d8523932ff35f714053152 (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>
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; |