forked from qt-creator/qt-creator
Implement "Search Again" for file/text searches
Task-number: QTCREATORBUG-621 Change-Id: I6fb7df3d943353497b73b9813684ae973b708913 Reviewed-by: Leandro Melo <leandro.melo@nokia.com>
This commit is contained in:
@@ -112,40 +112,54 @@ void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags,
|
||||
m_currentFindSupport = 0;
|
||||
if (m_filterCombo)
|
||||
updateComboEntries(m_filterCombo, true);
|
||||
QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>();
|
||||
watcher->setPendingResultsLimit(1);
|
||||
connect(watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int)));
|
||||
connect(watcher, SIGNAL(finished()), this, SLOT(searchFinished()));
|
||||
SearchResult *search = Find::SearchResultWindow::instance()->startNewSearch(label(),
|
||||
toolTip().arg(Find::IFindFilter::descriptionForFindFlags(findFlags)),
|
||||
txt, searchMode, QString::fromLatin1("TextEditor"));
|
||||
m_watchers.insert(watcher, search);
|
||||
search->setTextToReplace(txt);
|
||||
QVariantList searchParameters;
|
||||
searchParameters << qVariantFromValue(txt) << qVariantFromValue(findFlags);
|
||||
search->setUserData(searchParameters);
|
||||
search->setSearchAgainSupported(true);
|
||||
FileFindParameters parameters;
|
||||
parameters.text = txt;
|
||||
parameters.flags = findFlags;
|
||||
parameters.nameFilters = fileNameFilters();
|
||||
parameters.additionalParameters = additionalParameters();
|
||||
search->setUserData(qVariantFromValue(parameters));
|
||||
connect(search, SIGNAL(activated(Find::SearchResultItem)), this, SLOT(openEditor(Find::SearchResultItem)));
|
||||
if (searchMode == SearchResultWindow::SearchAndReplace) {
|
||||
connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)),
|
||||
this, SLOT(doReplace(QString,QList<Find::SearchResultItem>)));
|
||||
}
|
||||
connect(search, SIGNAL(visibilityChanged(bool)), this, SLOT(hideHighlightAll(bool)));
|
||||
connect(search, SIGNAL(cancelled()), this, SLOT(cancel()));
|
||||
connect(search, SIGNAL(searchAgainRequested()), this, SLOT(searchAgain()));
|
||||
runSearch(search);
|
||||
}
|
||||
|
||||
void BaseFileFind::runSearch(Find::SearchResult *search)
|
||||
{
|
||||
FileFindParameters parameters = search->userData().value<FileFindParameters>();
|
||||
CountingLabel *label = new CountingLabel;
|
||||
connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int)));
|
||||
Find::SearchResultWindow::instance()->popup(true);
|
||||
if (findFlags & Find::FindRegularExpression) {
|
||||
watcher->setFuture(Utils::findInFilesRegExp(txt, files(),
|
||||
textDocumentFlagsForFindFlags(findFlags), ITextEditor::openedTextEditorsContents()));
|
||||
QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>();
|
||||
m_watchers.insert(watcher, search);
|
||||
watcher->setPendingResultsLimit(1);
|
||||
connect(watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int)));
|
||||
connect(watcher, SIGNAL(finished()), this, SLOT(searchFinished()));
|
||||
if (parameters.flags & Find::FindRegularExpression) {
|
||||
watcher->setFuture(Utils::findInFilesRegExp(parameters.text,
|
||||
files(parameters.nameFilters, parameters.additionalParameters),
|
||||
textDocumentFlagsForFindFlags(parameters.flags),
|
||||
ITextEditor::openedTextEditorsContents()));
|
||||
} else {
|
||||
watcher->setFuture(Utils::findInFiles(txt, files(),
|
||||
textDocumentFlagsForFindFlags(findFlags), ITextEditor::openedTextEditorsContents()));
|
||||
watcher->setFuture(Utils::findInFiles(parameters.text,
|
||||
files(parameters.nameFilters, parameters.additionalParameters),
|
||||
textDocumentFlagsForFindFlags(parameters.flags),
|
||||
ITextEditor::openedTextEditorsContents()));
|
||||
}
|
||||
connect(search, SIGNAL(cancelled()), this, SLOT(cancel()));
|
||||
Core::FutureProgress *progress =
|
||||
Core::ICore::instance()->progressManager()->addTask(watcher->future(),
|
||||
tr("Search"),
|
||||
Constants::TASK_SEARCH);
|
||||
|
||||
progress->setWidget(label);
|
||||
connect(progress, SIGNAL(clicked()), Find::SearchResultWindow::instance(), SLOT(popup()));
|
||||
}
|
||||
@@ -302,10 +316,9 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
|
||||
// highlight results
|
||||
if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) {
|
||||
if (result) {
|
||||
QVariantList userData = result->userData().value<QVariantList>();
|
||||
QTC_ASSERT(userData.size() != 0, return);
|
||||
FileFindParameters parameters = result->userData().value<FileFindParameters>();
|
||||
m_currentFindSupport = findSupport;
|
||||
m_currentFindSupport->highlightAll(userData.at(0).toString(), userData.at(1).value<FindFlags>());
|
||||
m_currentFindSupport->highlightAll(parameters.text, parameters.flags);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -316,6 +329,13 @@ void BaseFileFind::hideHighlightAll(bool visible)
|
||||
m_currentFindSupport->clearResults();
|
||||
}
|
||||
|
||||
void BaseFileFind::searchAgain()
|
||||
{
|
||||
SearchResult *search = qobject_cast<SearchResult *>(sender());
|
||||
search->reset();
|
||||
runSearch(search);
|
||||
}
|
||||
|
||||
QStringList BaseFileFind::replaceAll(const QString &text,
|
||||
const QList<Find::SearchResultItem> &items)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user