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:
Eike Ziller
2011-12-13 10:50:57 +01:00
parent e1c388f1d2
commit 2538f8001c
15 changed files with 186 additions and 41 deletions

View File

@@ -211,7 +211,8 @@ using namespace Find::Internal;
SearchResultWidget::SearchResultWidget(QWidget *parent) : SearchResultWidget::SearchResultWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
m_count(0), m_count(0),
m_isShowingReplaceUI(false) m_isShowingReplaceUI(false),
m_searchAgainSupported(false)
{ {
QVBoxLayout *layout = new QVBoxLayout(this); QVBoxLayout *layout = new QVBoxLayout(this);
layout->setMargin(0); layout->setMargin(0);
@@ -259,21 +260,30 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) :
m_cancelButton->setText(tr("Cancel")); m_cancelButton->setText(tr("Cancel"));
m_cancelButton->setToolButtonStyle(Qt::ToolButtonTextOnly); m_cancelButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
m_searchAgainButton = new QToolButton(topWidget);
m_searchAgainButton->setToolTip(tr("Repeat the search with same parameters"));
m_searchAgainButton->setText(tr("Search again"));
m_searchAgainButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
m_searchAgainButton->setVisible(false);
connect(m_searchAgainButton, SIGNAL(clicked()), this, SLOT(searchAgain()));
m_replaceLabel = new QLabel(tr("Replace with:"), topWidget); m_replaceLabel = new QLabel(tr("Replace with:"), topWidget);
m_replaceTextEdit = new WideEnoughLineEdit(topWidget); m_replaceTextEdit = new WideEnoughLineEdit(topWidget);
m_replaceTextEdit->setMinimumWidth(120); m_replaceTextEdit->setMinimumWidth(120);
m_replaceTextEdit->setEnabled(false);
m_replaceTextEdit->setTabOrder(m_replaceTextEdit, m_searchResultTreeView);
m_replaceButton = new QToolButton(topWidget); m_replaceButton = new QToolButton(topWidget);
m_replaceButton->setToolTip(tr("Replace all occurrences")); m_replaceButton->setToolTip(tr("Replace all occurrences"));
m_replaceButton->setText(tr("Replace")); m_replaceButton->setText(tr("Replace"));
m_replaceButton->setToolButtonStyle(Qt::ToolButtonTextOnly); m_replaceButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
m_replaceTextEdit->setTabOrder(m_replaceTextEdit, m_searchResultTreeView); m_replaceButton->setEnabled(false);
m_matchesFoundLabel = new QLabel(topWidget); m_matchesFoundLabel = new QLabel(topWidget);
updateMatchesFoundLabel(); updateMatchesFoundLabel();
topLayout->addWidget(m_descriptionContainer); topLayout->addWidget(m_descriptionContainer);
topLayout->addWidget(m_cancelButton); topLayout->addWidget(m_cancelButton);
topLayout->addWidget(m_searchAgainButton);
topLayout->addWidget(m_replaceLabel); topLayout->addWidget(m_replaceLabel);
topLayout->addWidget(m_replaceTextEdit); topLayout->addWidget(m_replaceTextEdit);
topLayout->addWidget(m_replaceButton); topLayout->addWidget(m_replaceButton);
@@ -447,11 +457,29 @@ void SearchResultWidget::goToPrevious()
} }
} }
void SearchResultWidget::reset()
{
m_replaceTextEdit->setEnabled(false);
m_replaceButton->setEnabled(false);
m_searchResultTreeView->clear();
m_count = 0;
m_cancelButton->setVisible(true);
m_searchAgainButton->setVisible(false);
updateMatchesFoundLabel();
}
void SearchResultWidget::setSearchAgainSupported(bool supported)
{
m_searchAgainSupported = supported;
m_searchAgainButton->setVisible(supported && !m_cancelButton->isVisible());
}
void SearchResultWidget::finishSearch() void SearchResultWidget::finishSearch()
{ {
m_replaceTextEdit->setEnabled(m_count > 0); m_replaceTextEdit->setEnabled(m_count > 0);
m_replaceButton->setEnabled(m_count > 0); m_replaceButton->setEnabled(m_count > 0);
m_cancelButton->setVisible(false); m_cancelButton->setVisible(false);
m_searchAgainButton->setVisible(m_searchAgainSupported);
} }
void SearchResultWidget::hideNoUndoWarning() void SearchResultWidget::hideNoUndoWarning()
@@ -481,6 +509,11 @@ void SearchResultWidget::cancel()
emit cancelled(); emit cancelled();
} }
void SearchResultWidget::searchAgain()
{
emit searchAgainRequested();
}
bool SearchResultWidget::showWarningMessage() const bool SearchResultWidget::showWarningMessage() const
{ {
if (m_dontAskAgainGroup.isEmpty()) if (m_dontAskAgainGroup.isEmpty())

View File

@@ -83,12 +83,17 @@ public:
void goToNext(); void goToNext();
void goToPrevious(); void goToPrevious();
void reset();
void setSearchAgainSupported(bool supported);
public slots: public slots:
void finishSearch(); void finishSearch();
signals: signals:
void activated(const Find::SearchResultItem &item); void activated(const Find::SearchResultItem &item);
void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems); void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems);
void searchAgainRequested();
void cancelled(); void cancelled();
void visibilityChanged(bool visible); void visibilityChanged(bool visible);
@@ -99,6 +104,7 @@ private slots:
void handleJumpToSearchResult(const SearchResultItem &item); void handleJumpToSearchResult(const SearchResultItem &item);
void handleReplaceButton(); void handleReplaceButton();
void cancel(); void cancel();
void searchAgain();
private: private:
bool showWarningMessage() const; bool showWarningMessage() const;
@@ -115,6 +121,8 @@ private:
QLabel *m_replaceLabel; QLabel *m_replaceLabel;
QLineEdit *m_replaceTextEdit; QLineEdit *m_replaceTextEdit;
QToolButton *m_replaceButton; QToolButton *m_replaceButton;
QToolButton *m_searchAgainButton;
bool m_searchAgainSupported;
QWidget *m_descriptionContainer; QWidget *m_descriptionContainer;
QLabel *m_label; QLabel *m_label;
QLabel *m_searchTerm; QLabel *m_searchTerm;

