Introduce private class for BaseFileFind.

Remove circular dependency between ITextEditor and ITextMark.

Change-Id: I2ab17a46e08ef7dd2d112320c8ab6f5d5bd91952
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
This commit is contained in:
Friedemann Kleint
2013-03-26 12:32:52 +01:00
parent c42fa2802c
commit 5765bc90a0
8 changed files with 82 additions and 58 deletions

View File

@@ -35,6 +35,7 @@
#include "editorconfiguration.h" #include "editorconfiguration.h"
#include <texteditor/itexteditor.h> #include <texteditor/itexteditor.h>
#include <utils/filesearch.h>
#include <QSettings> #include <QSettings>
#include <QRegExp> #include <QRegExp>

View File

@@ -35,6 +35,7 @@
#include <coreplugin/idocument.h> #include <coreplugin/idocument.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/filesearch.h>
#include <QDebug> #include <QDebug>
#include <QSettings> #include <QSettings>

View File

@@ -44,33 +44,55 @@
#include <utils/stylehelper.h> #include <utils/stylehelper.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/filesearch.h>
#include <QDebug> #include <QDebug>
#include <QDirIterator> #include <QDirIterator>
#include <QSettings> #include <QSettings>
#include <QHash> #include <QHash>
#include <QPair> #include <QPair>
#include <QStringListModel>
#include <QFutureWatcher>
#include <QPointer>
#include <QFileDialog> #include <QFileDialog>
#include <QCheckBox> #include <QCheckBox>
#include <QComboBox> #include <QComboBox>
#include <QLabel>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QPushButton> #include <QPushButton>
#include <QTextBlock> #include <QTextBlock>
namespace TextEditor {
namespace Internal {
class BaseFileFindPrivate {
public:
BaseFileFindPrivate() : m_resultLabel(0), m_filterCombo(0) {}
QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers;
QPointer<Find::IFindSupport> m_currentFindSupport;
QLabel *m_resultLabel;
QStringListModel m_filterStrings;
QString m_filterSetting;
QPointer<QComboBox> m_filterCombo;
};
} // namespace Internal
} // namespace TextEditor
using namespace Utils; using namespace Utils;
using namespace Find; using namespace Find;
using namespace TextEditor; using namespace TextEditor;
using namespace TextEditor::Internal; using namespace TextEditor::Internal;
BaseFileFind::BaseFileFind()
: m_resultLabel(0), BaseFileFind::BaseFileFind() : d(new BaseFileFindPrivate)
m_filterCombo(0)
{ {
} }
BaseFileFind::~BaseFileFind() BaseFileFind::~BaseFileFind()
{ {
delete d;
} }
bool BaseFileFind::isEnabled() const bool BaseFileFind::isEnabled() const
@@ -82,7 +104,7 @@ void BaseFileFind::cancel()
{ {
SearchResult *search = qobject_cast<SearchResult *>(sender()); SearchResult *search = qobject_cast<SearchResult *>(sender());
QTC_ASSERT(search, return); QTC_ASSERT(search, return);
QFutureWatcher<FileSearchResultList> *watcher = m_watchers.key(search); QFutureWatcher<FileSearchResultList> *watcher = d->m_watchers.key(search);
QTC_ASSERT(watcher, return); QTC_ASSERT(watcher, return);
watcher->cancel(); watcher->cancel();
} }
@@ -91,7 +113,7 @@ void BaseFileFind::setPaused(bool paused)
{ {
SearchResult *search = qobject_cast<SearchResult *>(sender()); SearchResult *search = qobject_cast<SearchResult *>(sender());
QTC_ASSERT(search, return); QTC_ASSERT(search, return);
QFutureWatcher<FileSearchResultList> *watcher = m_watchers.key(search); QFutureWatcher<FileSearchResultList> *watcher = d->m_watchers.key(search);
QTC_ASSERT(watcher, return); QTC_ASSERT(watcher, return);
if (!paused || watcher->isRunning()) // guard against pausing when the search is finished if (!paused || watcher->isRunning()) // guard against pausing when the search is finished
watcher->setPaused(paused); watcher->setPaused(paused);
@@ -100,8 +122,8 @@ void BaseFileFind::setPaused(bool paused)
QStringList BaseFileFind::fileNameFilters() const QStringList BaseFileFind::fileNameFilters() const
{ {
QStringList filters; QStringList filters;
if (m_filterCombo && !m_filterCombo->currentText().isEmpty()) { if (d->m_filterCombo && !d->m_filterCombo->currentText().isEmpty()) {
const QStringList parts = m_filterCombo->currentText().split(QLatin1Char(',')); const QStringList parts = d->m_filterCombo->currentText().split(QLatin1Char(','));
foreach (const QString &part, parts) { foreach (const QString &part, parts) {
const QString filter = part.trimmed(); const QString filter = part.trimmed();
if (!filter.isEmpty()) if (!filter.isEmpty())
@@ -114,9 +136,9 @@ QStringList BaseFileFind::fileNameFilters() const
void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags, void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags,
SearchResultWindow::SearchMode searchMode) SearchResultWindow::SearchMode searchMode)
{ {
m_currentFindSupport = 0; d->m_currentFindSupport = 0;
if (m_filterCombo) if (d->m_filterCombo)
updateComboEntries(m_filterCombo, true); updateComboEntries(d->m_filterCombo, true);
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"));
@@ -150,7 +172,7 @@ void BaseFileFind::runSearch(Find::SearchResult *search)
connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int))); connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int)));
Find::SearchResultWindow::instance()->popup(Core::IOutputPane::Flags(Core::IOutputPane::ModeSwitch | Core::IOutputPane::WithFocus)); Find::SearchResultWindow::instance()->popup(Core::IOutputPane::Flags(Core::IOutputPane::ModeSwitch | Core::IOutputPane::WithFocus));
QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>(); QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>();
m_watchers.insert(watcher, search); d->m_watchers.insert(watcher, search);
watcher->setPendingResultsLimit(1); watcher->setPendingResultsLimit(1);
connect(watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int))); connect(watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int)));
connect(watcher, SIGNAL(finished()), this, SLOT(searchFinished())); connect(watcher, SIGNAL(finished()), this, SLOT(searchFinished()));
@@ -197,7 +219,7 @@ void BaseFileFind::doReplace(const QString &text,
void BaseFileFind::displayResult(int index) { void BaseFileFind::displayResult(int index) {
QFutureWatcher<FileSearchResultList> *watcher = QFutureWatcher<FileSearchResultList> *watcher =
static_cast<QFutureWatcher<FileSearchResultList> *>(sender()); static_cast<QFutureWatcher<FileSearchResultList> *>(sender());
SearchResult *search = m_watchers.value(watcher); SearchResult *search = d->m_watchers.value(watcher);
if (!search) { if (!search) {
// search was removed from search history while the search is running // search was removed from search history while the search is running
watcher->cancel(); watcher->cancel();
@@ -223,47 +245,47 @@ void BaseFileFind::searchFinished()
{ {
QFutureWatcher<FileSearchResultList> *watcher = QFutureWatcher<FileSearchResultList> *watcher =
static_cast<QFutureWatcher<FileSearchResultList> *>(sender()); static_cast<QFutureWatcher<FileSearchResultList> *>(sender());
SearchResult *search = m_watchers.value(watcher); SearchResult *search = d->m_watchers.value(watcher);
if (search) if (search)
search->finishSearch(watcher->isCanceled()); search->finishSearch(watcher->isCanceled());
m_watchers.remove(watcher); d->m_watchers.remove(watcher);
watcher->deleteLater(); watcher->deleteLater();
} }
QWidget *BaseFileFind::createPatternWidget() QWidget *BaseFileFind::createPatternWidget()
{ {
QString filterToolTip = tr("List of comma separated wildcard filters"); QString filterToolTip = tr("List of comma separated wildcard filters");
m_filterCombo = new QComboBox; d->m_filterCombo = new QComboBox;
m_filterCombo->setEditable(true); d->m_filterCombo->setEditable(true);
m_filterCombo->setModel(&m_filterStrings); d->m_filterCombo->setModel(&d->m_filterStrings);
m_filterCombo->setMaxCount(10); d->m_filterCombo->setMaxCount(10);
m_filterCombo->setMinimumContentsLength(10); d->m_filterCombo->setMinimumContentsLength(10);
m_filterCombo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon); d->m_filterCombo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
m_filterCombo->setInsertPolicy(QComboBox::InsertAtBottom); d->m_filterCombo->setInsertPolicy(QComboBox::InsertAtBottom);
m_filterCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); d->m_filterCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_filterCombo->setToolTip(filterToolTip); d->m_filterCombo->setToolTip(filterToolTip);
syncComboWithSettings(m_filterCombo, m_filterSetting); syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
return m_filterCombo; return d->m_filterCombo;
} }
void BaseFileFind::writeCommonSettings(QSettings *settings) void BaseFileFind::writeCommonSettings(QSettings *settings)
{ {
settings->setValue(QLatin1String("filters"), m_filterStrings.stringList()); settings->setValue(QLatin1String("filters"), d->m_filterStrings.stringList());
if (m_filterCombo) if (d->m_filterCombo)
settings->setValue(QLatin1String("currentFilter"), m_filterCombo->currentText()); settings->setValue(QLatin1String("currentFilter"), d->m_filterCombo->currentText());
} }
void BaseFileFind::readCommonSettings(QSettings *settings, const QString &defaultFilter) void BaseFileFind::readCommonSettings(QSettings *settings, const QString &defaultFilter)
{ {
QStringList filters = settings->value(QLatin1String("filters")).toStringList(); QStringList filters = settings->value(QLatin1String("filters")).toStringList();
m_filterSetting = settings->value(QLatin1String("currentFilter")).toString(); d->m_filterSetting = settings->value(QLatin1String("currentFilter")).toString();
if (filters.isEmpty()) if (filters.isEmpty())
filters << defaultFilter; filters << defaultFilter;
if (m_filterSetting.isEmpty()) if (d->m_filterSetting.isEmpty())
m_filterSetting = filters.first(); d->m_filterSetting = filters.first();
m_filterStrings.setStringList(filters); d->m_filterStrings.setStringList(filters);
if (m_filterCombo) if (d->m_filterCombo)
syncComboWithSettings(m_filterCombo, m_filterSetting); syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
} }
void BaseFileFind::syncComboWithSettings(QComboBox *combo, const QString &setting) void BaseFileFind::syncComboWithSettings(QComboBox *combo, const QString &setting)
@@ -303,25 +325,25 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
openedEditor = Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text), openedEditor = Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text),
Core::Id(), Core::EditorManager::ModeSwitch); Core::Id(), Core::EditorManager::ModeSwitch);
} }
if (m_currentFindSupport) if (d->m_currentFindSupport)
m_currentFindSupport->clearResults(); d->m_currentFindSupport->clearResults();
m_currentFindSupport = 0; d->m_currentFindSupport = 0;
if (!openedEditor) if (!openedEditor)
return; return;
// highlight results // highlight results
if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) { if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) {
if (result) { if (result) {
FileFindParameters parameters = result->userData().value<FileFindParameters>(); FileFindParameters parameters = result->userData().value<FileFindParameters>();
m_currentFindSupport = findSupport; d->m_currentFindSupport = findSupport;
m_currentFindSupport->highlightAll(parameters.text, parameters.flags); d->m_currentFindSupport->highlightAll(parameters.text, parameters.flags);
} }
} }
} }
void BaseFileFind::hideHighlightAll(bool visible) void BaseFileFind::hideHighlightAll(bool visible)
{ {
if (!visible && m_currentFindSupport) if (!visible && d->m_currentFindSupport)
m_currentFindSupport->clearResults(); d->m_currentFindSupport->clearResults();
} }
void BaseFileFind::searchAgain() void BaseFileFind::searchAgain()

