forked from qt-creator/qt-creator
QmlDesigner: copy and paste fixes
imports are now properly forwarded and we catch exceptions.
This commit is contained in:
@@ -47,6 +47,7 @@
|
|||||||
#include <componentaction.h>
|
#include <componentaction.h>
|
||||||
#include <qmlobjectnode.h>
|
#include <qmlobjectnode.h>
|
||||||
#include <rewriterview.h>
|
#include <rewriterview.h>
|
||||||
|
#include <rewritingexception.h>
|
||||||
#include <nodelistproperty.h>
|
#include <nodelistproperty.h>
|
||||||
#include <toolbox.h>
|
#include <toolbox.h>
|
||||||
|
|
||||||
@@ -462,6 +463,8 @@ void DesignDocumentController::copySelected()
|
|||||||
QScopedPointer<Model> model(Model::create("Qt/Rectangle"));
|
QScopedPointer<Model> model(Model::create("Qt/Rectangle"));
|
||||||
model->setMetaInfo(m_d->model->metaInfo());
|
model->setMetaInfo(m_d->model->metaInfo());
|
||||||
model->setFileUrl(m_d->model->fileUrl());
|
model->setFileUrl(m_d->model->fileUrl());
|
||||||
|
foreach (const Import &import, m_d->model->imports())
|
||||||
|
model->addImport(import);
|
||||||
|
|
||||||
Q_ASSERT(model);
|
Q_ASSERT(model);
|
||||||
|
|
||||||
@@ -557,6 +560,8 @@ void DesignDocumentController::paste()
|
|||||||
QScopedPointer<Model> model(Model::create("empty"));
|
QScopedPointer<Model> model(Model::create("empty"));
|
||||||
model->setMetaInfo(m_d->model->metaInfo());
|
model->setMetaInfo(m_d->model->metaInfo());
|
||||||
model->setFileUrl(m_d->model->fileUrl());
|
model->setFileUrl(m_d->model->fileUrl());
|
||||||
|
foreach (const Import &import, m_d->model->imports())
|
||||||
|
model->addImport(import);
|
||||||
Q_ASSERT(model);
|
Q_ASSERT(model);
|
||||||
|
|
||||||
if (!m_d->model)
|
if (!m_d->model)
|
||||||
@@ -601,48 +606,56 @@ void DesignDocumentController::paste()
|
|||||||
|
|
||||||
QList<ModelNode> pastedNodeList;
|
QList<ModelNode> pastedNodeList;
|
||||||
|
|
||||||
RewriterTransaction transaction(m_d->formEditorView.data());
|
try {
|
||||||
|
RewriterTransaction transaction(m_d->formEditorView.data());
|
||||||
|
|
||||||
int offset = double(qrand()) / RAND_MAX * 20 - 10;
|
int offset = double(qrand()) / RAND_MAX * 20 - 10;
|
||||||
|
|
||||||
foreach (const ModelNode &node, selectedNodes) {
|
foreach (const ModelNode &node, selectedNodes) {
|
||||||
QString defaultProperty(targetNode.metaInfo().defaultProperty());
|
QString defaultProperty(targetNode.metaInfo().defaultProperty());
|
||||||
ModelNode pastedNode(view.insertModel(node));
|
ModelNode pastedNode(view.insertModel(node));
|
||||||
pastedNodeList.append(pastedNode);
|
pastedNodeList.append(pastedNode);
|
||||||
scatterItem(pastedNode, targetNode, offset);
|
scatterItem(pastedNode, targetNode, offset);
|
||||||
targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode);
|
targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
view.setSelectedModelNodes(pastedNodeList);
|
||||||
|
} catch (RewritingException &e) {
|
||||||
|
qWarning() << e.description(); //silent error
|
||||||
}
|
}
|
||||||
|
|
||||||
view.setSelectedModelNodes(pastedNodeList);
|
|
||||||
} else {
|
} else {
|
||||||
RewriterTransaction transaction(m_d->formEditorView.data());
|
try {
|
||||||
|
RewriterTransaction transaction(m_d->formEditorView.data());
|
||||||
|
|
||||||
model->detachView(&view);
|
model->detachView(&view);
|
||||||
m_d->model->attachView(&view);
|
m_d->model->attachView(&view);
|
||||||
ModelNode pastedNode(view.insertModel(rootNode));
|
ModelNode pastedNode(view.insertModel(rootNode));
|
||||||
ModelNode targetNode;
|
ModelNode targetNode;
|
||||||
|
|
||||||
if (!view.selectedModelNodes().isEmpty())
|
if (!view.selectedModelNodes().isEmpty())
|
||||||
targetNode = view.selectedModelNodes().first();
|
targetNode = view.selectedModelNodes().first();
|
||||||
|
|
||||||
if (!targetNode.isValid())
|
if (!targetNode.isValid())
|
||||||
targetNode = view.rootModelNode();
|
targetNode = view.rootModelNode();
|
||||||
|
|
||||||
if (targetNode.parentProperty().isValid() &&
|
if (targetNode.parentProperty().isValid() &&
|
||||||
(pastedNode.simplifiedTypeName() == targetNode.simplifiedTypeName()) &&
|
(pastedNode.simplifiedTypeName() == targetNode.simplifiedTypeName()) &&
|
||||||
(pastedNode.variantProperty("width").value() == targetNode.variantProperty("width").value()) &&
|
(pastedNode.variantProperty("width").value() == targetNode.variantProperty("width").value()) &&
|
||||||
(pastedNode.variantProperty("height").value() == targetNode.variantProperty("height").value()))
|
(pastedNode.variantProperty("height").value() == targetNode.variantProperty("height").value()))
|
||||||
|
|
||||||
targetNode = targetNode.parentProperty().parentModelNode();
|
targetNode = targetNode.parentProperty().parentModelNode();
|
||||||
|
|
||||||
QString defaultProperty(targetNode.metaInfo().defaultProperty());
|
QString defaultProperty(targetNode.metaInfo().defaultProperty());
|
||||||
|
|
||||||
scatterItem(pastedNode, targetNode);
|
scatterItem(pastedNode, targetNode);
|
||||||
if (targetNode.nodeListProperty(defaultProperty).isValid()) {
|
if (targetNode.nodeListProperty(defaultProperty).isValid()) {
|
||||||
targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode);
|
targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
view.setSelectedModelNodes(QList<ModelNode>() << pastedNode);
|
||||||
|
} catch (RewritingException &e) {
|
||||||
|
qWarning() << e.description(); //silent error
|
||||||
}
|
}
|
||||||
|
|
||||||
view.setSelectedModelNodes(QList<ModelNode>() << pastedNode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#include <qgraphicswidget.h>
|
#include <qgraphicswidget.h>
|
||||||
#include <abstractview.h>
|
#include <abstractview.h>
|
||||||
#include <invalididexception.h>
|
#include <invalididexception.h>
|
||||||
|
#include <rewritingexception.h>
|
||||||
|
|
||||||
#include <QMimeData>
|
#include <QMimeData>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|||||||
Reference in New Issue
Block a user