Move repeated searches to top.

Task-number: QTCREATORBUG-6907

Change-Id: I25c04185beb3729e2d11cc88d17fcd1a3b51037c
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
This commit is contained in:
Eike Ziller
2012-02-07 15:44:12 +01:00
parent 009797c063
commit 88d95250ef
7 changed files with 46 additions and 8 deletions

View File

@@ -311,7 +311,7 @@ void CppFindReferences::searchAgain()
Find::SearchResult *search = qobject_cast<Find::SearchResult *>(sender()); Find::SearchResult *search = qobject_cast<Find::SearchResult *>(sender());
CppFindReferencesParameters parameters = search->userData().value<CppFindReferencesParameters>(); CppFindReferencesParameters parameters = search->userData().value<CppFindReferencesParameters>();
Snapshot snapshot = CppModelManagerInterface::instance()->snapshot(); Snapshot snapshot = CppModelManagerInterface::instance()->snapshot();
search->reset(); search->restart();
if (!findSymbol(&parameters, snapshot)) { if (!findSymbol(&parameters, snapshot)) {
search->finishSearch(); search->finishSearch();
return; return;

View File

@@ -276,7 +276,7 @@ void SymbolsFindFilter::searchAgain()
{ {
Find::SearchResult *search = qobject_cast<Find::SearchResult *>(sender()); Find::SearchResult *search = qobject_cast<Find::SearchResult *>(sender());
QTC_ASSERT(search, return); QTC_ASSERT(search, return);
search->reset(); search->restart();
startSearch(search); startSearch(search);
} }

View File

@@ -457,7 +457,7 @@ void SearchResultWidget::goToPrevious()
} }
} }
void SearchResultWidget::reset() void SearchResultWidget::restart()
{ {
m_replaceTextEdit->setEnabled(false); m_replaceTextEdit->setEnabled(false);
m_replaceButton->setEnabled(false); m_replaceButton->setEnabled(false);
@@ -466,6 +466,7 @@ void SearchResultWidget::reset()
m_cancelButton->setVisible(true); m_cancelButton->setVisible(true);
m_searchAgainButton->setVisible(false); m_searchAgainButton->setVisible(false);
updateMatchesFoundLabel(); updateMatchesFoundLabel();
emit restarted();
} }
void SearchResultWidget::setSearchAgainSupported(bool supported) void SearchResultWidget::setSearchAgainSupported(bool supported)

View File

@@ -83,7 +83,7 @@ public:
void goToNext(); void goToNext();
void goToPrevious(); void goToPrevious();
void reset(); void restart();
void setSearchAgainSupported(bool supported); void setSearchAgainSupported(bool supported);
void setSearchAgainEnabled(bool enabled); void setSearchAgainEnabled(bool enabled);
@@ -96,6 +96,7 @@ signals:
void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems); void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems);
void searchAgainRequested(); void searchAgainRequested();
void cancelled(); void cancelled();
void restarted();
void visibilityChanged(bool visible); void visibilityChanged(bool visible);
void navigateStateChanged(); void navigateStateChanged();

View File

@@ -101,6 +101,7 @@ namespace Internal {
public slots: public slots:
void setCurrentIndex(int index); void setCurrentIndex(int index);
void moveWidgetToTop();
}; };
SearchResultWindowPrivate::SearchResultWindowPrivate(SearchResultWindow *window) SearchResultWindowPrivate::SearchResultWindowPrivate(SearchResultWindow *window)
@@ -135,6 +136,40 @@ namespace Internal {
} }
q->navigateStateChanged(); q->navigateStateChanged();
} }
void SearchResultWindowPrivate::moveWidgetToTop()
{
SearchResultWidget *widget = qobject_cast<SearchResultWidget *>(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; using namespace Find::Internal;
@@ -344,6 +379,7 @@ SearchResult *SearchResultWindow::startNewSearch(const QString &label,
d->m_searchResultWidgets.prepend(widget); d->m_searchResultWidgets.prepend(widget);
d->m_widget->insertWidget(1, widget); d->m_widget->insertWidget(1, widget);
connect(widget, SIGNAL(navigateStateChanged()), this, SLOT(navigateStateChanged())); connect(widget, SIGNAL(navigateStateChanged()), this, SLOT(navigateStateChanged()));
connect(widget, SIGNAL(restarted()), d, SLOT(moveWidgetToTop()));
widget->setTextEditorFont(d->m_font); widget->setTextEditorFont(d->m_font);
widget->setShowReplaceUI(searchOrSearchAndReplace != SearchOnly); widget->setShowReplaceUI(searchOrSearchAndReplace != SearchOnly);
widget->setAutoExpandResults(d->m_expandCollapseAction->isChecked()); widget->setAutoExpandResults(d->m_expandCollapseAction->isChecked());
@@ -651,9 +687,9 @@ void SearchResult::setTextToReplace(const QString &textToReplace)
/*! /*!
* \brief Removes all search results. * \brief Removes all search results.
*/ */
void SearchResult::reset() void SearchResult::restart()
{ {
m_widget->reset(); m_widget->restart();
} }
void SearchResult::setSearchAgainEnabled(bool enabled) void SearchResult::setSearchAgainEnabled(bool enabled)

View File

@@ -107,7 +107,7 @@ public slots:
void addResults(const QList<SearchResultItem> &items, AddMode mode); void addResults(const QList<SearchResultItem> &items, AddMode mode);
void finishSearch(); void finishSearch();
void setTextToReplace(const QString &textToReplace); void setTextToReplace(const QString &textToReplace);
void reset(); void restart();
void setSearchAgainEnabled(bool enabled); void setSearchAgainEnabled(bool enabled);
signals: signals:

View File

@@ -319,7 +319,7 @@ void BaseFileFind::hideHighlightAll(bool visible)
void BaseFileFind::searchAgain() void BaseFileFind::searchAgain()
{ {
SearchResult *search = qobject_cast<SearchResult *>(sender()); SearchResult *search = qobject_cast<SearchResult *>(sender());
search->reset(); search->restart();
runSearch(search); runSearch(search);
} }