From 8aadf9e74de6f3917a61d764ceecec9ba6f02ac5 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann <Thomas.Hartmann@digia.com> Date: Tue, 23 Oct 2012 13:01:39 +0200 Subject: [PATCH] QmlDesigner: adding warnings about unsupported features If a .qml file contains code that is not supported in the visual designer we show a warning. Change-Id: I15fc92561fc3e586c4a9fc2c73b855a92519abce Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com> --- .../designercore/model/texttomodelmerger.cpp | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 149f58a513f..65406f4a747 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -740,6 +740,7 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH m_document = doc; QList<RewriterView::Error> errors; + QList<RewriterView::Error> warnings; foreach (const QmlJS::DiagnosticMessage &diagnosticMessage, ctxt.diagnosticLinkMessages()) { errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName()))); @@ -766,9 +767,26 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH check.disableMessage(StaticAnalysis::ErrPrototypeCycle); check.disableMessage(StaticAnalysis::ErrCouldNotResolvePrototype); check.disableMessage(StaticAnalysis::ErrCouldNotResolvePrototypeOf); + + foreach (StaticAnalysis::Type type, StaticAnalysis::Message::allMessageTypes()) { + StaticAnalysis::Message message(type, AST::SourceLocation()); + if (message.severity == StaticAnalysis::MaybeWarning + || message.severity == StaticAnalysis::Warning) { + check.disableMessage(type); + } + } + + check.enableMessage(StaticAnalysis::WarnImperativeCodeNotEditableInVisualDesigner); + check.enableMessage(StaticAnalysis::WarnUnsupportedTypeInVisualDesigner); + check.enableMessage(StaticAnalysis::WarnReferenceToParentItemNotSupportedByVisualDesigner); + check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner); + check.enableMessage(StaticAnalysis::WarnStatesOnlyInRootItemForVisualDesigner); + foreach (const StaticAnalysis::Message &message, check()) { if (message.severity == StaticAnalysis::Error) errors.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName()))); + if (message.severity == StaticAnalysis::Warning) + warnings.append(RewriterView::Error(message.toDiagnosticMessage(), QUrl::fromLocalFile(doc->fileName()))); } if (!errors.isEmpty()) { @@ -776,6 +794,24 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH setActive(false); return false; } + + if (!warnings.isEmpty() && differenceHandler.isValidator()) { + + QString title = QCoreApplication::translate("QmlDesigner::TextToModelMerger warning message", "This .qml file contains features" + "which are not supported by Qt Quick Designer"); + + QString message; + + foreach (const RewriterView::Error &warning, warnings) { + message += QLatin1String("Line: ") + QString::number(warning.line()) + ": " + warning.description() + QLatin1String("\n"); + } + + if (QMessageBox::warning(0, title, message, QMessageBox::Ignore | QMessageBox::Cancel) == QMessageBox::Cancel) { + m_rewriterView->setErrors(warnings); + setActive(false); + return false; + } + } } UiObjectMember *astRootNode = 0; -- GitLab