QmlDesigner: Add Duplicate to 3d Context Menu

Duplicate action is added to the context menu of the Edit3DWidget.

Task-number: QDS-8063
Change-Id: Id1347d28cd819a81e145bb0319e85d19a734090f
Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Ali Kianian
2022-11-10 15:44:45 +02:00
parent a2b85953cf
commit 455c84ccbf
4 changed files with 19 additions and 0 deletions

View File

@@ -183,6 +183,10 @@ void Edit3DWidget::createContextMenu()
m_contextMenu->addSeparator();
m_duplicateAction = m_contextMenu->addAction(tr("Duplicate"), [&] {
QmlDesignerPlugin::instance()->currentDesignDocument()->duplicateSelected();
});
m_copyAction = m_contextMenu->addAction(tr("Copy"), [&] {
QmlDesignerPlugin::instance()->currentDesignDocument()->copySelected();
});
@@ -374,6 +378,7 @@ void Edit3DWidget::showContextMenu(const QPoint &pos, const ModelNode &modelNode
m_editComponentAction->setEnabled(isSingleComponent);
m_editMaterialAction->setEnabled(isModel);
m_duplicateAction->setEnabled(isNotRoot);
m_copyAction->setEnabled(isNotRoot);
m_pasteAction->setEnabled(isPasteAvailable());
m_deleteAction->setEnabled(isNotRoot);

View File

@@ -64,6 +64,7 @@ private:
QPointer<QMenu> m_contextMenu;
QPointer<QAction> m_editComponentAction;
QPointer<QAction> m_editMaterialAction;
QPointer<QAction> m_duplicateAction;
QPointer<QAction> m_copyAction;
QPointer<QAction> m_pasteAction;
QPointer<QAction> m_deleteAction;

View File

@@ -579,6 +579,18 @@ void DesignDocument::cutSelected()
deleteSelected();
}
void DesignDocument::duplicateSelected()
{
DesignDocumentView view{m_externalDependencies};
currentModel()->attachView(&view);
const QList<ModelNode> selectedNodes = view.selectedModelNodes();
currentModel()->detachView(&view);
rewriterView()->executeInTransaction("DesignDocument::duplicateSelected", [this, selectedNodes]() {
moveNodesToPosition(selectedNodes, {});
});
}
void DesignDocument::paste()
{
pasteToPosition({});

View File

@@ -98,6 +98,7 @@ public:
void deleteSelected();
void copySelected();
void cutSelected();
void duplicateSelected();
void paste();
void pasteToPosition(const std::optional<QVector3D> &position);
void selectAll();