diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index f133831a256013d33e7ec4e638cd025f84d81a1f..a6934a6688540ef17b62ae9859227ae96ef16df2 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 420420dc4af7f6a4185cf256c32e56bc1559ab6f..73b67856e26ac831bfbe45a95f2d3dbdf359e81e 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 98ae78e10918cf2661dd169537a1027e4f61621d..e2dd019f12ad80e3e9f86593a71b8bf513d41714 100644 --- a/src/plugins/find/finddialog.ui +++ b/src/plugins/find/finddialog.ui @@ -73,7 +73,7 @@ </property> </widget> </item> - <item row="1" column="0"> + <item row="2" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Search &for:</string> @@ -86,17 +86,10 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QLineEdit" name="searchTerm"/> </item> - <item row="1" column="2"> - <widget class="QPushButton" name="closeButton"> - <property name="text"> - <string>Close</string> - </property> - </widget> - </item> - <item row="5" column="0" colspan="2"> + <item row="7" column="0" colspan="2"> <widget class="QWidget" name="configWidget" native="true"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> @@ -106,14 +99,7 @@ </property> </widget> </item> - <item row="2" column="2"> - <widget class="QPushButton" name="replaceButton"> - <property name="text"> - <string>Search && Replace</string> - </property> - </widget> - </item> - <item row="2" column="1" rowspan="3"> + <item row="4" column="1" rowspan="3"> <widget class="QWidget" name="widget" native="true"> <layout class="QVBoxLayout" name="verticalLayout_2"> <property name="margin"> @@ -143,6 +129,27 @@ </layout> </widget> </item> + <item row="5" column="2"> + <widget class="QPushButton" name="replaceButton"> + <property name="text"> + <string>Search && Replace</string> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QPushButton" name="closeButton"> + <property name="text"> + <string>Close</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QPushButton" name="cancelButton"> + <property name="text"> + <string>Cancel</string> + </property> + </widget> + </item> </layout> </item> <item> @@ -164,8 +171,6 @@ <tabstop>filterList</tabstop> <tabstop>searchTerm</tabstop> <tabstop>searchButton</tabstop> - <tabstop>closeButton</tabstop> - <tabstop>replaceButton</tabstop> </tabstops> <resources/> <connections/> diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp index 803b8e397d29154dc1980a275b8c95a7467c88d5..95b397da7f69d88e2cef42b534724af09ddbe0d4 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<IFindFilter *> &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 52f0c1080ec08fc2023766cc3c722b174aaef408..d8a39cb058a121da667bb6eb6e97e0d72ee930f0 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 d45dc83a7c2fae6d17b0d801fe10219eb03e3b28..fef767f05f4c04cb1171217434f388de5b8277f2 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 7360ade77129f5a8f9ba867571fee91e7519e6a8..6de00a8bc9a10ee192c832327a94a4f9743c2b74 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 1a26154d405a827373926e732f3e662680503324..b00c6a110c0e572d51f4b44a8ce1a974d4253b1b 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);