diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-03-08 15:36:55 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-03-16 11:25:48 +0000 |
commit | 49c910c7ab61e352ad19ad012978358e18fbcef6 (patch) | |
tree | 0ebfccc056ede2bd20ec087f878fcbead21f73a3 | |
parent | c8f1da095d22097ed7a8ef0fc84b4ceb7a752cb4 (diff) | |
download | qt-creator-49c910c7ab61e352ad19ad012978358e18fbcef6.tar.gz |
TargetSetupPage: Work for projects without BuildConfiguration
Change-Id: Ie145bc3c87f01326a25e75f5c80a4d05da58bf6b
Reviewed-by: hjk <hjk@qt.io>
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 3 | ||||
-rw-r--r-- | src/plugins/projectexplorer/targetsetuppage.cpp | 22 | ||||
-rw-r--r-- | src/plugins/projectexplorer/targetsetupwidget.cpp | 85 | ||||
-rw-r--r-- | src/plugins/projectexplorer/targetsetupwidget.h | 5 |
4 files changed, 64 insertions, 51 deletions
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index ed6f29dfd9..4a40420b87 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -842,6 +842,9 @@ void Project::setup(QList<const BuildInfo *> infoList) toRegister << t; } + if (!info->factory()) + continue; + BuildConfiguration *bc = info->factory()->create(t, info); if (!bc) continue; diff --git a/src/plugins/projectexplorer/targetsetuppage.cpp b/src/plugins/projectexplorer/targetsetuppage.cpp index f39582e7f1..534f9f2c47 100644 --- a/src/plugins/projectexplorer/targetsetuppage.cpp +++ b/src/plugins/projectexplorer/targetsetuppage.cpp @@ -552,19 +552,23 @@ TargetSetupWidget *TargetSetupPage::addWidget(Kit *k) if (!k || (m_requiredPredicate && !m_requiredPredicate(k))) return nullptr; - IBuildConfigurationFactory *factory + const IBuildConfigurationFactory *const factory = IBuildConfigurationFactory::find(k, m_projectPath); - if (!factory) - return nullptr; + const QList<BuildInfo *> infoList = [this, k, factory]() { + if (factory) + return factory->availableSetups(k, m_projectPath); - QList<BuildInfo *> infoList = factory->availableSetups(k, m_projectPath); - TargetSetupWidget *widget = infoList.isEmpty() ? nullptr : new TargetSetupWidget(k, m_projectPath, infoList); - if (!widget) - return nullptr; + BuildInfo *info = new BuildInfo(nullptr); + info->kitId = k->id(); + return QList<BuildInfo *>({info}); + }(); + + // Not all projects have BuildConfigurations, that is perfectly fine. + TargetSetupWidget *widget = new TargetSetupWidget(k, m_projectPath); m_baseLayout->removeWidget(m_importWidget); - foreach (QWidget *widget, m_potentialWidgets) - m_baseLayout->removeWidget(widget); + foreach (QWidget *potentialWidget, m_potentialWidgets) + m_baseLayout->removeWidget(potentialWidget); m_baseLayout->removeItem(m_spacer); widget->setKitSelected(m_preferredPredicate && m_preferredPredicate(k)); diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp index f5213a9071..959a167b49 100644 --- a/src/plugins/projectexplorer/targetsetupwidget.cpp +++ b/src/plugins/projectexplorer/targetsetupwidget.cpp @@ -56,9 +56,7 @@ namespace Internal { // TargetSetupWidget // ------------------------------------------------------------------------- -TargetSetupWidget::TargetSetupWidget(Kit *k, - const QString &projectPath, - const QList<BuildInfo *> &infoList) : +TargetSetupWidget::TargetSetupWidget(Kit *k, const QString &projectPath) : m_kit(k) { Q_ASSERT(m_kit); @@ -98,9 +96,6 @@ TargetSetupWidget::TargetSetupWidget(Kit *k, widget->setEnabled(false); m_detailsWidget->setWidget(widget); - foreach (BuildInfo *info, infoList) - addBuildInfo(info, false); - setProjectPath(projectPath); connect(m_detailsWidget, &Utils::DetailsWidget::checked, @@ -142,6 +137,8 @@ void TargetSetupWidget::setKitSelected(bool b) void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport) { + QTC_ASSERT(info && info->kitId == m_kit->id(), return); + if (isImport && !m_haveImported) { // disable everything on first import for (BuildInfoStore &store : m_infoStore) { @@ -160,26 +157,28 @@ void TargetSetupWidget::addBuildInfo(BuildInfo *info, bool isImport) store.isEnabled = true; ++m_selected; - store.checkbox = new QCheckBox; - store.checkbox->setText(info->displayName); - store.checkbox->setChecked(store.isEnabled); - store.checkbox->setAttribute(Qt::WA_LayoutUsesWidgetRect); - m_newBuildsLayout->addWidget(store.checkbox, pos * 2, 0); - - store.pathChooser = new Utils::PathChooser(); - store.pathChooser->setExpectedKind(Utils::PathChooser::Directory); - store.pathChooser->setFileName(info->buildDirectory); - store.pathChooser->setHistoryCompleter(QLatin1String("TargetSetup.BuildDir.History")); - store.pathChooser->setReadOnly(isImport); - m_newBuildsLayout->addWidget(store.pathChooser, pos * 2, 1); - - store.issuesLabel = new QLabel; - store.issuesLabel->setIndent(32); - m_newBuildsLayout->addWidget(store.issuesLabel, pos * 2 + 1, 0, 1, 2); - store.issuesLabel->setVisible(false); - - connect(store.checkbox, &QAbstractButton::toggled, this, &TargetSetupWidget::checkBoxToggled); - connect(store.pathChooser, &Utils::PathChooser::rawPathChanged, this, &TargetSetupWidget::pathChanged); + if (info->factory()) { + store.checkbox = new QCheckBox; + store.checkbox->setText(info->displayName); + store.checkbox->setChecked(store.isEnabled); + store.checkbox->setAttribute(Qt::WA_LayoutUsesWidgetRect); + m_newBuildsLayout->addWidget(store.checkbox, pos * 2, 0); + + store.pathChooser = new Utils::PathChooser(); + store.pathChooser->setExpectedKind(Utils::PathChooser::Directory); + store.pathChooser->setFileName(info->buildDirectory); + store.pathChooser->setHistoryCompleter(QLatin1String("TargetSetup.BuildDir.History")); + store.pathChooser->setReadOnly(isImport); + m_newBuildsLayout->addWidget(store.pathChooser, pos * 2, 1); + + store.issuesLabel = new QLabel; + store.issuesLabel->setIndent(32); + m_newBuildsLayout->addWidget(store.issuesLabel, pos * 2 + 1, 0, 1, 2); + store.issuesLabel->setVisible(false); + + connect(store.checkbox, &QAbstractButton::toggled, this, &TargetSetupWidget::checkBoxToggled); + connect(store.pathChooser, &Utils::PathChooser::rawPathChanged, this, &TargetSetupWidget::pathChanged); + } store.hasIssues = false; m_infoStore.emplace_back(std::move(store)); @@ -218,15 +217,7 @@ void TargetSetupWidget::setProjectPath(const QString &projectPath) m_projectPath = projectPath; clear(); - IBuildConfigurationFactory *factory - = IBuildConfigurationFactory::find(m_kit, projectPath); - - if (!factory) - return; - - QList<BuildInfo *> infoList - = factory->availableSetups(m_kit, projectPath); - foreach (BuildInfo *info, infoList) + for (BuildInfo *info : buildInfoList(m_kit, projectPath)) addBuildInfo(info, false); } @@ -235,6 +226,18 @@ void TargetSetupWidget::expandWidget() m_detailsWidget->setState(Utils::DetailsWidget::Expanded); } +QList<BuildInfo *> TargetSetupWidget::buildInfoList(const Kit *k, const QString &projectPath) +{ + const IBuildConfigurationFactory *const factory + = IBuildConfigurationFactory::find(k, projectPath); + if (factory) + return factory->availableSetups(k, projectPath); + + BuildInfo *info = new BuildInfo(nullptr); + info->kitId = k->id(); + return QList<BuildInfo *>({info}); +} + void TargetSetupWidget::handleKitUpdate(Kit *k) { if (k != m_kit) @@ -304,15 +307,17 @@ void TargetSetupWidget::reportIssues(int index) QTC_ASSERT(index >= 0 && index < size, return); BuildInfoStore &store = m_infoStore[static_cast<size_t>(index)]; - QPair<Task::TaskType, QString> issues = findIssues(store.buildInfo); - store.issuesLabel->setText(issues.second); - store.hasIssues = issues.first != Task::Unknown; - store.issuesLabel->setVisible(store.hasIssues); + if (store.issuesLabel) { + QPair<Task::TaskType, QString> issues = findIssues(store.buildInfo); + store.issuesLabel->setText(issues.second); + store.hasIssues = issues.first != Task::Unknown; + store.issuesLabel->setVisible(store.hasIssues); + } } QPair<Task::TaskType, QString> TargetSetupWidget::findIssues(const BuildInfo *info) { - if (m_projectPath.isEmpty()) + if (m_projectPath.isEmpty() || !info->factory()) return qMakePair(Task::Unknown, QString()); QString buildDir = info->buildDirectory.toString(); diff --git a/src/plugins/projectexplorer/targetsetupwidget.h b/src/plugins/projectexplorer/targetsetupwidget.h index 63237ae312..bee0a0c3e6 100644 --- a/src/plugins/projectexplorer/targetsetupwidget.h +++ b/src/plugins/projectexplorer/targetsetupwidget.h @@ -58,8 +58,7 @@ class TargetSetupWidget : public QWidget public: TargetSetupWidget(Kit *k, - const QString &projectPath, - const QList<BuildInfo *> &infoList); + const QString &projectPath); Kit *kit(); void clearKit(); @@ -77,6 +76,8 @@ signals: void selectedToggled() const; private: + static QList<BuildInfo *> buildInfoList(const Kit *k, const QString &projectPath); + void handleKitUpdate(ProjectExplorer::Kit *k); void checkBoxToggled(bool b); |