View File

@@ -549,6 +549,8 @@ SearchResult::SearchResult(SearchResultWidget *widget)
this, SIGNAL(cancelled())); this, SIGNAL(cancelled()));
connect(widget, SIGNAL(visibilityChanged(bool)), connect(widget, SIGNAL(visibilityChanged(bool)),
this, SIGNAL(visibilityChanged(bool))); this, SIGNAL(visibilityChanged(bool)));
connect(widget, SIGNAL(searchAgainRequested()),
this, SIGNAL(searchAgainRequested()));
} }
/*! /*!
@@ -587,6 +589,11 @@ int SearchResult::count() const
return m_widget->count(); return m_widget->count();
} }
void SearchResult::setSearchAgainSupported(bool supported)
{
m_widget->setSearchAgainSupported(supported);
}
/*! /*!
\fn void SearchResult::addResult(const QString &fileName, int lineNumber, const QString &rowText, int searchTermStart, int searchTermLength, const QVariant &userData) \fn void SearchResult::addResult(const QString &fileName, int lineNumber, const QString &rowText, int searchTermStart, int searchTermLength, const QVariant &userData)
\brief Adds a single result line to the search results. \brief Adds a single result line to the search results.
@@ -640,6 +647,14 @@ void SearchResult::setTextToReplace(const QString &textToReplace)
m_widget->setTextToReplace(textToReplace); m_widget->setTextToReplace(textToReplace);
} }
/*!
* \brief Removes all search results.
*/
void SearchResult::reset()
{
m_widget->reset();
}
} // namespace Find } // namespace Find
#include "searchresultwindow.moc" #include "searchresultwindow.moc"

View File

