From faba06b553a9af352c5a033ce5e0e725a6160f07 Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Thu, 2 Sep 2010 16:13:33 +0200 Subject: [PATCH] Search Dialog: Make canceling possible Task-Nr: QTCREATORBUG-2243 --- src/plugins/cpptools/symbolsfindfilter.cpp | 10 +++++ src/plugins/cpptools/symbolsfindfilter.h | 2 + src/plugins/find/finddialog.ui | 45 ++++++++++++---------- src/plugins/find/findtoolwindow.cpp | 9 +++++ src/plugins/find/findtoolwindow.h | 1 + src/plugins/find/ifindfilter.h | 3 ++ src/plugins/texteditor/basefilefind.cpp | 10 +++++ src/plugins/texteditor/basefilefind.h | 2 + 8 files changed, 62 insertions(+), 20 deletions(-) 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 @@ </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 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<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 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); -- GitLab