summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomi Korpipaa <tomi.korpipaa@qt.io>2018-05-04 10:11:44 +0300
committerTomi Korpipää <tomi.korpipaa@qt.io>2018-05-04 11:02:47 +0000
commite6e89d6a62deb11d51947e1ae3f391150db407cc (patch)
treebb82bec120ec96791beed2a36ae55f50927db100
parent308dba44c93ded6ccf1ea3933056500193c12945 (diff)
Replace Ctrl+D duplicate with alias
Replace deep copy duplicate with alias duplicate. Task-number: QT3DS-1525 Change-Id: I98eeaf3003e2f6ebc6206b52a85ed8a44363dcd8 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/Authoring/Client/Code/Core/Doc/Doc.cpp12
-rw-r--r--src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp35
-rw-r--r--src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h3
-rw-r--r--src/Authoring/Studio/MainFrm.ui3
-rw-r--r--src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp2
5 files changed, 45 insertions, 10 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/Doc.cpp b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
index b64ceea7..d947e4f1 100644
--- a/src/Authoring/Client/Code/Core/Doc/Doc.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/Doc.cpp
@@ -1970,19 +1970,13 @@ bool CDoc::CanCut()
//==============================================================================
/**
* Handles the duplicate command passed by mainframe.
- * Makes a copy of the currently selected item (if there is one) and attaches
+ * Makes an alias copy of the currently selected item (if there is one) and attaches
* it to the same parent as the original.
*/
void CDoc::HandleDuplicateCommand()
{
- qt3dsdm::Qt3DSDMInstanceHandle theSelectedInstance = GetSelectedInstance();
-
- // If we have a valid object to duplicate
- if (m_StudioSystem->GetClientDataModelBridge()->IsDuplicateable(theSelectedInstance)) {
- using namespace Q3DStudio;
- SCOPED_DOCUMENT_EDITOR(*this, QObject::tr("Duplicate Object"))
- ->DuplicateInstance(GetSelectedInstance());
- }
+ Q3DStudio::SCOPED_DOCUMENT_EDITOR(*this, QObject::tr("Alias Duplicate"))
+ ->CreateAliasDuplicates(GetSelectedValue().GetSelectedInstances(), GetActiveSlide());
}
//=============================================================================
diff --git a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp
index e58e6007..1de23ac5 100644
--- a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp
+++ b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp
@@ -85,6 +85,7 @@
#include <QtCore/qdir.h>
#include <unordered_set>
#include "Runtime/Include/q3dsqmlbehavior.h"
+#include "DataModelObjectReferenceHelper.h"
namespace {
@@ -2380,6 +2381,40 @@ public:
return component;
}
+ void CreateAliasDuplicates(const qt3dsdm::TInstanceHandleList &inInstances,
+ qt3dsdm::Qt3DSDMSlideHandle theSlide) override
+ {
+ for (int i = 0; i < inInstances.size(); i++) {
+ qt3dsdm::Qt3DSDMInstanceHandle theSelectedInstance = inInstances.at(i);
+ if (m_Bridge.IsDuplicateable(theSelectedInstance)) {
+ CPt thePoint(0, 0);
+ Qt3DSDMInstanceHandle addedInstance = CreateSceneGraphInstance(
+ ComposerObjectTypes::Alias, theSelectedInstance, theSlide,
+ DocumentEditorInsertType::NextSibling, thePoint,
+ PRIMITIVETYPE_UNKNOWN, -1);
+
+ // Compose name and verify it's unique
+ Q3DStudio::CString name = m_Bridge.GetName(addedInstance);
+ name.append(m_Bridge.GetName(theSelectedInstance));
+ if (!m_Bridge.CheckNameUnique(addedInstance, name)) {
+ name = m_Bridge.GetUniqueChildName(m_Bridge.GetParentInstance(addedInstance),
+ addedInstance, name);
+ }
+ m_Bridge.SetName(addedInstance, name);
+
+ // Object reference
+ qt3dsdm::SObjectRefType objRef =
+ m_Doc.GetDataModelObjectReferenceHelper()->GetAssetRefValue(
+ theSelectedInstance, addedInstance,
+ CRelativePathTools::EPathType::EPATHTYPE_GUID);
+ qt3dsdm::Qt3DSDMPropertyHandle theProperty =
+ m_Doc.GetPropertySystem()->GetAggregateInstancePropertyByName(
+ addedInstance, L"referencednode");
+ SetInstancePropertyValue(addedInstance, theProperty, objRef);
+ }
+ }
+ }
+
void DuplicateInstances(const qt3dsdm::TInstanceHandleList &inInstances) override
{
diff --git a/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h b/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h
index 694267a7..8793d731 100644
--- a/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h
+++ b/src/Authoring/Client/Code/Core/Doc/IDocumentEditor.h
@@ -290,6 +290,9 @@ public:
// Returns the new component.
virtual TInstanceHandle MakeComponent(const qt3dsdm::TInstanceHandleList &inInstances) = 0;
+ virtual void CreateAliasDuplicates(const qt3dsdm::TInstanceHandleList &inInstances,
+ qt3dsdm::Qt3DSDMSlideHandle theSlide) = 0;
+
virtual qt3dsdm::TInstanceHandleList
DuplicateInstances(const qt3dsdm::TInstanceHandleList &inInstances, TInstanceHandle inDest,
DocumentEditorInsertType::Enum inInsertType) = 0;
diff --git a/src/Authoring/Studio/MainFrm.ui b/src/Authoring/Studio/MainFrm.ui
index a28a8e8b..c4b2e911 100644
--- a/src/Authoring/Studio/MainFrm.ui
+++ b/src/Authoring/Studio/MainFrm.ui
@@ -455,6 +455,9 @@
<property name="text">
<string>&amp;Duplicate</string>
</property>
+ <property name="toolTip">
+ <string>Create an Alias Duplicate</string>
+ </property>
<property name="shortcut">
<string>Ctrl+D</string>
</property>
diff --git a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
index 29120c09..931bc27a 100644
--- a/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
+++ b/src/Authoring/Studio/Palettes/Timeline/Bindings/Qt3DSDMTimelineItemBinding.cpp
@@ -657,7 +657,7 @@ void Qt3DSDMTimelineItemBinding::PerformTransaction(EUserTransaction inTransacti
switch (inTransaction) {
case EUserTransaction_Duplicate: {
theDoc->DeselectAllKeyframes();
- SCOPED_DOCUMENT_EDITOR(*theDoc, QObject::tr("Duplicate Object"))->DuplicateInstances(theInstances);
+ theDoc->HandleDuplicateCommand();
} break;
case EUserTransaction_Cut: {
theDispatch.FireOnAsynchronousCommand(