@@ -99,6 +99,7 @@ public:
QVariant userData() const; QVariant userData() const;
QString textToReplace() const; QString textToReplace() const;
int count() const; int count() const;
void setSearchAgainSupported(bool supported);
public slots: public slots:
void addResult(const QString &fileName, int lineNumber, const QString &lineText, void addResult(const QString &fileName, int lineNumber, const QString &lineText,
@@ -106,6 +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();
signals: signals:
void activated(const Find::SearchResultItem &item); void activated(const Find::SearchResultItem &item);
@@ -113,6 +115,7 @@ signals:
void cancelled(); void cancelled();
void visibilityChanged(bool visible); void visibilityChanged(bool visible);
void countChanged(int count); void countChanged(int count);
void searchAgainRequested();
private: private:
SearchResult(Internal::SearchResultWidget *widget); SearchResult(Internal::SearchResultWidget *widget);

View File

@@ -77,22 +77,24 @@ bool AllProjectsFind::isEnabled() const
&& m_plugin->session()->projects().count() > 0; && m_plugin->session()->projects().count() > 0;
} }
QList<Project *> AllProjectsFind::projects() const Utils::FileIterator *AllProjectsFind::files(const QStringList &nameFilters,
const QVariant &additionalParameters) const
{ {
Q_ASSERT(m_plugin->session()); Q_UNUSED(additionalParameters)
return m_plugin->session()->projects(); QTC_ASSERT(m_plugin->session(), return new Utils::FileIterator());
return filesForProjects(nameFilters, m_plugin->session()->projects());
} }
Utils::FileIterator *AllProjectsFind::files() const Utils::FileIterator *AllProjectsFind::filesForProjects(const QStringList &nameFilters,
const QList<Project *> &projects) const
{ {
QList<QRegExp> filterRegs; QList<QRegExp> filterRegs;
QStringList nameFilters = fileNameFilters();
foreach (const QString &filter, nameFilters) { foreach (const QString &filter, nameFilters) {
filterRegs << QRegExp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); filterRegs << QRegExp(filter, Qt::CaseInsensitive, QRegExp::Wildcard);
} }
QMap<QString, QTextCodec *> openEditorEncodings = TextEditor::ITextEditor::openedTextEditorsEncodings(); QMap<QString, QTextCodec *> openEditorEncodings = TextEditor::ITextEditor::openedTextEditorsEncodings();
QMap<QString, QTextCodec *> encodings; QMap<QString, QTextCodec *> encodings;
foreach (const Project *project, projects()) { foreach (const Project *project, projects) {
QStringList projectFiles = project->files(Project::AllFiles); QStringList projectFiles = project->files(Project::AllFiles);
QStringList filteredFiles; QStringList filteredFiles;
if (!filterRegs.isEmpty()) { if (!filterRegs.isEmpty()) {
@@ -117,6 +119,11 @@ Utils::FileIterator *AllProjectsFind::files() const
return new Utils::FileIterator(encodings.keys(), encodings.values()); return new Utils::FileIterator(encodings.keys(), encodings.values());
} }
QVariant AllProjectsFind::additionalParameters() const
{
return QVariant();
}
QString AllProjectsFind::label() const QString AllProjectsFind::label() const
{ {
return tr("All Projects:"); return tr("All Projects:");

View File

@@ -61,8 +61,12 @@ public:
void readSettings(QSettings *settings); void readSettings(QSettings *settings);
protected: protected:
virtual QList<Project *> projects() const; Utils::FileIterator *files(const QStringList &nameFilters,
Utils::FileIterator *files() const; const QVariant &additionalParameters) const;
Utils::FileIterator *filesForProjects(const QStringList &nameFilters,
const QList<Project *> &projects) const;
QVariant additionalParameters() const;
QString label() const; QString label() const;
QString toolTip() const; QString toolTip() const;

View File

@@ -34,7 +34,9 @@
#include "projectexplorer.h" #include "projectexplorer.h"
#include "project.h" #include "project.h"
#include "session.h"
#include <coreplugin/ifile.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <QtCore/QDebug> #include <QtCore/QDebug>
@@ -70,14 +72,31 @@ bool CurrentProjectFind::isEnabled() const
return m_plugin->currentProject() != 0 && BaseFileFind::isEnabled(); return m_plugin->currentProject() != 0 && BaseFileFind::isEnabled();
} }
QList<Project *> CurrentProjectFind::projects() const QVariant CurrentProjectFind::additionalParameters() const
{ {
return QList<Project *>() << m_plugin->currentProject(); if (m_plugin->currentProject() && m_plugin->currentProject()->file())
return qVariantFromValue(m_plugin->currentProject()->file()->fileName());
return QVariant();
}
Utils::FileIterator *CurrentProjectFind::files(const QStringList &nameFilters,
const QVariant &additionalParameters) const
{
QTC_ASSERT(m_plugin->session(), return new Utils::FileIterator());
QTC_ASSERT(additionalParameters.isValid(), return new Utils::FileIterator());
QList<Project *> allProjects = m_plugin->session()->projects();
QString projectFile = additionalParameters.toString();
foreach (Project *project, allProjects) {
if (project->file() && projectFile == project->file()->fileName())
return filesForProjects(nameFilters, QList<Project *>() << project);
}
return new Utils::FileIterator();
} }
QString CurrentProjectFind::label() const QString CurrentProjectFind::label() const
{ {
return tr("Project '%1':").arg(projects().first()->displayName()); QTC_ASSERT(m_plugin->currentProject(), return QString());
return tr("Project '%1':").arg(m_plugin->currentProject()->displayName());
} }
void CurrentProjectFind::writeSettings(QSettings *settings) void CurrentProjectFind::writeSettings(QSettings *settings)

View File

@@ -62,7 +62,9 @@ public:
void readSettings(QSettings *settings); void readSettings(QSettings *settings);
protected: protected:
QList<Project *> projects() const; Utils::FileIterator *files(const QStringList &nameFilters,
const QVariant &additionalParameters) const;
QVariant additionalParameters() const;
QString label() const; QString label() const;
private: private:

View File

@@ -112,40 +112,54 @@ void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags,
m_currentFindSupport = 0; m_currentFindSupport = 0;
if (m_filterCombo) if (m_filterCombo)
updateComboEntries(m_filterCombo, true); 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(), SearchResult *search = Find::SearchResultWindow::instance()->startNewSearch(label(),
toolTip().arg(Find::IFindFilter::descriptionForFindFlags(findFlags)), toolTip().arg(Find::IFindFilter::descriptionForFindFlags(findFlags)),
txt, searchMode, QString::fromLatin1("TextEditor")); txt, searchMode, QString::fromLatin1("TextEditor"));
m_watchers.insert(watcher, search);
search->setTextToReplace(txt); search->setTextToReplace(txt);
QVariantList searchParameters; search->setSearchAgainSupported(true);
searchParameters << qVariantFromValue(txt) << qVariantFromValue(findFlags); FileFindParameters parameters;
search->setUserData(searchParameters); 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))); connect(search, SIGNAL(activated(Find::SearchResultItem)), this, SLOT(openEditor(Find::SearchResultItem)));
if (searchMode == SearchResultWindow::SearchAndReplace) { if (searchMode == SearchResultWindow::SearchAndReplace) {
connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)), connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)),
this, SLOT(doReplace(QString,QList<Find::SearchResultItem>))); this, SLOT(doReplace(QString,QList<Find::SearchResultItem>)));
} }
connect(search, SIGNAL(visibilityChanged(bool)), this, SLOT(hideHighlightAll(bool))); 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; CountingLabel *label = new CountingLabel;
connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int))); connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int)));
Find::SearchResultWindow::instance()->popup(true); Find::SearchResultWindow::instance()->popup(true);
if (findFlags & Find::FindRegularExpression) { QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>();
watcher->setFuture(Utils::findInFilesRegExp(txt, files(), m_watchers.insert(watcher, search);
textDocumentFlagsForFindFlags(findFlags), ITextEditor::openedTextEditorsContents())); 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 { } else {
watcher->setFuture(Utils::findInFiles(txt, files(), watcher->setFuture(Utils::findInFiles(parameters.text,
textDocumentFlagsForFindFlags(findFlags), ITextEditor::openedTextEditorsContents())); files(parameters.nameFilters, parameters.additionalParameters),
textDocumentFlagsForFindFlags(parameters.flags),
ITextEditor::openedTextEditorsContents()));
} }
connect(search, SIGNAL(cancelled()), this, SLOT(cancel()));
Core::FutureProgress *progress = Core::FutureProgress *progress =
Core::ICore::instance()->progressManager()->addTask(watcher->future(), Core::ICore::instance()->progressManager()->addTask(watcher->future(),
tr("Search"), tr("Search"),
Constants::TASK_SEARCH); Constants::TASK_SEARCH);
progress->setWidget(label); progress->setWidget(label);
connect(progress, SIGNAL(clicked()), Find::SearchResultWindow::instance(), SLOT(popup())); connect(progress, SIGNAL(clicked()), Find::SearchResultWindow::instance(), SLOT(popup()));
} }
@@ -302,10 +316,9 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
// highlight results // highlight results
if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) { if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) {
if (result) { if (result) {
QVariantList userData = result->userData().value<QVariantList>(); FileFindParameters parameters = result->userData().value<FileFindParameters>();
QTC_ASSERT(userData.size() != 0, return);
m_currentFindSupport = findSupport; 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(); m_currentFindSupport->clearResults();
} }
void BaseFileFind::searchAgain()
{
SearchResult *search = qobject_cast<SearchResult *>(sender());
search->reset();
runSearch(search);
}
QStringList BaseFileFind::replaceAll(const QString &text, QStringList BaseFileFind::replaceAll(const QString &text,
const QList<Find::SearchResultItem> &items) const QList<Find::SearchResultItem> &items)
{ {

View File

@@ -77,7 +77,9 @@ public:
const QList<Find::SearchResultItem> &items); const QList<Find::SearchResultItem> &items);
protected: protected:
virtual Utils::FileIterator *files() const = 0; virtual Utils::FileIterator *files(const QStringList &nameFilters,
const QVariant &additionalParameters) const = 0;
virtual QVariant additionalParameters() const = 0;
virtual QString label() const = 0; // see Find::SearchResultWindow::startNewSearch virtual QString label() const = 0; // see Find::SearchResultWindow::startNewSearch
virtual QString toolTip() const = 0; // see Find::SearchResultWindow::startNewSearch, virtual QString toolTip() const = 0; // see Find::SearchResultWindow::startNewSearch,
// add %1 placeholder where the find flags should be put // add %1 placeholder where the find flags should be put
@@ -97,10 +99,12 @@ private slots:
void doReplace(const QString &txt, void doReplace(const QString &txt,
const QList<Find::SearchResultItem> &items); const QList<Find::SearchResultItem> &items);
void hideHighlightAll(bool visible); void hideHighlightAll(bool visible);
void searchAgain();
private: private:
void runNewSearch(const QString &txt, Find::FindFlags findFlags, void runNewSearch(const QString &txt, Find::FindFlags findFlags,
Find::SearchResultWindow::SearchMode searchMode); Find::SearchResultWindow::SearchMode searchMode);
void runSearch(Find::SearchResult *search);
QFutureWatcher<Utils::FileSearchResultList> *watcherForSearch(Find::SearchResult *search); QFutureWatcher<Utils::FileSearchResultList> *watcherForSearch(Find::SearchResult *search);
QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers; QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers;

View File

@@ -33,6 +33,9 @@
#ifndef BASEFILEFIND_P_H #ifndef BASEFILEFIND_P_H
#define BASEFILEFIND_P_H #define BASEFILEFIND_P_H
#include <find/ifindfilter.h>
#include <QtCore/QVariant>
#include <QtGui/QLabel> #include <QtGui/QLabel>
namespace TextEditor { namespace TextEditor {
@@ -48,7 +51,18 @@ public slots:
void updateCount(int count); void updateCount(int count);
}; };
class FileFindParameters
{
public:
QString text;
Find::FindFlags flags;
QStringList nameFilters;
QVariant additionalParameters;
};
} // namespace Internal } // namespace Internal
} // namespace TextEditor } // namespace TextEditor
Q_DECLARE_METATYPE(TextEditor::Internal::FileFindParameters)
#endif // BASEFILEFIND_P_H #endif // BASEFILEFIND_P_H