View File

@@ -34,12 +34,6 @@
#include <find/ifindfilter.h> #include <find/ifindfilter.h>
#include <find/searchresultwindow.h> #include <find/searchresultwindow.h>
#include <utils/filesearch.h>
#include <QStringListModel>
#include <QFutureWatcher>
#include <QPointer>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QLabel; class QLabel;
@@ -50,11 +44,15 @@ namespace Utils {
class FileIterator; class FileIterator;
} }
namespace Find { namespace Find {
class SearchResult;
struct SearchResultItem; struct SearchResultItem;
class IFindSupport; class IFindSupport;
} }
namespace TextEditor { namespace TextEditor {
namespace Internal {
class BaseFileFindPrivate;
} // namespace Internal
class TEXTEDITOR_EXPORT BaseFileFind : public Find::IFindFilter class TEXTEDITOR_EXPORT BaseFileFind : public Find::IFindFilter
{ {
@@ -108,13 +106,7 @@ private:
Find::SearchResultWindow::SearchMode searchMode); Find::SearchResultWindow::SearchMode searchMode);
void runSearch(Find::SearchResult *search); void runSearch(Find::SearchResult *search);
QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers; Internal::BaseFileFindPrivate *d;
QPointer<Find::IFindSupport> m_currentFindSupport;
QLabel *m_resultLabel;
QStringListModel m_filterStrings;
QString m_filterSetting;
QPointer<QComboBox> m_filterCombo;
}; };
} // namespace TextEditor } // namespace TextEditor

