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 <alessandro.portale@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Samuel Ghinet
2021-09-27 20:21:50 +03:00
parent 04d49fb771
commit 32799b3a7b
5 changed files with 28 additions and 1 deletions

View File

@@ -195,6 +195,11 @@ bool ProjectIntroPage::validate()
return false; return false;
} }
void ProjectIntroPage::fieldsUpdated()
{
slotChanged();
}
void ProjectIntroPage::slotChanged() void ProjectIntroPage::slotChanged()
{ {
const bool newComplete = validate(); 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->setType(t);
d->m_ui.stateLabel->setText(s); d->m_ui.stateLabel->setText(s);
emit statusMessageChanged(t, s);
} }
void ProjectIntroPage::hideStatusLabel() void ProjectIntroPage::hideStatusLabel()

View File

@@ -66,8 +66,14 @@ public:
bool validateProjectName(const QString &name, QString *errorMessage); 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: signals:
void activated(); void activated();
void statusMessageChanged(InfoLabel::InfoType type, const QString &message);
public slots: public slots:
void setFilePath(const FilePath &path); void setFilePath(const FilePath &path);

View File

@@ -956,6 +956,15 @@ void CheckBoxField::setup(JsonFieldPage *page, const QString &name)
}); });
} }
void CheckBoxField::setChecked(bool value)
{
auto w = qobject_cast<QCheckBox *>(widget());
QTC_ASSERT(w, return);
w->setChecked(value);
w->clicked(value);
}
bool CheckBoxField::validate(MacroExpander *expander, QString *message) bool CheckBoxField::validate(MacroExpander *expander, QString *message)
{ {
if (!JsonFieldPage::Field::validate(expander, message)) if (!JsonFieldPage::Field::validate(expander, message))

View File

@@ -230,11 +230,13 @@ private:
Utils::PathChooser::Kind m_kind = Utils::PathChooser::ExistingDirectory; Utils::PathChooser::Kind m_kind = Utils::PathChooser::ExistingDirectory;
}; };
class CheckBoxField : public JsonFieldPage::Field class PROJECTEXPLORER_EXPORT CheckBoxField : public JsonFieldPage::Field
{ {
public: public:
bool suppressName() const override { return true; } bool suppressName() const override { return true; }
void setChecked(bool);
private: private:
bool parseData(const QVariant &data, QString *errorMessage) override; bool parseData(const QVariant &data, QString *errorMessage) override;

View File

@@ -257,12 +257,14 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
.arg(currentFile.fileName()) .arg(currentFile.fileName())
.arg(line).arg(column) .arg(line).arg(column)
.arg(error.errorString())); .arg(error.errorString()));
qWarning() << "Failed to parse wizard: " << currentFile.fileName();
continue; continue;
} }
if (!json.isObject()) { if (!json.isObject()) {
verboseLog.append(tr("* Did not find a JSON object in \"%1\".\n") verboseLog.append(tr("* Did not find a JSON object in \"%1\".\n")
.arg(currentFile.fileName())); .arg(currentFile.fileName()));
qWarning() << "Failed to parse wizard: " << currentFile.fileName();
continue; continue;
} }
@@ -280,6 +282,7 @@ QList<Core::IWizardFactory *> JsonWizardFactory::createWizardFactories()
JsonWizardFactory *factory = createWizardFactory(data, currentDir, &errorMessage); JsonWizardFactory *factory = createWizardFactory(data, currentDir, &errorMessage);
if (!factory) { if (!factory) {
verboseLog.append(tr("* Failed to create: %1\n").arg(errorMessage)); verboseLog.append(tr("* Failed to create: %1\n").arg(errorMessage));
qWarning() << "Failed to create wizard: " << currentFile.fileName();
continue; continue;
} }