diff --git a/src/plugins/qmldesigner/designercore/filemanager/filemanager.pri b/src/plugins/qmldesigner/designercore/filemanager/filemanager.pri index a2a6933c03a..ac11d4c4c61 100644 --- a/src/plugins/qmldesigner/designercore/filemanager/filemanager.pri +++ b/src/plugins/qmldesigner/designercore/filemanager/filemanager.pri @@ -13,7 +13,8 @@ SOURCES += \ $$PWD/objectlengthcalculator.cpp \ $$PWD/firstdefinitionfinder.cpp \ $$PWD/moveobjectbeforeobjectvisitor.cpp \ - $$PWD/changeimportsvisitor.cpp + $$PWD/changeimportsvisitor.cpp \ + $$PWD/qmlwarningdialog.cpp HEADERS += \ $$PWD/qmlrewriter.h \ $$PWD/qmlrefactoring.h \ @@ -29,4 +30,8 @@ HEADERS += \ $$PWD/objectlengthcalculator.h \ $$PWD/firstdefinitionfinder.h \ $$PWD/moveobjectbeforeobjectvisitor.h \ - $$PWD/changeimportsvisitor.h + $$PWD/changeimportsvisitor.h \ + $$PWD/qmlwarningdialog.h + +FORMS += \ + $$PWD/qmlwarningdialog.ui diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.cpp b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.cpp new file mode 100644 index 00000000000..199bb453ec7 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.cpp @@ -0,0 +1,69 @@ +#include "qmlwarningdialog.h" +#include "ui_qmlwarningdialog.h" + +#include + +namespace QmlDesigner { + +namespace Internal { + +QmlWarningDialog::QmlWarningDialog(QWidget *parent, const QStringList &warnings) : + QDialog(parent), + ui(new Ui::QmlWarningDialog), + m_warnings(warnings) +{ + ui->setupUi(this); + setResult (0); + + ui->checkBox->setChecked(true); + connect(ui->ignoreButton, SIGNAL(clicked()), this, SLOT(ignoreButtonPressed())); + connect(ui->okButton, SIGNAL(clicked()), this, SLOT(okButtonPressed())); + connect(ui->checkBox, SIGNAL(toggled(bool)), this, SLOT(checkBoxToggled(bool))); + + connect(ui->warnings, SIGNAL(linkActivated(QString)), this, SLOT(linkClicked(QString))); + + QString warningText; + foreach (const QString &string, warnings) + warningText += QLatin1String(" ") + string + QLatin1String("\n"); + ui->warnings->setText(warningText); + + ui->warnings->setForegroundRole(QPalette::ToolTipText); + ui->warnings->setBackgroundRole(QPalette::ToolTipBase); + ui->warnings->setAutoFillBackground(true); +} + +QmlWarningDialog::~QmlWarningDialog() +{ + delete ui; +} + +void QmlWarningDialog::ignoreButtonPressed() +{ + done(0); +} + +void QmlWarningDialog::okButtonPressed() +{ + done(-1); +} + +bool QmlWarningDialog::warningsEnabled() const +{ + DesignerSettings settings = BauhausPlugin::pluginInstance()->settings(); + return settings.warningsInDesigner; +} + +void QmlWarningDialog::checkBoxToggled(bool b) +{ + DesignerSettings settings = BauhausPlugin::pluginInstance()->settings(); + settings.warningsInDesigner = b; + BauhausPlugin::pluginInstance()->setSettings(settings); +} + +void QmlWarningDialog::linkClicked(const QString &link) +{ + done(link.toInt()); +} + +} //Internal +} //QmlDesigner diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.h b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.h new file mode 100644 index 00000000000..158ad72cbf4 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.h @@ -0,0 +1,39 @@ +#ifndef QMLWARNINGDIALOG_H +#define QMLWARNINGDIALOG_H + +#include + +namespace Ui { + class QmlWarningDialog; +} + +namespace QmlDesigner { + +namespace Internal { + +class QmlWarningDialog : public QDialog +{ + Q_OBJECT + +public: + explicit QmlWarningDialog(QWidget *parent, const QStringList &warnings); + ~QmlWarningDialog(); + + bool warningsEnabled() const; + +public slots: + void ignoreButtonPressed(); + void okButtonPressed(); + void checkBoxToggled(bool); + void linkClicked(const QString &link); + +private: + Ui::QmlWarningDialog *ui; + const QStringList m_warnings; +}; + +} //Internal + +} //QmlDesigner + +#endif // QMLWARNINGDIALOG_H diff --git a/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.ui b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.ui new file mode 100644 index 00000000000..026881e4340 --- /dev/null +++ b/src/plugins/qmldesigner/designercore/filemanager/qmlwarningdialog.ui @@ -0,0 +1,112 @@ + + + QmlWarningDialog + + + + 0 + 0 + 458 + 229 + + + + Warning + + + true + + + + 12 + + + + + + 440 + 0 + + + + + 75 + true + + + + This QML file contains features which are not supported by Qt Quick Designer + + + true + + + + + + + + 0 + 120 + + + + QFrame::Raised + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + 6 + + + + + + + Warn about QML features which are not properly supported by the Qt Quick Designer + + + + + + + + + Qt::Horizontal + + + + 88 + 20 + + + + + + + + Ignore this warning and open the file + + + Ignore + + + + + + + Ok + + + + + + + + + + diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 65406f4a747..cef5118ed5d 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -32,6 +32,7 @@ #include "filemanager/firstdefinitionfinder.h" #include "filemanager/objectlengthcalculator.h" #include "filemanager/qmlrefactoring.h" +#include "filemanager/qmlwarningdialog.h" #include "rewriteaction.h" #include "nodeproperty.h" #include "propertyparser.h" @@ -800,13 +801,16 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH QString title = QCoreApplication::translate("QmlDesigner::TextToModelMerger warning message", "This .qml file contains features" "which are not supported by Qt Quick Designer"); - QString message; + QStringList message; foreach (const RewriterView::Error &warning, warnings) { - message += QLatin1String("Line: ") + QString::number(warning.line()) + ": " + warning.description() + QLatin1String("\n"); + QString string = QLatin1String("Line: ") + QString::number(warning.line()) + QLatin1String(": ") + warning.description(); + //string += QLatin1String(" Go to error") + QLatin1String("

