From 8c7eee4ff75f1d438743f6c5a6f0798acef64afa Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 7 Feb 2022 14:18:49 +0100 Subject: [PATCH] Core: Fix "reactiveness" of FindToolBar The recently added "Select All" button needs to be included in the width calculation. If the find buttons switch to icon mode, "Select All" gets hidden. Also, if the replace buttons are visible, they define whether all buttons are shwon in full text or get hidden. No icon mode at all in that case. Change-Id: Ie85a68c7f7c3f1a6ca51ed3f91d64124eeb7aa1a Reviewed-by: Eike Ziller --- src/plugins/coreplugin/find/findtoolbar.cpp | 32 ++++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/plugins/coreplugin/find/findtoolbar.cpp b/src/plugins/coreplugin/find/findtoolbar.cpp index f7345f28c9c..ccfd99e9859 100644 --- a/src/plugins/coreplugin/find/findtoolbar.cpp +++ b/src/plugins/coreplugin/find/findtoolbar.cpp @@ -437,6 +437,8 @@ void FindToolBar::updateToolBar() m_ui.findPreviousButton->setVisible(showAllControls); m_ui.findNextButton->setEnabled(enabled); m_ui.findNextButton->setVisible(showAllControls); + m_ui.selectAllButton->setVisible(style == ControlStyle::Text + && m_currentDocumentFind->supportsSelectAll()); m_ui.horizontalSpacer->changeSize((showAllControls ? FINDBUTTON_SPACER_WIDTH : 0), 0, QSizePolicy::Expanding, QSizePolicy::Ignored); m_ui.findButtonLayout->invalidate(); // apply spacer change @@ -768,10 +770,25 @@ FindToolBar::ControlStyle FindToolBar::controlStyle(bool replaceIsVisible) { const Qt::ToolButtonStyle currentFindButtonStyle = m_ui.findNextButton->toolButtonStyle(); const int fullWidth = width(); + + if (replaceIsVisible) { + // Since the replace buttons do not collapse to icons, they have precedence, here. + const int replaceFixedWidth = m_ui.replaceLabel->sizeHint().width() + + m_ui.replaceButton->sizeHint().width() + + m_ui.replaceNextButton->sizeHint().width() + + m_ui.replaceAllButton->sizeHint().width() + + m_ui.advancedButton->sizeHint().width(); + return fullWidth - replaceFixedWidth >= MINIMUM_WIDTH_FOR_COMPLEX_LAYOUT ? + ControlStyle::Text : ControlStyle::Hidden; + } + const auto findWidth = [this] { + const int selectAllWidth = m_currentDocumentFind->supportsSelectAll() ? + m_ui.selectAllButton->sizeHint().width() : 0; return m_ui.findLabel->sizeHint().width() + m_ui.findNextButton->sizeHint().width() - + m_ui.findPreviousButton->sizeHint().width() + FINDBUTTON_SPACER_WIDTH - + m_ui.close->sizeHint().width(); + + m_ui.findPreviousButton->sizeHint().width() + + selectAllWidth + FINDBUTTON_SPACER_WIDTH + + m_ui.close->sizeHint().width(); }; setFindButtonStyle(Qt::ToolButtonTextOnly); const int findWithTextWidth = findWidth(); @@ -782,15 +799,8 @@ FindToolBar::ControlStyle FindToolBar::controlStyle(bool replaceIsVisible) return ControlStyle::Hidden; if (fullWidth - findWithTextWidth < MINIMUM_WIDTH_FOR_COMPLEX_LAYOUT) return ControlStyle::Icon; - if (!replaceIsVisible) - return ControlStyle::Text; - const int replaceFixedWidth = m_ui.replaceLabel->sizeHint().width() - + m_ui.replaceButton->sizeHint().width() - + m_ui.replaceNextButton->sizeHint().width() - + m_ui.replaceAllButton->sizeHint().width() - + m_ui.advancedButton->sizeHint().width(); - return fullWidth - replaceFixedWidth >= MINIMUM_WIDTH_FOR_COMPLEX_LAYOUT ? ControlStyle::Text - : ControlStyle::Hidden; + + return ControlStyle::Text; } void FindToolBar::setFindButtonStyle(Qt::ToolButtonStyle style)