diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp index 5e3cd1f9b3b..97f8bdb5f07 100644 --- a/src/libs/utils/detailswidget.cpp +++ b/src/libs/utils/detailswidget.cpp @@ -139,8 +139,10 @@ QPixmap DetailsWidgetPrivate::cacheBackground(const QSize &size, bool expanded) pixmap.fill(Qt::transparent); QPainter p(&pixmap); - int topHeight = qMax(m_detailsButton->height(), - m_useCheckBox ? m_summaryCheckBox->height() : m_summaryLabel->height()); + int topHeight = m_useCheckBox ? m_summaryCheckBox->height() : m_summaryLabel->height(); + if (m_state == DetailsWidget::Expanded || m_state == DetailsWidget::Collapsed) // Details Button is shown + topHeight = qMax(m_detailsButton->height(), topHeight); + QRect topRect(0, 0, size.width(), topHeight); QRect fullRect(0, 0, size.width(), size.height()); #ifdef Q_WS_MAC @@ -175,7 +177,7 @@ void DetailsWidgetPrivate::updateControls() if (m_widget) m_widget->setVisible(m_state == DetailsWidget::Expanded || m_state == DetailsWidget::NoSummary); m_detailsButton->setChecked(m_state == DetailsWidget::Expanded && m_widget); - m_detailsButton->setVisible(m_state != DetailsWidget::NoSummary); + m_detailsButton->setVisible(m_state == DetailsWidget::Expanded || m_state == DetailsWidget::Collapsed); m_summaryLabel->setVisible(m_state != DetailsWidget::NoSummary && !m_useCheckBox); m_summaryCheckBox->setVisible(m_state != DetailsWidget::NoSummary && m_useCheckBox); @@ -269,7 +271,7 @@ void DetailsWidget::paintEvent(QPaintEvent *paintEvent) QPoint topLeft(topLeftWidget->geometry().left() - MARGIN, contentsRect().top()); const QRect paintArea(topLeft, contentsRect().bottomRight()); - if (d->m_state != Expanded) { + if (d->m_state == Collapsed) { if (d->m_collapsedPixmap.isNull() || d->m_collapsedPixmap.size() != size()) d->m_collapsedPixmap = d->cacheBackground(paintArea.size(), false); diff --git a/src/libs/utils/detailswidget.h b/src/libs/utils/detailswidget.h index ac688ceac48..e15d3549470 100644 --- a/src/libs/utils/detailswidget.h +++ b/src/libs/utils/detailswidget.h @@ -56,7 +56,8 @@ public: enum State { Expanded, Collapsed, - NoSummary + NoSummary, + OnlySummary }; explicit DetailsWidget(QWidget *parent = 0); diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 37f2406e143..d0eb7f223dc 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -140,6 +140,7 @@ public: virtual QString summaryText() const = 0; virtual QString additionalSummaryText() const { return QString(); } virtual QString displayName() const = 0; + virtual bool showWidget() const { return true; } signals: void updateSummary(); diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index e3637ee03b9..b0611185178 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -180,7 +180,9 @@ void BuildStepListWidget::init(BuildStepList *bsl) for (int i = 0; i < bsl->count(); ++i) { addBuildStep(i); - m_buildStepsData.at(i)->detailsWidget->setState(Utils::DetailsWidget::Collapsed); + // addBuilStep expands the config widget by default, which we don't want here + if (m_buildStepsData.at(i)->widget->showWidget()) + m_buildStepsData.at(i)->detailsWidget->setState(Utils::DetailsWidget::Collapsed); } m_noStepsLabel->setVisible(bsl->isEmpty()); @@ -261,7 +263,11 @@ void BuildStepListWidget::addBuildStep(int pos) BuildStep *newStep = m_buildStepList->at(pos); addBuildStepWidget(pos, newStep); BuildStepsWidgetData *s = m_buildStepsData.at(pos); - s->detailsWidget->setState(Utils::DetailsWidget::Expanded); + // Expand new build steps by default + if (s->widget->showWidget()) + s->detailsWidget->setState(Utils::DetailsWidget::Expanded); + else + s->detailsWidget->setState(Utils::DetailsWidget::OnlySummary); m_noStepsLabel->setVisible(false); updateBuildStepButtonsState();