summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2019-10-31 15:48:42 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2019-11-01 09:44:49 +0000
commit5cd474522a7438986663d551cbc324f456cd6818 (patch)
tree2b0110618c2d53952371884890c7b8685bd00b95
parent6c1b11dd3e45e3fe3946ce0cc97914d44af1709b (diff)
downloadqt-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.cpp8
-rw-r--r--src/libs/utils/detailsbutton.h1
-rw-r--r--src/libs/utils/detailswidget.cpp10
-rw-r--r--src/libs/utils/detailswidget.h2
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.cpp32
-rw-r--r--src/plugins/projectexplorer/targetsetupwidget.h3
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);