From 88d95250ef9d13b9602c64d1ca6ad05529c072ba Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 7 Feb 2012 15:44:12 +0100 Subject: [PATCH] Move repeated searches to top. Task-number: QTCREATORBUG-6907 Change-Id: I25c04185beb3729e2d11cc88d17fcd1a3b51037c Reviewed-by: Tobias Hunger --- src/plugins/cpptools/cppfindreferences.cpp | 2 +- src/plugins/cpptools/symbolsfindfilter.cpp | 2 +- src/plugins/find/searchresultwidget.cpp | 3 +- src/plugins/find/searchresultwidget.h | 3 +- src/plugins/find/searchresultwindow.cpp | 40 ++++++++++++++++++++-- src/plugins/find/searchresultwindow.h | 2 +- src/plugins/texteditor/basefilefind.cpp | 2 +- 7 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 0549f729840..f97dd9f4e2d 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -311,7 +311,7 @@ void CppFindReferences::searchAgain() Find::SearchResult *search = qobject_cast(sender()); CppFindReferencesParameters parameters = search->userData().value(); Snapshot snapshot = CppModelManagerInterface::instance()->snapshot(); - search->reset(); + search->restart(); if (!findSymbol(¶meters, snapshot)) { search->finishSearch(); return; diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index 79356b8063e..aaa84bf7277 100644 --- a/src/plugins/cpptools/symbolsfindfilter.cpp +++ b/src/plugins/cpptools/symbolsfindfilter.cpp @@ -276,7 +276,7 @@ void SymbolsFindFilter::searchAgain() { Find::SearchResult *search = qobject_cast(sender()); QTC_ASSERT(search, return); - search->reset(); + search->restart(); startSearch(search); } diff --git a/src/plugins/find/searchresultwidget.cpp b/src/plugins/find/searchresultwidget.cpp index f3a80240c2b..92fdfaac88e 100644 --- a/src/plugins/find/searchresultwidget.cpp +++ b/src/plugins/find/searchresultwidget.cpp @@ -457,7 +457,7 @@ void SearchResultWidget::goToPrevious() } } -void SearchResultWidget::reset() +void SearchResultWidget::restart() { m_replaceTextEdit->setEnabled(false); m_replaceButton->setEnabled(false); @@ -466,6 +466,7 @@ void SearchResultWidget::reset() m_cancelButton->setVisible(true); m_searchAgainButton->setVisible(false); updateMatchesFoundLabel(); + emit restarted(); } void SearchResultWidget::setSearchAgainSupported(bool supported) diff --git a/src/plugins/find/searchresultwidget.h b/src/plugins/find/searchresultwidget.h index c67e89e276f..bb00a5bcfdf 100644 --- a/src/plugins/find/searchresultwidget.h +++ b/src/plugins/find/searchresultwidget.h @@ -83,7 +83,7 @@ public: void goToNext(); void goToPrevious(); - void reset(); + void restart(); void setSearchAgainSupported(bool supported); void setSearchAgainEnabled(bool enabled); @@ -96,6 +96,7 @@ signals: void replaceButtonClicked(const QString &replaceText, const QList &checkedItems); void searchAgainRequested(); void cancelled(); + void restarted(); void visibilityChanged(bool visible); void navigateStateChanged(); diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp index 4c6425175ba..ca4ad77b5fc 100644 --- a/src/plugins/find/searchresultwindow.cpp +++ b/src/plugins/find/searchresultwindow.cpp @@ -101,6 +101,7 @@ namespace Internal { public slots: void setCurrentIndex(int index); + void moveWidgetToTop(); }; SearchResultWindowPrivate::SearchResultWindowPrivate(SearchResultWindow *window) @@ -135,6 +136,40 @@ namespace Internal { } q->navigateStateChanged(); } + + void SearchResultWindowPrivate::moveWidgetToTop() + { + SearchResultWidget *widget = qobject_cast(sender()); + QTC_ASSERT(widget, return); + int index = m_searchResultWidgets.indexOf(widget); + if (index == 0) + return; // nothing to do + int internalIndex = index + 1/*account for "new search" entry*/; + QString searchEntry = m_recentSearchesBox->itemText(internalIndex); + + m_searchResultWidgets.removeAt(index); + m_widget->removeWidget(widget); + m_recentSearchesBox->removeItem(internalIndex); + SearchResult *result = m_searchResults.takeAt(index); + + m_searchResultWidgets.prepend(widget); + m_widget->insertWidget(1, widget); + m_recentSearchesBox->insertItem(1, searchEntry); + m_searchResults.prepend(result); + + // adapt the current index + if (index == visibleSearchIndex()) { + // was visible, so we switch + // this is the default case + m_currentIndex = 1; + m_widget->setCurrentIndex(1); + m_recentSearchesBox->setCurrentIndex(1); + } else if (visibleSearchIndex() < index) { + // academical case where the widget moved before the current widget + // only our internal book keeping needed + ++m_currentIndex; + } + } } using namespace Find::Internal; @@ -344,6 +379,7 @@ SearchResult *SearchResultWindow::startNewSearch(const QString &label, d->m_searchResultWidgets.prepend(widget); d->m_widget->insertWidget(1, widget); connect(widget, SIGNAL(navigateStateChanged()), this, SLOT(navigateStateChanged())); + connect(widget, SIGNAL(restarted()), d, SLOT(moveWidgetToTop())); widget->setTextEditorFont(d->m_font); widget->setShowReplaceUI(searchOrSearchAndReplace != SearchOnly); widget->setAutoExpandResults(d->m_expandCollapseAction->isChecked()); @@ -651,9 +687,9 @@ void SearchResult::setTextToReplace(const QString &textToReplace) /*! * \brief Removes all search results. */ -void SearchResult::reset() +void SearchResult::restart() { - m_widget->reset(); + m_widget->restart(); } void SearchResult::setSearchAgainEnabled(bool enabled) diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h index 41078b39c18..721c00e1403 100644 --- a/src/plugins/find/searchresultwindow.h +++ b/src/plugins/find/searchresultwindow.h @@ -107,7 +107,7 @@ public slots: void addResults(const QList &items, AddMode mode); void finishSearch(); void setTextToReplace(const QString &textToReplace); - void reset(); + void restart(); void setSearchAgainEnabled(bool enabled); signals: diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 4566dd68e90..47422db53c8 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -319,7 +319,7 @@ void BaseFileFind::hideHighlightAll(bool visible) void BaseFileFind::searchAgain() { SearchResult *search = qobject_cast(sender()); - search->reset(); + search->restart(); runSearch(search); }