diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index f133831a256..a6934a66885 100644 --- a/src/plugins/cpptools/symbolsfindfilter.cpp +++ b/src/plugins/cpptools/symbolsfindfilter.cpp @@ -131,6 +131,16 @@ bool SymbolsFindFilter::isEnabled() const return !m_isRunning && m_enabled; } +bool SymbolsFindFilter::canCancel() const +{ + return m_isRunning; +} + +void SymbolsFindFilter::cancel() +{ + m_watcher.cancel(); +} + Find::FindFlags SymbolsFindFilter::supportedFindFlags() const { return Find::FindCaseSensitively | Find::FindRegularExpression | Find::FindWholeWords; diff --git a/src/plugins/cpptools/symbolsfindfilter.h b/src/plugins/cpptools/symbolsfindfilter.h index 420420dc4af..73b67856e26 100644 --- a/src/plugins/cpptools/symbolsfindfilter.h +++ b/src/plugins/cpptools/symbolsfindfilter.h @@ -60,6 +60,8 @@ public: QString id() const; QString displayName() const; bool isEnabled() const; + bool canCancel() const; + void cancel(); Find::FindFlags supportedFindFlags() const; void findAll(const QString &txt, Find::FindFlags findFlags); diff --git a/src/plugins/find/finddialog.ui b/src/plugins/find/finddialog.ui index 98ae78e1091..e2dd019f12a 100644 --- a/src/plugins/find/finddialog.ui +++ b/src/plugins/find/finddialog.ui @@ -73,7 +73,7 @@ - + Search &for: @@ -86,17 +86,10 @@ - + - - - - Close - - - - + @@ -106,14 +99,7 @@ - - - - Search && Replace - - - - + @@ -143,6 +129,27 @@ + + + + Search && Replace + + + + + + + Close + + + + + + + Cancel + + + @@ -164,8 +171,6 @@ filterList searchTerm searchButton - closeButton - replaceButton diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp index 803b8e397d2..95b397da7f6 100644 --- a/src/plugins/find/findtoolwindow.cpp +++ b/src/plugins/find/findtoolwindow.cpp @@ -52,11 +52,13 @@ FindToolWindow::FindToolWindow(FindPlugin *plugin) connect(m_ui.closeButton, SIGNAL(clicked()), this, SLOT(reject())); connect(m_ui.searchButton, SIGNAL(clicked()), this, SLOT(search())); connect(m_ui.replaceButton, SIGNAL(clicked()), this, SLOT(replace())); + connect(m_ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancelSearch())); connect(m_ui.matchCase, SIGNAL(toggled(bool)), m_plugin, SLOT(setCaseSensitive(bool))); connect(m_ui.wholeWords, SIGNAL(toggled(bool)), m_plugin, SLOT(setWholeWord(bool))); connect(m_ui.regExp, SIGNAL(toggled(bool)), m_plugin, SLOT(setRegularExpression(bool))); connect(m_ui.filterList, SIGNAL(activated(int)), this, SLOT(setCurrentFilter(int))); connect(m_ui.searchTerm, SIGNAL(textChanged(QString)), this, SLOT(updateButtonStates())); + m_findCompleter->setModel(m_plugin->findCompletionModel()); m_ui.searchTerm->setCompleter(m_findCompleter); m_ui.searchTerm->installEventFilter(this); @@ -100,6 +102,7 @@ void FindToolWindow::updateButtonStates() m_ui.regExp->setEnabled(filterEnabled && (m_currentFilter->supportedFindFlags() & Find::FindRegularExpression)); m_ui.searchTerm->setEnabled(filterEnabled); + m_ui.cancelButton->setEnabled(m_currentFilter && m_currentFilter->canCancel()); } void FindToolWindow::setFindFilters(const QList &filters) @@ -195,6 +198,12 @@ void FindToolWindow::replace() filter->replaceAll(term, m_plugin->findFlags()); } +void FindToolWindow::cancelSearch() +{ + if (m_currentFilter) + m_currentFilter->cancel(); +} + void FindToolWindow::writeSettings() { QSettings *settings = Core::ICore::instance()->settings(); diff --git a/src/plugins/find/findtoolwindow.h b/src/plugins/find/findtoolwindow.h index 52f0c1080ec..d8a39cb058a 100644 --- a/src/plugins/find/findtoolwindow.h +++ b/src/plugins/find/findtoolwindow.h @@ -63,6 +63,7 @@ protected: private slots: void search(); void replace(); + void cancelSearch(); void setCurrentFilter(int index); void updateButtonStates(); diff --git a/src/plugins/find/ifindfilter.h b/src/plugins/find/ifindfilter.h index d45dc83a7c2..fef767f05f4 100644 --- a/src/plugins/find/ifindfilter.h +++ b/src/plugins/find/ifindfilter.h @@ -52,7 +52,10 @@ public: virtual QString id() const = 0; virtual QString displayName() const = 0; + /// virtual bool isEnabled() const = 0; + virtual bool canCancel() const = 0; + virtual void cancel() = 0; virtual QKeySequence defaultShortcut() const { return QKeySequence(); } virtual bool isReplaceSupported() const { return false; } virtual FindFlags supportedFindFlags() const; diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 7360ade7712..6de00a8bc9a 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -70,6 +70,16 @@ bool BaseFileFind::isEnabled() const return !m_isSearching; } +bool BaseFileFind::canCancel() const +{ + return m_isSearching; +} + +void BaseFileFind::cancel() +{ + m_watcher.cancel(); +} + QStringList BaseFileFind::fileNameFilters() const { QStringList filters; diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h index 1a26154d405..b00c6a110c0 100644 --- a/src/plugins/texteditor/basefilefind.h +++ b/src/plugins/texteditor/basefilefind.h @@ -62,6 +62,8 @@ public: explicit BaseFileFind(Find::SearchResultWindow *resultWindow); bool isEnabled() const; + bool canCancel() const; + void cancel(); bool isReplaceSupported() const { return true; } void findAll(const QString &txt, Find::FindFlags findFlags); void replaceAll(const QString &txt, Find::FindFlags findFlags);