From e3c6e9d38a5b6f729093fc0349784fa475af8f62 Mon Sep 17 00:00:00 2001 From: Janne Kangas Date: Fri, 15 Dec 2017 11:53:56 +0200 Subject: [DataInput] Update datainput control list when target is renamed Update datainput control list when a controlled element changes name. Change-Id: I2c072aafd0850410ab71b4c81bc8e9774e4f5f20 Task-Id: QT3DS-337 Reviewed-by: Miikka Heikkinen --- src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp | 6 ++++-- src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h | 2 +- .../Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp | 13 +++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp index 3ac72680..3b5c2455 100644 --- a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp +++ b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp @@ -2628,10 +2628,12 @@ public: } } - // Called when controlled instance is moved inside scene graph and + // Called when controlled instance is renamed or moved inside scene graph and // controlling datanode must update the instance path - void UpdateDataInputTarget(TInstanceHandle instance, CString oldPath) + void UpdateDataInputTarget(TInstanceHandle instance, CString oldPath) override { + if (!IsControlled(instance)) + return; SComposerObjectDefinitions &objDefinitions(m_Bridge.GetObjectDefinitions()); // TODO: Text-element specific code Option currentControlledProperty = GetInstancePropertyValue( diff --git a/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h b/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h index 500bf2a2..3c35ea16 100644 --- a/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h +++ b/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h @@ -282,7 +282,7 @@ public: theInstances.push_back(inInstance); RearrangeObjects(theInstances, inDest, inInsertType); } - + virtual void UpdateDataInputTarget(TInstanceHandle instance, CString oldPath) = 0; // Returns the new component. virtual TInstanceHandle MakeComponent(const qt3dsdm::TInstanceHandleList &inInstances) = 0; diff --git a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp index 609fb1d3..c9334798 100644 --- a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp +++ b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp @@ -346,6 +346,7 @@ void Qt3DSDMTimelineItemBinding::SetName(const Q3DStudio::CString &inName) return; } + Q3DStudio::CString oldPath = GetObjectPath(); CClientDataModelBridge *theBridge = m_StudioSystem->GetClientDataModelBridge(); if (!theBridge->CheckNameUnique(m_DataHandle, inName)) { QString theTitle = QObject::tr("Rename Object Error"); @@ -355,8 +356,12 @@ void Qt3DSDMTimelineItemBinding::SetName(const Q3DStudio::CString &inName) theTitle, theString, Qt3DSMessageBox::ICON_WARNING); if (theUserChoice == QMessageBox::Yes) { // Set with the unique name - Q3DStudio::SCOPED_DOCUMENT_EDITOR(*m_TransMgr->GetDoc(), QObject::tr("Set Name")) - ->SetName(m_DataHandle, inName, true); + Q3DStudio::SCOPED_DOCUMENT_EDITOR( + *m_TransMgr->GetDoc(), QObject::tr("Set Name")) + ->SetName(m_DataHandle, inName, true); + Q3DStudio::SCOPED_DOCUMENT_EDITOR( + *m_TransMgr->GetDoc(), QObject::tr("Update DataInput target path")) + ->UpdateDataInputTarget(m_DataHandle, oldPath); return; } } @@ -364,9 +369,13 @@ void Qt3DSDMTimelineItemBinding::SetName(const Q3DStudio::CString &inName) Qt3DSDMPropertyHandle theNamePropHandle = m_StudioSystem->GetPropertySystem()->GetAggregateInstancePropertyByName(m_DataHandle, L"name"); + Q3DStudio::SCOPED_DOCUMENT_EDITOR(*m_TransMgr->GetDoc(), QObject::tr("Set Name")) ->SetInstancePropertyValue(m_DataHandle, theNamePropHandle, std::make_shared(inName)); + Q3DStudio::SCOPED_DOCUMENT_EDITOR(*m_TransMgr->GetDoc(), + QObject::tr("Update DataInput target path")) + ->UpdateDataInputTarget(m_DataHandle, oldPath); } ITimelineItem *Qt3DSDMTimelineItemBinding::GetTimelineItem() -- cgit v1.2.3