From 86e88c18b088aebaa97299c8fbdac4b5cdf8dfdd Mon Sep 17 00:00:00 2001 From: Francois Ferrand Date: Wed, 5 Apr 2017 10:42:15 +0200 Subject: [PATCH] More compact search widget * Move the search icon (with popup menu) and clear icon inside the line edit * Move the search widget to the right-side of toolbar --- src/gui/SearchWidget.cpp | 17 +++++++++----- src/gui/SearchWidget.ui | 50 ++++++++++++++++------------------------ tests/gui/TestGui.cpp | 9 ++++++-- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/gui/SearchWidget.cpp b/src/gui/SearchWidget.cpp index 933686df..e94f838c 100644 --- a/src/gui/SearchWidget.cpp +++ b/src/gui/SearchWidget.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "core/FilePath.h" @@ -34,9 +35,7 @@ SearchWidget::SearchWidget(QWidget *parent) m_searchTimer->setSingleShot(true); connect(m_ui->searchEdit, SIGNAL(textChanged(QString)), SLOT(startSearchTimer())); - connect(m_ui->searchIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(setFocus())); - connect(m_ui->clearIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(clear())); - connect(m_ui->clearIcon, SIGNAL(pressed()), m_ui->searchEdit, SLOT(setFocus())); + connect(m_ui->clearIcon, SIGNAL(triggered(bool)), m_ui->searchEdit, SLOT(clear())); connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(startSearch())); connect(this, SIGNAL(escapePressed()), m_ui->searchEdit, SLOT(clear())); @@ -52,10 +51,16 @@ SearchWidget::SearchWidget(QWidget *parent) m_ui->searchIcon->setIcon(filePath()->icon("actions", "system-search")); m_ui->searchIcon->setMenu(searchMenu); - m_ui->searchIcon->setPopupMode(QToolButton::MenuButtonPopup); + m_ui->searchEdit->addAction(m_ui->searchIcon, QLineEdit::LeadingPosition); m_ui->clearIcon->setIcon(filePath()->icon("actions", "edit-clear-locationbar-rtl")); - m_ui->clearIcon->setEnabled(false); + m_ui->clearIcon->setVisible(false); + m_ui->searchEdit->addAction(m_ui->clearIcon, QLineEdit::TrailingPosition); + + // Fix initial visibility of actions (bug in Qt) + for (QToolButton * toolButton: m_ui->searchEdit->findChildren()) { + toolButton->setVisible(toolButton->defaultAction()->isVisible()); + } } SearchWidget::~SearchWidget() @@ -133,7 +138,7 @@ void SearchWidget::startSearch() } bool hasText = m_ui->searchEdit->text().length() > 0; - m_ui->clearIcon->setEnabled(hasText); + m_ui->clearIcon->setVisible(hasText); search(m_ui->searchEdit->text()); } diff --git a/src/gui/SearchWidget.ui b/src/gui/SearchWidget.ui index 46c2699f..1583ebe9 100644 --- a/src/gui/SearchWidget.ui +++ b/src/gui/SearchWidget.ui @@ -30,20 +30,17 @@ 0 - - - Qt::ClickFocus + + + Qt::Horizontal - - Search + + + 40 + 20 + - - Qt::ToolButtonIconOnly - - - true - - + @@ -51,33 +48,26 @@ padding:3px - Find + Search... false - - - - Qt::ClickFocus - - - Clear - - - Qt::ToolButtonIconOnly - - - true - - - + + + Search + + + + + Clear + + - searchIcon searchEdit diff --git a/tests/gui/TestGui.cpp b/tests/gui/TestGui.cpp index 90f87319..704ef2e8 100644 --- a/tests/gui/TestGui.cpp +++ b/tests/gui/TestGui.cpp @@ -410,19 +410,24 @@ void TestGui::testSearch() EntryView* entryView = m_dbWidget->findChild("entryView"); QVERIFY(entryView->isVisible()); + QAction* clearButton = searchWidget->findChild("clearIcon"); + QVERIFY(!clearButton->isVisible()); + // Enter search QTest::mouseClick(searchTextEdit, Qt::LeftButton); QTRY_VERIFY(searchTextEdit->hasFocus()); + QTRY_VERIFY(!clearButton->isVisible()); // Search for "ZZZ" QTest::keyClicks(searchTextEdit, "ZZZ"); QTRY_COMPARE(searchTextEdit->text(), QString("ZZZ")); + QTRY_VERIFY(clearButton->isVisible()); QTRY_VERIFY(m_dbWidget->isInSearchMode()); QTRY_COMPARE(entryView->model()->rowCount(), 0); // Press the search clear button - QToolButton* clearButton = searchWidget->findChild("clearIcon"); - QTest::mouseClick(clearButton, Qt::LeftButton); + clearButton->trigger(); QTRY_VERIFY(searchTextEdit->text().isEmpty()); QTRY_VERIFY(searchTextEdit->hasFocus()); + QTRY_VERIFY(!clearButton->isVisible()); // Escape clears searchedit and retains focus QTest::keyClicks(searchTextEdit, "ZZZ"); QTest::keyClick(searchTextEdit, Qt::Key_Escape);