diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp index f68dfa0fef4ee6ace2320e82f2134fe07d8d08bc..71f812400b42c864dac243b8e8658fd981336af6 100644 --- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp @@ -47,6 +47,7 @@ #include <componentaction.h> #include <qmlobjectnode.h> #include <rewriterview.h> +#include <rewritingexception.h> #include <nodelistproperty.h> #include <toolbox.h> @@ -462,6 +463,8 @@ void DesignDocumentController::copySelected() QScopedPointer<Model> model(Model::create("Qt/Rectangle")); model->setMetaInfo(m_d->model->metaInfo()); model->setFileUrl(m_d->model->fileUrl()); + foreach (const Import &import, m_d->model->imports()) + model->addImport(import); Q_ASSERT(model); @@ -557,6 +560,8 @@ void DesignDocumentController::paste() QScopedPointer<Model> model(Model::create("empty")); model->setMetaInfo(m_d->model->metaInfo()); model->setFileUrl(m_d->model->fileUrl()); + foreach (const Import &import, m_d->model->imports()) + model->addImport(import); Q_ASSERT(model); if (!m_d->model) @@ -601,48 +606,56 @@ void DesignDocumentController::paste() 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) { - QString defaultProperty(targetNode.metaInfo().defaultProperty()); - ModelNode pastedNode(view.insertModel(node)); - pastedNodeList.append(pastedNode); - scatterItem(pastedNode, targetNode, offset); - targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode); - } + foreach (const ModelNode &node, selectedNodes) { + QString defaultProperty(targetNode.metaInfo().defaultProperty()); + ModelNode pastedNode(view.insertModel(node)); + pastedNodeList.append(pastedNode); + scatterItem(pastedNode, targetNode, offset); + targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode); + } - view.setSelectedModelNodes(pastedNodeList); + view.setSelectedModelNodes(pastedNodeList); + } catch (RewritingException &e) { + qWarning() << e.description(); //silent error + } } else { - RewriterTransaction transaction(m_d->formEditorView.data()); + try { + RewriterTransaction transaction(m_d->formEditorView.data()); - model->detachView(&view); - m_d->model->attachView(&view); - ModelNode pastedNode(view.insertModel(rootNode)); - ModelNode targetNode; + model->detachView(&view); + m_d->model->attachView(&view); + ModelNode pastedNode(view.insertModel(rootNode)); + ModelNode targetNode; - if (!view.selectedModelNodes().isEmpty()) - targetNode = view.selectedModelNodes().first(); + if (!view.selectedModelNodes().isEmpty()) + targetNode = view.selectedModelNodes().first(); - if (!targetNode.isValid()) - targetNode = view.rootModelNode(); + if (!targetNode.isValid()) + targetNode = view.rootModelNode(); - if (targetNode.parentProperty().isValid() && - (pastedNode.simplifiedTypeName() == targetNode.simplifiedTypeName()) && - (pastedNode.variantProperty("width").value() == targetNode.variantProperty("width").value()) && - (pastedNode.variantProperty("height").value() == targetNode.variantProperty("height").value())) + if (targetNode.parentProperty().isValid() && + (pastedNode.simplifiedTypeName() == targetNode.simplifiedTypeName()) && + (pastedNode.variantProperty("width").value() == targetNode.variantProperty("width").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); - if (targetNode.nodeListProperty(defaultProperty).isValid()) { - targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode); - } + scatterItem(pastedNode, targetNode); + if (targetNode.nodeListProperty(defaultProperty).isValid()) { + targetNode.nodeListProperty(defaultProperty).reparentHere(pastedNode); + } - view.setSelectedModelNodes(QList<ModelNode>() << pastedNode); + view.setSelectedModelNodes(QList<ModelNode>() << pastedNode); + } catch (RewritingException &e) { + qWarning() << e.description(); //silent error + } } } diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp index 78eef6a2ee628e6cbd517fe11a73858d3e67d529..df08b21bda8bf502359fde29790a786510bec4a4 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp @@ -37,6 +37,7 @@ #include <qgraphicswidget.h> #include <abstractview.h> #include <invalididexception.h> +#include <rewritingexception.h> #include <QMimeData> #include <QMessageBox>