From 2a425c7cfaf338b1c0c00a1200f07fc63f7ec07e Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 8 Jan 2010 13:15:52 +0100 Subject: [PATCH] Fix bug where a qml error shown in Design mode were not updated If you continue to fix qml errors in text mode, but still had errors, the error message you got in the Design mode always stayed the first (outdated) error message. --- .../qmldesigner/core/include/rewriterview.h | 2 +- .../qmldesigner/core/model/rewriterview.cpp | 4 +-- .../core/model/texttomodelmerger.cpp | 2 +- src/plugins/qmldesigner/designmodewidget.cpp | 26 ++++++++++++------- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h index 4806bf41b97..e360736c8ba 100644 --- a/src/plugins/qmldesigner/core/include/rewriterview.h +++ b/src/plugins/qmldesigner/core/include/rewriterview.h @@ -137,7 +137,7 @@ public: QList errors() const; void clearErrors(); - void addErrors(const QList &errors); + void setErrors(const QList &errors); void addError(const Error &error); QMap extractText(const QList &nodes) const; diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp index ea754e2efa6..4308c951724 100644 --- a/src/plugins/qmldesigner/core/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp @@ -376,9 +376,9 @@ void RewriterView::clearErrors() emit errorsChanged(m_errors); } -void RewriterView::addErrors(const QList &errors) +void RewriterView::setErrors(const QList &errors) { - m_errors.append(errors); + m_errors = errors; emit errorsChanged(m_errors); } diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp index f3e0d57fbe3..3b844749e2d 100644 --- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp @@ -104,7 +104,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen QList errors; foreach (const QmlError &qmlError, doc.errors()) errors.append(RewriterView::Error(qmlError)); - m_rewriterView->addErrors(errors); + m_rewriterView->setErrors(errors); } setActive(false); diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 51c4c53981b..71a5159a31f 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -281,27 +281,30 @@ void DocumentWidget::setAutoSynchronization(bool sync) if (sync) { // text editor -> visual editor - if (!m_document->model()) { - QList errors = m_document->loadMaster(m_textBuffer.data()); + if (!document()->model()) { + // first initialization + QList errors = document()->loadMaster(m_textBuffer.data()); if (!errors.isEmpty()) { disable(errors); - } else { - connect(m_document, SIGNAL(qmlErrorsChanged(QList)), - this, SLOT(updateErrorStatus(QList))); } } - if (m_document->model() && m_document->qmlErrors().isEmpty()) { + if (document()->model() && document()->qmlErrors().isEmpty()) { // set selection to text cursor - RewriterView *rewriter = m_document->rewriterView(); + RewriterView *rewriter = document()->rewriterView(); const int cursorPos = m_textBuffer->textCursor().position(); ModelNode node = nodeForPosition(cursorPos); if (node.isValid()) { rewriter->setSelectedModelNodes(QList() << node); } + enable(); } + + connect(document(), SIGNAL(qmlErrorsChanged(QList)), + this, SLOT(updateErrorStatus(QList))); + } else { - if (m_document->model() && m_document->qmlErrors().isEmpty()) { - RewriterView *rewriter = m_document->rewriterView(); + if (document()->model() && document()->qmlErrors().isEmpty()) { + RewriterView *rewriter = document()->rewriterView(); // visual editor -> text editor ModelNode selectedNode; if (!rewriter->selectedModelNodes().isEmpty()) @@ -319,6 +322,9 @@ void DocumentWidget::setAutoSynchronization(bool sync) } } } + + disconnect(document(), SIGNAL(qmlErrorsChanged(QList)), + this, SLOT(updateErrorStatus(QList))); } } @@ -350,7 +356,7 @@ void DocumentWidget::updateErrorStatus(const QList &errors) { if (m_isDisabled && errors.isEmpty()) { enable(); - } else if (!m_isDisabled && !errors.isEmpty()) { + } else if (!errors.isEmpty()) { disable(errors); } }