"); + message << string; } - if (QMessageBox::warning(0, title, message, QMessageBox::Ignore | QMessageBox::Cancel) == QMessageBox::Cancel) { + QmlWarningDialog warningDialog(0, message); + if (warningDialog.warningsEnabled() && warningDialog.exec()) { m_rewriterView->setErrors(warnings); setActive(false); return false; diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp index 27867b1c7fe..31ddb465685 100644 --- a/src/plugins/qmldesigner/designersettings.cpp +++ b/src/plugins/qmldesigner/designersettings.cpp @@ -39,7 +39,9 @@ DesignerSettings::DesignerSettings() itemSpacing(0), snapMargin(0), canvasWidth(10000), - canvasHeight(10000) + canvasHeight(10000), + warningsInDesigner(true), + designerWarningsInEditor(false) {} void DesignerSettings::fromSettings(QSettings *settings) @@ -55,6 +57,11 @@ void DesignerSettings::fromSettings(QSettings *settings) QLatin1String(QmlDesigner::Constants::QML_SNAPMARGIN_KEY), QVariant(0)).toInt(); canvasWidth = settings->value(QLatin1String(QmlDesigner::Constants::QML_CANVASWIDTH_KEY), QVariant(10000)).toInt(); canvasHeight = settings->value(QLatin1String(QmlDesigner::Constants::QML_CANVASHEIGHT_KEY), QVariant(10000)).toInt(); + warningsInDesigner = settings->value( + QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY), QVariant(true)).toBool(); + designerWarningsInEditor = settings->value( + QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY), QVariant(false)).toBool(); + settings->endGroup(); settings->endGroup(); } @@ -68,6 +75,9 @@ void DesignerSettings::toSettings(QSettings *settings) const settings->setValue(QLatin1String(QmlDesigner::Constants::QML_SNAPMARGIN_KEY), snapMargin); settings->setValue(QLatin1String(QmlDesigner::Constants::QML_CANVASWIDTH_KEY), canvasWidth); settings->setValue(QLatin1String(QmlDesigner::Constants::QML_CANVASHEIGHT_KEY), canvasHeight); + settings->setValue(QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY), warningsInDesigner); + settings->setValue(QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY), designerWarningsInEditor); + settings->endGroup(); settings->endGroup(); } @@ -77,5 +87,7 @@ bool DesignerSettings::equals(const DesignerSettings &other) const return openDesignMode == other.openDesignMode && snapMargin == other.snapMargin && canvasWidth == other.canvasWidth - && canvasHeight == other.canvasHeight; + && canvasHeight == other.canvasHeight + && warningsInDesigner == other.warningsInDesigner + && designerWarningsInEditor == other.designerWarningsInEditor; } diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h index 9c1ad43c6bc..07d4290f16b 100644 --- a/src/plugins/qmldesigner/designersettings.h +++ b/src/plugins/qmldesigner/designersettings.h @@ -52,6 +52,8 @@ public: int snapMargin; int canvasWidth; int canvasHeight; + bool warningsInDesigner; + bool designerWarningsInEditor; }; inline bool operator==(const DesignerSettings &s1, const DesignerSettings &s2) diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h index 091c8feaeda..5b781dfbbe6 100644 --- a/src/plugins/qmldesigner/qmldesignerconstants.h +++ b/src/plugins/qmldesigner/qmldesignerconstants.h @@ -60,6 +60,8 @@ const char QML_CANVASWIDTH_KEY[] = "CanvasWidth"; const char QML_CANVASHEIGHT_KEY[] = "CanvasHeight"; const char QML_CONTEXTPANE_KEY[] = "ContextPaneEnabled"; const char QML_CONTEXTPANEPIN_KEY[] = "ContextPanePinned"; +const char QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY[] = "WarnAboutQtQuickFeaturesInDesigner"; +const char QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY[] = "WarnAboutQtQuickDesignerFeaturesInCodeEditor"; enum { QML_OPENDESIGNMODE_DEFAULT = 0 }; // 0 for text mode, 1 for design mode const char SETTINGS_CATEGORY_QML_ICON[] = ":/core/images/category_qml.png"; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index cf592faf1ed..a716f007036 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -369,8 +369,9 @@ void BauhausPlugin::switchTextDesign() } } -DesignerSettings BauhausPlugin::settings() const +DesignerSettings BauhausPlugin::settings() { + m_settings.fromSettings(Core::ICore::settings()); return m_settings; } diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h index dd7ca6f52d8..09c34db59a7 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.h +++ b/src/plugins/qmldesigner/qmldesignerplugin.h @@ -72,7 +72,7 @@ public: static BauhausPlugin *pluginInstance(); - DesignerSettings settings() const; + DesignerSettings settings(); void setSettings(const DesignerSettings &s); private slots: diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp index 475b6646624..f84b84c16cf 100644 --- a/src/plugins/qmldesigner/settingspage.cpp +++ b/src/plugins/qmldesigner/settingspage.cpp @@ -53,6 +53,9 @@ DesignerSettings SettingsPageWidget::settings() const ds.snapMargin = m_ui.spinSnapMargin->value(); ds.canvasWidth = m_ui.spinCanvasWidth->value(); ds.canvasHeight = m_ui.spinCanvasHeight->value(); + ds.warningsInDesigner = m_ui.designerWarningsCheckBox->isChecked(); + ds.designerWarningsInEditor = m_ui.designerWarningsInEditorCheckBox->isChecked(); + return ds; } @@ -62,6 +65,8 @@ void SettingsPageWidget::setSettings(const DesignerSettings &s) m_ui.spinSnapMargin->setValue(s.snapMargin); m_ui.spinCanvasWidth->setValue(s.canvasWidth); m_ui.spinCanvasHeight->setValue(s.canvasHeight); + m_ui.designerWarningsCheckBox->setChecked(s.warningsInDesigner); + m_ui.designerWarningsInEditorCheckBox->setChecked(s.designerWarningsInEditor); } QString SettingsPageWidget::searchKeywords() const diff --git a/src/plugins/qmldesigner/settingspage.ui b/src/plugins/qmldesigner/settingspage.ui index a98006ba462..3bbf633e019 100644 --- a/src/plugins/qmldesigner/settingspage.ui +++ b/src/plugins/qmldesigner/settingspage.ui @@ -6,15 +6,15 @@ 0 0 - 275 - 275 + 574 + 472 Form - - + + Snapping @@ -67,7 +67,7 @@ - + Canvas @@ -132,7 +132,40 @@ - + + + + Warnings + + + + + + + + Warn about QML features which are not properly supported by the Qt Quick Designer + + + Warn about unsupported features in the Qt Quick Designer + + + + + + + Also warn in the code editor about QML features which are not properly supported by the Qt Quick Designer + + + Warn about unsupported features of Qt Quick Designer in the code editor + + + + + + + + + Qt::Vertical