From 32799b3a7bd0cb8cd3da99c869649dab3be83634 Mon Sep 17 00:00:00 2001 From: Samuel Ghinet Date: Mon, 27 Sep 2021 20:21:50 +0300 Subject: [PATCH] Make additional changes in the QtCreator side required for QDS new project dialog * We need to use the CheckBox field to set the checked state of fields (TargetQtVersion, Use as default project location). * When the validation of the Project Name or Project Location fails, we need a way to be notified of what went wrong. We also need a way to force the project intro page to execute the validation of those fields whenever we need (i.e. when the user types into our QML TextField controls) Also, add a warning on loading wizards: whenever a wizard.json file cannot be parsed, we should issue a qWarning(), so that we can more easily notice when something went wrong. Task-number: QDS-4490 Change-Id: I7cfa61b4e43d731db9d0679e093e723d947b60c0 Reviewed-by: Alessandro Portale Reviewed-by: Qt CI Bot --- src/libs/utils/projectintropage.cpp | 7 +++++++ src/libs/utils/projectintropage.h | 6 ++++++ src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp | 9 +++++++++ src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h | 4 +++- .../projectexplorer/jsonwizard/jsonwizardfactory.cpp | 3 +++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/projectintropage.cpp b/src/libs/utils/projectintropage.cpp index 1a318df0d4c..6e180496375 100644 --- a/src/libs/utils/projectintropage.cpp +++ b/src/libs/utils/projectintropage.cpp @@ -195,6 +195,11 @@ bool ProjectIntroPage::validate() return false; } +void ProjectIntroPage::fieldsUpdated() +{ + slotChanged(); +} + void ProjectIntroPage::slotChanged() { const bool newComplete = validate(); @@ -286,6 +291,8 @@ void ProjectIntroPage::displayStatusMessage(InfoLabel::InfoType t, const QString { d->m_ui.stateLabel->setType(t); d->m_ui.stateLabel->setText(s); + + emit statusMessageChanged(t, s); } void ProjectIntroPage::hideStatusLabel() diff --git a/src/libs/utils/projectintropage.h b/src/libs/utils/projectintropage.h index 5de165efe11..0bccd91f2b1 100644 --- a/src/libs/utils/projectintropage.h +++ b/src/libs/utils/projectintropage.h @@ -66,8 +66,14 @@ public: bool validateProjectName(const QString &name, QString *errorMessage); + // Calls slotChanged() - i.e. tell the page that some of its fields have been updated. + // This function is useful if you programmatically update the fields of the page (i.e. from + // your client code). + void fieldsUpdated(); + signals: void activated(); + void statusMessageChanged(InfoLabel::InfoType type, const QString &message); public slots: void setFilePath(const FilePath &path); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index d7584ede0bb..d6080f4e90f 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -956,6 +956,15 @@ void CheckBoxField::setup(JsonFieldPage *page, const QString &name) }); } +void CheckBoxField::setChecked(bool value) +{ + auto w = qobject_cast(widget()); + QTC_ASSERT(w, return); + + w->setChecked(value); + w->clicked(value); +} + bool CheckBoxField::validate(MacroExpander *expander, QString *message) { if (!JsonFieldPage::Field::validate(expander, message)) diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h index 251315a510b..ed89746d0b2 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage_p.h @@ -230,11 +230,13 @@ private: Utils::PathChooser::Kind m_kind = Utils::PathChooser::ExistingDirectory; }; -class CheckBoxField : public JsonFieldPage::Field +class PROJECTEXPLORER_EXPORT CheckBoxField : public JsonFieldPage::Field { public: bool suppressName() const override { return true; } + void setChecked(bool); + private: bool parseData(const QVariant &data, QString *errorMessage) override; diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 579722a63d6..9aa16ff0513 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -257,12 +257,14 @@ QList JsonWizardFactory::createWizardFactories() .arg(currentFile.fileName()) .arg(line).arg(column) .arg(error.errorString())); + qWarning() << "Failed to parse wizard: " << currentFile.fileName(); continue; } if (!json.isObject()) { verboseLog.append(tr("* Did not find a JSON object in \"%1\".\n") .arg(currentFile.fileName())); + qWarning() << "Failed to parse wizard: " << currentFile.fileName(); continue; } @@ -280,6 +282,7 @@ QList JsonWizardFactory::createWizardFactories() JsonWizardFactory *factory = createWizardFactory(data, currentDir, &errorMessage); if (!factory) { verboseLog.append(tr("* Failed to create: %1\n").arg(errorMessage)); + qWarning() << "Failed to create wizard: " << currentFile.fileName(); continue; }