From 7b462f1b08afe0430410fa8e55fc68db9cef598a Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Mon, 1 Feb 2010 11:07:04 +0100 Subject: [PATCH] Fixed a modification call into the model when inline components got loaded. --- .../qmldesigner/core/include/rewriterview.h | 1 - src/plugins/qmldesigner/core/model/model.cpp | 6 +-- .../core/model/modeltotextmerger.cpp | 2 +- .../qmldesigner/core/model/rewriterview.cpp | 29 -------------- .../core/model/texttomodelmerger.cpp | 40 +++++++++++++++++-- .../core/model/texttomodelmerger.h | 8 ++-- 6 files changed, 45 insertions(+), 41 deletions(-) diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h index 7fa0cbb5446..73d663045c4 100644 --- a/src/plugins/qmldesigner/core/include/rewriterview.h +++ b/src/plugins/qmldesigner/core/include/rewriterview.h @@ -163,7 +163,6 @@ protected: // functions bool isModificationGroupActive() const; void setModificationGroupActive(bool active); void applyModificationGroupChanges(); - void setupComponent(const ModelNode &node); void applyChanges(); private: //variables diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp index e6564d10688..4a5d4c4710c 100644 --- a/src/plugins/qmldesigner/core/model/model.cpp +++ b/src/plugins/qmldesigner/core/model/model.cpp @@ -898,7 +898,7 @@ WriteLocker::WriteLocker(ModelPrivate *model) if (m_model->m_writeLock) qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!"; // FIXME: Enable it again - // Q_ASSERT(!m_model->m_writeLock); + Q_ASSERT(!m_model->m_writeLock); model->m_writeLock = true; } @@ -909,7 +909,7 @@ WriteLocker::WriteLocker(Model *model) if (m_model->m_writeLock) qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!"; // FIXME: Enable it again - // Q_ASSERT(!m_model->m_writeLock); + Q_ASSERT(!m_model->m_writeLock); m_model->m_writeLock = true; } @@ -918,7 +918,7 @@ WriteLocker::~WriteLocker() if (!m_model->m_writeLock) qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!"; // FIXME: Enable it again - // Q_ASSERT(m_model->m_writeLock); + Q_ASSERT(m_model->m_writeLock); m_model->m_writeLock = false; } diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp index 47100d39c29..2141d6005c8 100644 --- a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp +++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp @@ -314,8 +314,8 @@ QStringList ModelToTextMerger::getPropertyOrder() { if (m_propertyOrder.isEmpty()) { m_propertyOrder - << QLatin1String("property") << QLatin1String("id") + << QLatin1String("property") << QLatin1String("x") << QLatin1String("y") << QLatin1String("width") diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp index d19d735a845..8eae32e8d54 100644 --- a/src/plugins/qmldesigner/core/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp @@ -152,8 +152,6 @@ void RewriterView::modelAboutToBeDetached(Model * /*model*/) void RewriterView::nodeCreated(const ModelNode &createdNode) { - if (createdNode.type() == QLatin1String("Qt/Component")) - setupComponent(createdNode); Q_ASSERT(textModifier()); m_positionStorage->setNodeOffset(createdNode, ModelNodePositionStorage::INVALID_LOCATION); if (textToModelMerger()->isActive()) @@ -253,9 +251,6 @@ void RewriterView::bindingPropertiesChanged(const QList& proper void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) { - if (node.type() == QLatin1String("Qt/Component")) - setupComponent(node); - Q_ASSERT(textModifier()); if (textToModelMerger()->isActive()) return; @@ -366,30 +361,6 @@ void RewriterView::applyModificationGroupChanges() applyChanges(); } -void RewriterView::setupComponent(const ModelNode &node) -{ - Q_ASSERT(node.type() == QLatin1String("Qt/Component")); - - QString componentText = extractText(QList() << node).value(node); - - if (componentText.isEmpty()) - return; - - QString result = ""; - if (componentText.contains("Component")) { //explicit component - FirstDefinitionFinder firstDefinitionFinder(componentText); - int offset = firstDefinitionFinder(0); - ObjectLengthCalculator objectLengthCalculator(componentText); - int length = objectLengthCalculator(offset); - for (int i = offset;icreateModelNode(qmlObject, *this)); + const ModelNode &newNode = m_merger->createModelNode(qmlObject, *this); + modelProperty.reparentHere(newNode); + return newNode; } void ModelAmender::typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject) @@ -517,3 +525,27 @@ bool TextToModelMerger::isSignalPropertyName(const QString &signalName) return signalName.length() >= 3 && signalName.startsWith(QLatin1String("on")) && signalName.at(2).isLetter(); } + +void TextToModelMerger::setupComponent(const ModelNode &node) +{ + Q_ASSERT(node.type() == QLatin1String("Qt/Component")); + + QString componentText = m_rewriterView->extractText(QList() << node).value(node); + + if (componentText.isEmpty()) + return; + + QString result = ""; + if (componentText.contains("Component")) { //explicit component + FirstDefinitionFinder firstDefinitionFinder(componentText); + int offset = firstDefinitionFinder(0); + ObjectLengthCalculator objectLengthCalculator(componentText); + int length = objectLengthCalculator(offset); + for (int i = offset;i