forked from qt-creator/qt-creator
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:
@@ -110,6 +110,14 @@ bool DetailsButton::event(QEvent *e)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DetailsButton::changeEvent(QEvent *e)
|
||||||
|
{
|
||||||
|
if (e->type() == QEvent::EnabledChange) {
|
||||||
|
m_checkedPixmap = QPixmap();
|
||||||
|
m_uncheckedPixmap = QPixmap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DetailsButton::paintEvent(QPaintEvent *e)
|
void DetailsButton::paintEvent(QPaintEvent *e)
|
||||||
{
|
{
|
||||||
QWidget::paintEvent(e);
|
QWidget::paintEvent(e);
|
||||||
|
@@ -71,6 +71,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *e) override;
|
void paintEvent(QPaintEvent *e) override;
|
||||||
bool event(QEvent *e) override;
|
bool event(QEvent *e) override;
|
||||||
|
void changeEvent(QEvent *e) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPixmap cacheRendering(const QSize &size, bool checked);
|
QPixmap cacheRendering(const QSize &size, bool checked);
|
||||||
|
@@ -229,6 +229,16 @@ void DetailsWidget::setUseCheckBox(bool b)
|
|||||||
d->updateControls();
|
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)
|
void DetailsWidget::setChecked(bool b)
|
||||||
{
|
{
|
||||||
d->m_summaryCheckBox->setChecked(b);
|
d->m_summaryCheckBox->setChecked(b);
|
||||||
|
@@ -78,6 +78,8 @@ public:
|
|||||||
|
|
||||||
bool useCheckBox();
|
bool useCheckBox();
|
||||||
void setUseCheckBox(bool b);
|
void setUseCheckBox(bool b);
|
||||||
|
void setCheckable(bool b);
|
||||||
|
void setExpandable(bool b);
|
||||||
void setIcon(const QIcon &icon);
|
void setIcon(const QIcon &icon);
|
||||||
|
|
||||||
static QPixmap createBackground(const QSize &size, int topHeight, QWidget *widget);
|
static QPixmap createBackground(const QSize &size, int topHeight, QWidget *widget);
|
||||||
|
@@ -122,7 +122,7 @@ bool TargetSetupWidget::isKitSelected() const
|
|||||||
void TargetSetupWidget::setKitSelected(bool b)
|
void TargetSetupWidget::setKitSelected(bool b)
|
||||||
{
|
{
|
||||||
// Only check target if there are build configurations possible
|
// Only check target if there are build configurations possible
|
||||||
b &= !selectedBuildInfoList().isEmpty();
|
b &= hasSelectedBuildConfigurations();
|
||||||
m_ignoreChange = true;
|
m_ignoreChange = true;
|
||||||
m_detailsWidget->setChecked(b);
|
m_detailsWidget->setChecked(b);
|
||||||
m_detailsWidget->widget()->setEnabled(b);
|
m_detailsWidget->widget()->setEnabled(b);
|
||||||
@@ -187,9 +187,12 @@ void TargetSetupWidget::targetCheckBoxToggled(bool b)
|
|||||||
if (m_ignoreChange)
|
if (m_ignoreChange)
|
||||||
return;
|
return;
|
||||||
m_detailsWidget->widget()->setEnabled(b);
|
m_detailsWidget->widget()->setEnabled(b);
|
||||||
m_detailsWidget->setState(b && Utils::contains(m_infoStore, &BuildInfoStore::hasIssues)
|
if (b && (contains(m_infoStore, &BuildInfoStore::hasIssues)
|
||||||
? Utils::DetailsWidget::Expanded
|
|| !contains(m_infoStore, &BuildInfoStore::isEnabled))) {
|
||||||
: Utils::DetailsWidget::Collapsed);
|
m_detailsWidget->setState(DetailsWidget::Expanded);
|
||||||
|
} else if (!b) {
|
||||||
|
m_detailsWidget->setState(Utils::DetailsWidget::Collapsed);
|
||||||
|
}
|
||||||
emit selectedToggled();
|
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
|
// 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).
|
// guarantee that we can handle the project sensibly (e.g. qmake project without Qt).
|
||||||
if (predicate && !predicate(kit())) {
|
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 "
|
m_detailsWidget->setToolTip(tr("You cannot use this kit, because it does not fulfill "
|
||||||
"the project's prerequisites."));
|
"the project's prerequisites."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setEnabled(true);
|
toggleEnabled(true);
|
||||||
m_detailsWidget->setIcon(kit()->isValid() ? kit()->icon() : Icons::CRITICAL.icon());
|
m_detailsWidget->setIcon(kit()->isValid() ? kit()->icon() : Icons::CRITICAL.icon());
|
||||||
m_detailsWidget->setToolTip(m_kit->toHtml());
|
m_detailsWidget->setToolTip(m_kit->toHtml());
|
||||||
updateDefaultBuildDirectories();
|
updateDefaultBuildDirectories();
|
||||||
@@ -251,6 +255,22 @@ const QList<BuildInfo> TargetSetupWidget::buildInfoList(const Kit *k, const File
|
|||||||
return {info};
|
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
|
const QList<BuildInfo> TargetSetupWidget::selectedBuildInfoList() const
|
||||||
{
|
{
|
||||||
QList<BuildInfo> result;
|
QList<BuildInfo> result;
|
||||||
|
@@ -78,6 +78,9 @@ signals:
|
|||||||
private:
|
private:
|
||||||
static const QList<BuildInfo> buildInfoList(const Kit *k, const Utils::FilePath &projectPath);
|
static const QList<BuildInfo> buildInfoList(const Kit *k, const Utils::FilePath &projectPath);
|
||||||
|
|
||||||
|
bool hasSelectedBuildConfigurations() const;
|
||||||
|
|
||||||
|
void toggleEnabled(bool enabled);
|
||||||
void checkBoxToggled(bool b);
|
void checkBoxToggled(bool b);
|
||||||
void pathChanged();
|
void pathChanged();
|
||||||
void targetCheckBoxToggled(bool b);
|
void targetCheckBoxToggled(bool b);
|
||||||
|
Reference in New Issue
Block a user