QmlDesigner: small improvements to the paste logic

Change-Id: I256ffbe7f7eff1eb5796a368105d256d319c42bf
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2020-11-10 21:20:17 +02:00
parent 46d2046173
commit 1b4ef82f28
3 changed files with 15 additions and 15 deletions

View File

@@ -491,7 +491,7 @@ void DesignDocument::paste()
if (rootNode.type() == "empty") if (rootNode.type() == "empty")
return; return;
if (rootNode.id() == "designer__Selection") { // pasting multiple objects if (rootNode.id() == "__multi__selection__") { // pasting multiple objects
currentModel()->attachView(&view); currentModel()->attachView(&view);
ModelNode targetNode; ModelNode targetNode;
@@ -545,7 +545,7 @@ void DesignDocument::paste()
}); });
} else { // pasting single object } else { // pasting single object
rewriterView()->executeInTransaction("DesignDocument::paste1", [this, &view, selectedNodes, rootNode]() { rewriterView()->executeInTransaction("DesignDocument::paste1", [this, &view, rootNode]() {
currentModel()->attachView(&view); currentModel()->attachView(&view);
ModelNode pastedNode(view.insertModel(rootNode)); ModelNode pastedNode(view.insertModel(rootNode));
ModelNode targetNode; ModelNode targetNode;

View File

@@ -141,23 +141,23 @@ void DesignDocumentView::fromText(const QString &text)
inputModel->setFileUrl(model()->fileUrl()); inputModel->setFileUrl(model()->fileUrl());
QPlainTextEdit textEdit; QPlainTextEdit textEdit;
QString imports; QString imports;
foreach (const Import &import, model()->imports()) const auto modelImports = model()->imports();
imports += QStringLiteral("import ") + import.toString(true) + QLatin1Char(';') + QLatin1Char('\n'); for (const Import &import : modelImports)
imports += "import " + import.toString(true) + QLatin1Char(';') + QLatin1Char('\n');
textEdit.setPlainText(imports + text); textEdit.setPlainText(imports + text);
NotIndentingTextEditModifier modifier(&textEdit); NotIndentingTextEditModifier modifier(&textEdit);
QScopedPointer<RewriterView> rewriterView(new RewriterView(RewriterView::Amend, nullptr)); RewriterView rewriterView;
rewriterView->setCheckSemanticErrors(false); rewriterView.setCheckSemanticErrors(false);
rewriterView->setTextModifier(&modifier); rewriterView.setTextModifier(&modifier);
inputModel->setRewriterView(rewriterView.data()); inputModel->setRewriterView(&rewriterView);
rewriterView->restoreAuxiliaryData(); rewriterView.restoreAuxiliaryData();
if (rewriterView->errors().isEmpty() && rewriterView->rootModelNode().isValid()) { if (rewriterView.errors().isEmpty() && rewriterView.rootModelNode().isValid()) {
ModelMerger merger(this);
try { try {
merger.replaceModel(rewriterView->rootModelNode()); replaceModel(rewriterView.rootModelNode());
} catch(Exception &/*e*/) { } catch(Exception &/*e*/) {
/* e.showException(); Do not show any error if the clipboard contains invalid QML */ /* e.showException(); Do not show any error if the clipboard contains invalid QML */
} }
@@ -237,13 +237,13 @@ void DesignDocumentView::copyModelNodes(const QList<ModelNode> &nodesToCopy)
Q_ASSERT(view.rootModelNode().type() != "empty"); Q_ASSERT(view.rootModelNode().type() != "empty");
view.toClipboard(); view.toClipboard();
} else { //multi items selected } else { // multi items selected
foreach (ModelNode node, view.rootModelNode().directSubModelNodes()) { foreach (ModelNode node, view.rootModelNode().directSubModelNodes()) {
node.destroy(); node.destroy();
} }
view.changeRootNodeType("QtQuick.Rectangle", 2, 0); view.changeRootNodeType("QtQuick.Rectangle", 2, 0);
view.rootModelNode().setIdWithRefactoring("designer__Selection"); view.rootModelNode().setIdWithRefactoring("__multi__selection__");
foreach (const ModelNode &selectedNode, selectedNodes) { foreach (const ModelNode &selectedNode, selectedNodes) {
ModelNode newNode(view.insertModel(selectedNode)); ModelNode newNode(view.insertModel(selectedNode));

View File

@@ -75,7 +75,7 @@ public:
}; };
public: public:
RewriterView(DifferenceHandling differenceHandling, QObject *parent); RewriterView(DifferenceHandling differenceHandling = RewriterView::Amend, QObject *parent = nullptr);
~RewriterView() override; ~RewriterView() override;
void modelAttached(Model *model) override; void modelAttached(Model *model) override;