diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2019-10-31 15:48:42 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2019-11-01 09:44:49 +0000 |
commit | 5cd474522a7438986663d551cbc324f456cd6818 (patch) | |
tree | 2b0110618c2d53952371884890c7b8685bd00b95 /src/plugins/projectexplorer/targetsetupwidget.cpp | |
parent | 6c1b11dd3e45e3fe3946ce0cc97914d44af1709b (diff) |
Target setup page: Fix some glitches
- Make sure the "Manage" button is always enabled.
- Clear the list of possible build configs and collapse
the details widget when a kit becomes unusable.
- Do not collapse the details widget when it gets selected.
- The "Details" button was sometimes grayed out when it shouldn't
have been.
Change-Id: Ibc0f44213b633aebddfa7542d7dbdd0244df23f9
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer/targetsetupwidget.cpp')
-rw-r--r-- | src/plugins/projectexplorer/targetsetupwidget.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/plugins/projectexplorer/targetsetupwidget.cpp b/src/plugins/projectexplorer/targetsetupwidget.cpp index 432abb53b4..ddcda6d8ff 100644 --- a/src/plugins/projectexplorer/targetsetupwidget.cpp +++ b/src/plugins/projectexplorer/targetsetupwidget.cpp @@ -122,7 +122,7 @@ bool TargetSetupWidget::isKitSelected() const void TargetSetupWidget::setKitSelected(bool b) { // Only check target if there are build configurations possible - b &= !selectedBuildInfoList().isEmpty(); + b &= hasSelectedBuildConfigurations(); m_ignoreChange = true; m_detailsWidget->setChecked(b); m_detailsWidget->widget()->setEnabled(b); @@ -187,9 +187,12 @@ void TargetSetupWidget::targetCheckBoxToggled(bool b) if (m_ignoreChange) return; m_detailsWidget->widget()->setEnabled(b); - m_detailsWidget->setState(b && Utils::contains(m_infoStore, &BuildInfoStore::hasIssues) - ? Utils::DetailsWidget::Expanded - : Utils::DetailsWidget::Collapsed); + if (b && (contains(m_infoStore, &BuildInfoStore::hasIssues) + || !contains(m_infoStore, &BuildInfoStore::isEnabled))) { + m_detailsWidget->setState(DetailsWidget::Expanded); + } else if (!b) { + m_detailsWidget->setState(Utils::DetailsWidget::Collapsed); + } emit selectedToggled(); } @@ -230,12 +233,13 @@ void TargetSetupWidget::update(const Kit::Predicate &predicate) // Kits that don't fulfill the project predicate are not selectable, because we cannot // guarantee that we can handle the project sensibly (e.g. qmake project without Qt). if (predicate && !predicate(kit())) { - setEnabled(false); + toggleEnabled(false); + m_infoStore.clear(); m_detailsWidget->setToolTip(tr("You cannot use this kit, because it does not fulfill " "the project's prerequisites.")); return; } - setEnabled(true); + toggleEnabled(true); m_detailsWidget->setIcon(kit()->isValid() ? kit()->icon() : Icons::CRITICAL.icon()); m_detailsWidget->setToolTip(m_kit->toHtml()); updateDefaultBuildDirectories(); @@ -251,6 +255,22 @@ const QList<BuildInfo> TargetSetupWidget::buildInfoList(const Kit *k, const File return {info}; } +bool TargetSetupWidget::hasSelectedBuildConfigurations() const +{ + return !selectedBuildInfoList().isEmpty(); +} + +void TargetSetupWidget::toggleEnabled(bool enabled) +{ + m_detailsWidget->widget()->setEnabled(enabled && hasSelectedBuildConfigurations()); + m_detailsWidget->setCheckable(enabled); + m_detailsWidget->setExpandable(enabled); + if (!enabled) { + m_detailsWidget->setState(DetailsWidget::Collapsed); + m_detailsWidget->setChecked(false); + } +} + const QList<BuildInfo> TargetSetupWidget::selectedBuildInfoList() const { QList<BuildInfo> result; |