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>
This commit is contained in:
Christian Kandeler
2019-10-31 15:48:42 +01:00
parent 6c1b11dd3e
commit 5cd474522a
6 changed files with 50 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);