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 | |
parent | 6c1b11dd3e45e3fe3946ce0cc97914d44af1709b (diff) | |
download | qt-creator-5cd474522a7438986663d551cbc324f456cd6818.tar.gz |
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>
-rw-r--r-- | src/libs/utils/detailsbutton.cpp | 8 | ||||
-rw-r--r-- | src/libs/utils/detailsbutton.h | 1 | ||||
-rw-r--r-- | src/libs/utils/detailswidget.cpp | 10 | ||||
-rw-r--r-- | src/libs/utils/detailswidget.h | 2 | ||||
-rw-r--r-- | src/plugins/projectexplorer/targetsetupwidget.cpp | 32 | ||||
-rw-r--r-- | src/plugins/projectexplorer/targetsetupwidget.h | 3 |
6 files changed, 50 insertions, 6 deletions
diff --git a/src/libs/utils/detailsbutton.cpp b/src/libs/utils/detailsbutton.cpp index abceff7b2d..07c27d3b70 100644 --- a/src/libs/utils/detailsbutton.cpp +++ b/src/libs/utils/detailsbutton.cpp @@ -110,6 +110,14 @@ bool DetailsButton::event(QEvent *e) return false; } +void DetailsButton::changeEvent(QEvent *e) +{ + if (e->type() == QEvent::EnabledChange) { + m_checkedPixmap = QPixmap(); + m_uncheckedPixmap = QPixmap(); + } +} + void DetailsButton::paintEvent(QPaintEvent *e) { QWidget::paintEvent(e); diff --git a/src/libs/utils/detailsbutton.h b/src/libs/utils/detailsbutton.h index dabbe75918..3c7286e9ee 100644 --- a/src/libs/utils/detailsbutton.h +++ b/src/libs/utils/detailsbutton.h @@ -71,6 +71,7 @@ public: protected: void paintEvent(QPaintEvent *e) override; bool event(QEvent *e) override; + void changeEvent(QEvent *e) override; private: QPixmap cacheRendering(const QSize &size, bool checked); diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp index dd02d1a4a5..06159b101e 100644 --- a/src/libs/utils/detailswidget.cpp +++ b/src/libs/utils/detailswidget.cpp @@ -229,6 +229,16 @@ void DetailsWidget::setUseCheckBox(bool b) d->updateControls(); } +void DetailsWidget::setCheckable(bool b) +{ + d->m_summaryCheckBox->setEnabled(b); +} + +void DetailsWidget::setExpandable(bool b) +{ + d->m_detailsButton->setEnabled(b); +} + void DetailsWidget::setChecked(bool b) { d->m_summaryCheckBox->setChecked(b); diff --git a/src/libs/utils/detailswidget.h b/src/libs/utils/detailswidget.h index f96f0f549d..e9c55c9eaf 100644 --- a/src/libs/utils/detailswidget.h +++ b/src/libs/utils/detailswidget.h @@ -78,6 +78,8 @@ public: bool useCheckBox(); void setUseCheckBox(bool b); + void setCheckable(bool b); + void setExpandable(bool b); void setIcon(const QIcon &icon); static QPixmap createBackground(const QSize &size, int topHeight, QWidget *widget); 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; diff --git a/src/plugins/projectexplorer/targetsetupwidget.h b/src/plugins/projectexplorer/targetsetupwidget.h index 80f64ad918..6534baf700 100644 --- a/src/plugins/projectexplorer/targetsetupwidget.h +++ b/src/plugins/projectexplorer/targetsetupwidget.h @@ -78,6 +78,9 @@ signals: private: static const QList<BuildInfo> buildInfoList(const Kit *k, const Utils::FilePath &projectPath); + bool hasSelectedBuildConfigurations() const; + + void toggleEnabled(bool enabled); void checkBoxToggled(bool b); void pathChanged(); void targetCheckBoxToggled(bool b); |