View File

@@ -66,10 +66,11 @@ QString FindInCurrentFile::displayName() const
return tr("Current File"); return tr("Current File");
} }
Utils::FileIterator *FindInCurrentFile::files() const Utils::FileIterator *FindInCurrentFile::files(const QStringList &nameFilters,
const QVariant &additionalParameters) const
{ {
Q_ASSERT(isEnabled()); Q_UNUSED(nameFilters)
QString fileName = m_currentFile->fileName(); QString fileName = additionalParameters.toString();
QMap<QString, QTextCodec *> openEditorEncodings = ITextEditor::openedTextEditorsEncodings(); QMap<QString, QTextCodec *> openEditorEncodings = ITextEditor::openedTextEditorsEncodings();
QTextCodec *codec = openEditorEncodings.value(fileName); QTextCodec *codec = openEditorEncodings.value(fileName);
if (!codec) if (!codec)
@@ -77,6 +78,11 @@ Utils::FileIterator *FindInCurrentFile::files() const
return new Utils::FileIterator(QStringList() << fileName, QList<QTextCodec *>() << codec); return new Utils::FileIterator(QStringList() << fileName, QList<QTextCodec *>() << codec);
} }
QVariant FindInCurrentFile::additionalParameters() const
{
return qVariantFromValue(m_currentFile->fileName());
}
QString FindInCurrentFile::label() const QString FindInCurrentFile::label() const
{ {
return tr("File '%1':").arg(QFileInfo(m_currentFile->fileName()).fileName()); return tr("File '%1':").arg(QFileInfo(m_currentFile->fileName()).fileName());

View File

@@ -63,7 +63,9 @@ public:
void readSettings(QSettings *settings); void readSettings(QSettings *settings);
protected: protected:
Utils::FileIterator *files() const; Utils::FileIterator *files(const QStringList &nameFilters,
const QVariant &additionalParameters) const;
QVariant additionalParameters() const;
QString label() const; QString label() const;
QString toolTip() const; QString toolTip() const;

View File

@@ -68,13 +68,19 @@ void FindInFiles::findAll(const QString &txt, Find::FindFlags findFlags)
BaseFileFind::findAll(txt, findFlags); BaseFileFind::findAll(txt, findFlags);
} }
Utils::FileIterator *FindInFiles::files() const Utils::FileIterator *FindInFiles::files(const QStringList &nameFilters,
const QVariant &additionalParameters) const
{ {
return new Utils::SubDirFileIterator(QStringList() << QDir::fromNativeSeparators(m_directory->currentText()), return new Utils::SubDirFileIterator(QStringList() << additionalParameters.toString(),
fileNameFilters(), nameFilters,
Core::EditorManager::instance()->defaultTextCodec()); Core::EditorManager::instance()->defaultTextCodec());
} }
QVariant FindInFiles::additionalParameters() const
{
return qVariantFromValue(QDir::fromNativeSeparators(m_directory->currentText()));
}
QString FindInFiles::label() const QString FindInFiles::label() const
{ {
const QStringList &nonEmptyComponents = QDir::cleanPath( const QStringList &nonEmptyComponents = QDir::cleanPath(

View File

@@ -62,7 +62,9 @@ public:
void setDirectory(const QString &directory); void setDirectory(const QString &directory);
protected: protected:
Utils::FileIterator *files() const; Utils::FileIterator *files(const QStringList &nameFilters,
const QVariant &additionalParameters) const;
QVariant additionalParameters() const;
QString label() const; QString label() const;
QString toolTip() const; QString toolTip() const;