View File

@@ -30,6 +30,7 @@
#include "findincurrentfile.h" #include "findincurrentfile.h"
#include "itexteditor.h" #include "itexteditor.h"
#include <utils/filesearch.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>

View File

@@ -29,6 +29,7 @@
#include "findinfiles.h" #include "findinfiles.h"
#include <utils/filesearch.h>
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <QDebug> #include <QDebug>
@@ -37,6 +38,8 @@
#include <QDirIterator> #include <QDirIterator>
#include <QPushButton> #include <QPushButton>
#include <QFileDialog> #include <QFileDialog>
#include <QLabel>
#include <QComboBox>
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QVBoxLayout> #include <QVBoxLayout>
@@ -49,6 +52,10 @@ FindInFiles::FindInFiles()
{ {
} }
FindInFiles::~FindInFiles()
{
}
QString FindInFiles::id() const QString FindInFiles::id() const
{ {
return QLatin1String("Files on Disk"); return QLatin1String("Files on Disk");

View File

@@ -32,13 +32,11 @@
#include "basefilefind.h" #include "basefilefind.h"
#include <find/ifindfilter.h>
#include <QPointer> #include <QPointer>
#include <QLabel>
#include <QComboBox>
#include <QStringListModel> #include <QStringListModel>
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QComboBox)
namespace TextEditor { namespace TextEditor {
@@ -48,6 +46,7 @@ class TEXTEDITOR_EXPORT FindInFiles : public BaseFileFind
public: public:
FindInFiles(); FindInFiles();
~FindInFiles();
QString id() const; QString id() const;
QString displayName() const; QString displayName() const;

View File

@@ -30,6 +30,7 @@
#include "findinopenfiles.h" #include "findinopenfiles.h"
#include "itexteditor.h" #include "itexteditor.h"
#include <utils/filesearch.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/openeditorsmodel.h> #include <coreplugin/editormanager/openeditorsmodel.h>