forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user