diff options
author | Eike Ziller <[email protected]> | 2011-09-09 08:46:51 +0200 |
---|---|---|
committer | Eike Ziller <[email protected]> | 2011-09-13 15:38:47 +0200 |
commit | 1e47de1416b0321507ed114f513bd6822f0b089a (patch) | |
tree | 4ea2228ebd8b582fb24b54254df8f27ae159f0f9 /src/plugins | |
parent | 5990b039e89a41423b1b6acf40936aa8ba83f4f7 (diff) |
Move advanced search dialog into search result pane.
And move the cancel button into the specific search result widget.
Change-Id: Ide8173e1ec5de091e1c1332a2b0c47d9a30a4c87
Reviewed-on: http://codereview.qt-project.org/4555
Reviewed-by: Qt Sanity Bot <[email protected]>
Reviewed-by: Leandro T. C. Melo <[email protected]>
Reviewed-by: Eike Ziller <[email protected]>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 8 | ||||
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.h | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/symbolsfindfilter.cpp | 6 | ||||
-rw-r--r-- | src/plugins/cpptools/symbolsfindfilter.h | 3 | ||||
-rw-r--r-- | src/plugins/find/finddialog.ui | 278 | ||||
-rw-r--r-- | src/plugins/find/findplugin.cpp | 12 | ||||
-rw-r--r-- | src/plugins/find/findplugin.h | 1 | ||||
-rw-r--r-- | src/plugins/find/findtoolwindow.cpp | 30 | ||||
-rw-r--r-- | src/plugins/find/findtoolwindow.h | 8 | ||||
-rw-r--r-- | src/plugins/find/ifindfilter.h | 2 | ||||
-rw-r--r-- | src/plugins/find/searchresultwidget.cpp | 23 | ||||
-rw-r--r-- | src/plugins/find/searchresultwidget.h | 4 | ||||
-rw-r--r-- | src/plugins/find/searchresultwindow.cpp | 34 | ||||
-rw-r--r-- | src/plugins/find/searchresultwindow.h | 6 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljsfindreferences.cpp | 6 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljsfindreferences.h | 1 | ||||
-rw-r--r-- | src/plugins/texteditor/basefilefind.cpp | 6 | ||||
-rw-r--r-- | src/plugins/texteditor/basefilefind.h | 3 |
18 files changed, 247 insertions, 185 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 52b0066fa05..9bcd6fbea1e 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -274,7 +274,7 @@ void CppFindReferences::findAll_helper(Symbol *symbol, const LookupContext &cont result = QtConcurrent::run(&find_helper, workingCopy, context, this, symbol); m_watcher.setFuture(result); - + connect(m_currentSearch, SIGNAL(cancelled()), this, SLOT(cancel())); Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching"), CppTools::Constants::TASK_SEARCH); @@ -310,6 +310,11 @@ void CppFindReferences::searchFinished() emit changed(); } +void CppFindReferences::cancel() +{ + m_watcher.cancel(); +} + void CppFindReferences::openEditor(const Find::SearchResultItem &item) { if (item.path.size() > 0) { @@ -439,6 +444,7 @@ void CppFindReferences::findMacroUses(const Macro ¯o) QFuture<Usage> result; result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, this, macro); m_watcher.setFuture(result); + connect(m_currentSearch, SIGNAL(cancelled()), this, SLOT(cancel())); Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching"), diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h index 810b1760a6a..1071e0e6dba 100644 --- a/src/plugins/cpptools/cppfindreferences.h +++ b/src/plugins/cpptools/cppfindreferences.h @@ -83,6 +83,7 @@ public: private Q_SLOTS: void displayResults(int first, int last); void searchFinished(); + void cancel(); void openEditor(const Find::SearchResultItem &item); void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items); diff --git a/src/plugins/cpptools/symbolsfindfilter.cpp b/src/plugins/cpptools/symbolsfindfilter.cpp index 470900f9070..3aecc1d6ff4 100644 --- a/src/plugins/cpptools/symbolsfindfilter.cpp +++ b/src/plugins/cpptools/symbolsfindfilter.cpp @@ -135,11 +135,6 @@ bool SymbolsFindFilter::isEnabled() const return !m_isRunning && m_enabled; } -bool SymbolsFindFilter::canCancel() const -{ - return m_isRunning; -} - void SymbolsFindFilter::cancel() { m_watcher.cancel(); @@ -174,6 +169,7 @@ void SymbolsFindFilter::findAll(const QString &txt, Find::FindFlags findFlags) Find::FindFlags, CPlusPlus::Snapshot, SearchSymbols *, QSet<QString> >(runSearch, txt, findFlags, m_manager->snapshot(), &m_search, projectFileNames)); + connect(m_currentSearch, SIGNAL(cancelled()), this, SLOT(cancel())); Core::ICore::instance()->progressManager()->addTask(m_watcher.future(), tr("Searching"), Find::Constants::TASK_SEARCH); diff --git a/src/plugins/cpptools/symbolsfindfilter.h b/src/plugins/cpptools/symbolsfindfilter.h index dd8e7dcb361..37ebf362acd 100644 --- a/src/plugins/cpptools/symbolsfindfilter.h +++ b/src/plugins/cpptools/symbolsfindfilter.h @@ -63,8 +63,6 @@ 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); @@ -87,6 +85,7 @@ private slots: void addResults(int begin, int end); void finish(); + void cancel(); void onTaskStarted(const QString &type); void onAllTasksFinished(const QString &type); diff --git a/src/plugins/find/finddialog.ui b/src/plugins/find/finddialog.ui index e61f02292f3..d52c99439d5 100644 --- a/src/plugins/find/finddialog.ui +++ b/src/plugins/find/finddialog.ui @@ -1,69 +1,167 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Find::Internal::FindDialog</class> - <widget class="QDialog" name="Find::Internal::FindDialog"> + <widget class="QWidget" name="Find::Internal::FindDialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>450</width> - <height>221</height> + <width>673</width> + <height>210</height> </rect> </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <property name="maximumSize"> + <size> + <width>680</width> + <height>16777215</height> + </size> </property> - <property name="windowTitle"> - <string>Search for...</string> - </property> - <property name="sizeGripEnabled"> - <bool>false</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="sizeConstraint"> - <enum>QLayout::SetMinAndMaxSize</enum> - </property> - <item> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="label"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>80</width> + <height>0</height> + </size> + </property> + <property name="text"> + <string>Sc&ope:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>filterList</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QWidget" name="widget_2" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="spacing"> + <number>0</number> + </property> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QComboBox" name="filterList"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Search &for:</string> + </property> + <property name="alignment"> + <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> + </property> + <property name="buddy"> + <cstring>searchTerm</cstring> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLineEdit" name="searchTerm"/> + </item> + <item row="2" column="1"> + <widget class="QWidget" name="widget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QCheckBox" name="matchCase"> + <property name="text"> + <string>&Case sensitive</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="wholeWords"> + <property name="text"> + <string>&Whole words only</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="regExp"> + <property name="text"> + <string>Use regular e&xpressions</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QWidget" name="configWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>10</verstretch> + </sizepolicy> + </property> + </widget> + </item> + <item row="4" column="0" colspan="2"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> </property> - <property name="minimumSize"> + <property name="sizeHint" stdset="0"> <size> - <width>80</width> - <height>0</height> + <width>40</width> + <height>20</height> </size> </property> - <property name="text"> - <string>Sc&ope:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>filterList</cstring> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QComboBox" name="filterList"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - </widget> + </spacer> </item> - <item row="0" column="2"> + <item> <widget class="QPushButton" name="searchButton"> <property name="text"> <string>&Search</string> @@ -73,86 +171,16 @@ </property> </widget> </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Search &for:</string> - </property> - <property name="alignment"> - <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> - </property> - <property name="buddy"> - <cstring>searchTerm</cstring> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLineEdit" name="searchTerm"/> - </item> - <item row="7" column="0" colspan="2"> - <widget class="QWidget" name="configWidget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>10</verstretch> - </sizepolicy> - </property> - </widget> - </item> - <item row="4" column="1" rowspan="3"> - <widget class="QWidget" name="widget" native="true"> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="margin"> - <number>0</number> - </property> - <item> - <widget class="QCheckBox" name="matchCase"> - <property name="text"> - <string>&Case sensitive</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="wholeWords"> - <property name="text"> - <string>&Whole words only</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="regExp"> - <property name="text"> - <string>Use regular e&xpressions</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="5" column="2"> + <item> <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> + <item row="5" column="1"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -173,10 +201,6 @@ <tabstop>matchCase</tabstop> <tabstop>wholeWords</tabstop> <tabstop>regExp</tabstop> - <tabstop>searchButton</tabstop> - <tabstop>cancelButton</tabstop> - <tabstop>closeButton</tabstop> - <tabstop>replaceButton</tabstop> </tabstops> <resources/> <connections/> diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp index 3eb6365713c..ce6fc6f8586 100644 --- a/src/plugins/find/findplugin.cpp +++ b/src/plugins/find/findplugin.cpp @@ -136,7 +136,7 @@ bool FindPlugin::initialize(const QStringList &, QString *) d->m_findToolBar = new Internal::FindToolBar(this, d->m_currentDocumentFind); d->m_findDialog = new Internal::FindToolWindow(this); - SearchResultWindow *searchResultWindow = new SearchResultWindow; + SearchResultWindow *searchResultWindow = new SearchResultWindow(d->m_findDialog); addAutoReleasedObject(searchResultWindow); return true; } @@ -178,12 +178,7 @@ void FindPlugin::openFindFilter() QAction *action = qobject_cast<QAction*>(sender()); QTC_ASSERT(action, return); IFindFilter *filter = action->data().value<IFindFilter *>(); - if (d->m_currentDocumentFind->candidateIsEnabled()) - d->m_currentDocumentFind->acceptCandidate(); - QString currentFindString = (d->m_currentDocumentFind->isEnabled() ? d->m_currentDocumentFind->currentFindString() : ""); - if (!currentFindString.isEmpty()) - d->m_findDialog->setFindText(currentFindString); - d->m_findDialog->open(filter); + openFindDialog(filter); } void FindPlugin::openFindDialog(IFindFilter *filter) @@ -193,7 +188,8 @@ void FindPlugin::openFindDialog(IFindFilter *filter) QString currentFindString = (d->m_currentDocumentFind->isEnabled() ? d->m_currentDocumentFind->currentFindString() : ""); if (!currentFindString.isEmpty()) d->m_findDialog->setFindText(currentFindString); - d->m_findDialog->open(filter); + d->m_findDialog->setCurrentFilter(filter); + SearchResultWindow::instance()->openNewSearchPanel(); } void FindPlugin::setupMenu() diff --git a/src/plugins/find/findplugin.h b/src/plugins/find/findplugin.h index 3834872ecb0..6feed7f94ab 100644 --- a/src/plugins/find/findplugin.h +++ b/src/plugins/find/findplugin.h @@ -48,7 +48,6 @@ struct FindPluginPrivate; namespace Internal { class FindToolBar; -class FindToolWindow; class CurrentDocumentFind; } // namespace Internal diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp index c649b2cf631..4fc75c96302 100644 --- a/src/plugins/find/findtoolwindow.cpp +++ b/src/plugins/find/findtoolwindow.cpp @@ -44,23 +44,27 @@ using namespace Find; using namespace Find::Internal; -FindToolWindow::FindToolWindow(FindPlugin *plugin) - : QDialog(Core::ICore::instance()->mainWindow()), +static FindToolWindow *m_instance = 0; + +FindToolWindow::FindToolWindow(FindPlugin *plugin, QWidget *parent) + : QWidget(parent), m_plugin(plugin), m_findCompleter(new QCompleter(this)), m_currentFilter(0), m_configWidget(0) { + m_instance = this; m_ui.setupUi(this); - connect(m_ui.closeButton, SIGNAL(clicked()), this, SLOT(reject())); + setFocusProxy(m_ui.searchTerm); + 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())); + connect(m_ui.searchTerm, SIGNAL(returnPressed()), this, SLOT(search())); m_findCompleter->setModel(m_plugin->findCompletionModel()); m_ui.searchTerm->setCompleter(m_findCompleter); @@ -77,6 +81,11 @@ FindToolWindow::~FindToolWindow() qDeleteAll(m_configWidgets); } +FindToolWindow *FindToolWindow::instance() +{ + return m_instance; +} + bool FindToolWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == m_ui.searchTerm && event->type() == QEvent::KeyPress) { @@ -85,7 +94,7 @@ bool FindToolWindow::eventFilter(QObject *obj, QEvent *event) m_findCompleter->complete(); } } - return QDialog::eventFilter(obj, event); + return QWidget::eventFilter(obj, event); } void FindToolWindow::updateButtonStates() @@ -105,7 +114,6 @@ 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) @@ -129,7 +137,7 @@ void FindToolWindow::setFindText(const QString &text) m_ui.searchTerm->setText(text); } -void FindToolWindow::open(IFindFilter *filter) +void FindToolWindow::setCurrentFilter(IFindFilter *filter) { if (!filter) filter = m_currentFilter; @@ -143,7 +151,6 @@ void FindToolWindow::open(IFindFilter *filter) m_ui.searchTerm->setFocus(); m_ui.searchTerm->selectAll(); - exec(); } void FindToolWindow::setCurrentFilter(int index) @@ -172,7 +179,6 @@ void FindToolWindow::acceptAndGetParameters(QString *term, IFindFilter **filter) { if (filter) *filter = 0; - accept(); m_plugin->updateFindCompletion(m_ui.searchTerm->text()); int index = m_ui.filterList->currentIndex(); QString searchTerm = m_ui.searchTerm->text(); @@ -201,12 +207,6 @@ 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 b030a1ea9dd..ba9d0e881c4 100644 --- a/src/plugins/find/findtoolwindow.h +++ b/src/plugins/find/findtoolwindow.h @@ -45,18 +45,19 @@ class FindPlugin; namespace Internal { -class FindToolWindow : public QDialog +class FindToolWindow : public QWidget { Q_OBJECT public: - explicit FindToolWindow(FindPlugin *plugin); + explicit FindToolWindow(FindPlugin *plugin, QWidget *parent = 0); ~FindToolWindow(); + static FindToolWindow *instance(); void setFindFilters(const QList<IFindFilter *> &filters); void setFindText(const QString &text); - void open(IFindFilter *filter); + void setCurrentFilter(IFindFilter *filter); void readSettings(); void writeSettings(); @@ -66,7 +67,6 @@ 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 e5b7a8b7fc5..ec6264133b1 100644 --- a/src/plugins/find/ifindfilter.h +++ b/src/plugins/find/ifindfilter.h @@ -57,8 +57,6 @@ public: virtual QString displayName() const = 0; /// virtual bool isEnabled() const = 0; - virtual bool canCancel() const = 0; - virtual void cancel() = 0; virtual QKeySequence defaultShortcut() const; virtual bool isReplaceSupported() const { return false; } virtual FindFlags supportedFindFlags() const; diff --git a/src/plugins/find/searchresultwidget.cpp b/src/plugins/find/searchresultwidget.cpp index e50108b7ec9..f06e28141c7 100644 --- a/src/plugins/find/searchresultwidget.cpp +++ b/src/plugins/find/searchresultwidget.cpp @@ -250,6 +250,11 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : m_searchTerm->setVisible(false); descriptionLayout->addWidget(m_label); descriptionLayout->addWidget(m_searchTerm); + m_cancelButton = new QToolButton(topWidget); + m_cancelButton->setText(tr("Cancel")); + m_cancelButton->setToolButtonStyle(Qt::ToolButtonTextOnly); + connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(cancel())); + m_cancelButton->setVisible(false); m_replaceLabel = new QLabel(tr("Replace with:"), topWidget); m_replaceTextEdit = new WideEnoughLineEdit(topWidget); @@ -257,18 +262,21 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : m_replaceButton->setToolTip(tr("Replace all occurrences")); m_replaceButton->setText(tr("Replace")); m_replaceButton->setToolButtonStyle(Qt::ToolButtonTextOnly); - m_replaceButton->setAutoRaise(true); m_replaceTextEdit->setTabOrder(m_replaceTextEdit, m_searchResultTreeView); m_matchesFoundLabel = new QLabel(topWidget); updateMatchesFoundLabel(); topLayout->addWidget(m_descriptionContainer); + topLayout->addWidget(m_cancelButton); topLayout->addWidget(m_replaceLabel); topLayout->addWidget(m_replaceTextEdit); topLayout->addWidget(m_replaceButton); topLayout->addStretch(2); topLayout->addWidget(m_matchesFoundLabel); + topWidget->setMinimumHeight(m_cancelButton->sizeHint().height() + + topLayout->contentsMargins().top() + topLayout->contentsMargins().bottom() + + topWidget->lineWidth()); setShowReplaceUI(false); connect(m_searchResultTreeView, SIGNAL(jumpToSearchResult(SearchResultItem)), @@ -277,6 +285,11 @@ SearchResultWidget::SearchResultWidget(QWidget *parent) : connect(m_replaceButton, SIGNAL(clicked()), this, SLOT(handleReplaceButton())); } +void SearchResultWidget::startSearch() +{ + m_cancelButton->setVisible(true); +} + void SearchResultWidget::setInfo(const QString &label, const QString &toolTip, const QString &term) { m_label->setText(label); @@ -438,6 +451,7 @@ void SearchResultWidget::finishSearch() { m_replaceTextEdit->setEnabled(m_count > 0); m_replaceButton->setEnabled(m_count > 0); + m_cancelButton->setVisible(false); } void SearchResultWidget::clear() @@ -449,6 +463,7 @@ void SearchResultWidget::clear() m_count = 0; m_label->setVisible(false); m_searchTerm->setVisible(false); + m_cancelButton->setVisible(false); updateMatchesFoundLabel(); m_infoBar.clear(); } @@ -474,6 +489,12 @@ void SearchResultWidget::handleReplaceButton() } } +void SearchResultWidget::cancel() +{ + m_cancelButton->setVisible(false); + emit cancelled(); +} + bool SearchResultWidget::showWarningMessage() const { // read settings diff --git a/src/plugins/find/searchresultwidget.h b/src/plugins/find/searchresultwidget.h index 636d220e484..ed5543c9126 100644 --- a/src/plugins/find/searchresultwidget.h +++ b/src/plugins/find/searchresultwidget.h @@ -53,6 +53,7 @@ class SearchResultWidget : public QWidget public: explicit SearchResultWidget(QWidget *parent = 0); + void startSearch(); void setInfo(const QString &label, const QString &toolTip, const QString &term); void addResult(const QString &fileName, int lineNumber, const QString &lineText, @@ -90,6 +91,7 @@ public slots: signals: void activated(const Find::SearchResultItem &item); void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems); + void cancelled(); void visibilityChanged(bool visible); void navigateStateChanged(); @@ -98,6 +100,7 @@ private slots: void hideNoUndoWarning(); void handleJumpToSearchResult(const SearchResultItem &item); void handleReplaceButton(); + void cancel(); private: bool showWarningMessage() const; @@ -117,6 +120,7 @@ private: QWidget *m_descriptionContainer; QLabel *m_label; QLabel *m_searchTerm; + QToolButton *m_cancelButton; QLabel *m_matchesFoundLabel; }; diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp index abe62395043..28e1c4374e1 100644 --- a/src/plugins/find/searchresultwindow.cpp +++ b/src/plugins/find/searchresultwindow.cpp @@ -32,6 +32,7 @@ #include "searchresultwindow.h" #include "searchresultwidget.h" +#include "findtoolwindow.h" #include <coreplugin/icore.h> #include <coreplugin/actionmanager/actionmanager.h> @@ -46,6 +47,7 @@ #include <QtGui/QVBoxLayout> #include <QtGui/QFont> #include <QtGui/QAction> +#include <QtGui/QStackedWidget> static const char SETTINGSKEYSECTIONNAME[] = "SearchResults"; static const char SETTINGSKEYEXPANDRESULTS[] = "ExpandResults"; @@ -61,7 +63,7 @@ namespace Internal { QToolButton *m_expandCollapseButton; QAction *m_expandCollapseAction; static const bool m_initiallyExpand = false; - QWidget *m_widget; + QStackedWidget *m_widget; SearchResult *m_currentSearch; }; @@ -152,19 +154,17 @@ SearchResultWindow *SearchResultWindow::m_instance = 0; \fn SearchResultWindow::SearchResultWindow() \internal */ -SearchResultWindow::SearchResultWindow() : d(new SearchResultWindowPrivate) +SearchResultWindow::SearchResultWindow(QWidget *newSearchPanel) + : d(new SearchResultWindowPrivate) { m_instance = this; - d->m_widget = new QWidget; + d->m_widget = new QStackedWidget; d->m_widget->setWindowTitle(displayName()); - d->m_searchResultWidget = new Internal::SearchResultWidget(d->m_widget); + d->m_widget->addWidget(newSearchPanel); - QVBoxLayout *vlay = new QVBoxLayout; - d->m_widget->setLayout(vlay); - vlay->setMargin(0); - vlay->setSpacing(0); - vlay->addWidget(d->m_searchResultWidget); + d->m_searchResultWidget = new Internal::SearchResultWidget(d->m_widget); + d->m_widget->addWidget(d->m_searchResultWidget); d->m_expandCollapseButton = new QToolButton(d->m_widget); d->m_expandCollapseButton->setAutoRaise(true); @@ -250,6 +250,8 @@ SearchResult *SearchResultWindow::startNewSearch(SearchMode searchOrSearchAndRep clearContents(); d->m_searchResultWidget->setShowReplaceUI(searchOrSearchAndReplace != SearchOnly); d->m_searchResultWidget->setDontAskAgainGroup(cfgGroup); + d->m_searchResultWidget->startSearch(); + d->m_widget->setCurrentWidget(d->m_searchResultWidget); delete d->m_currentSearch; d->m_currentSearch = new SearchResult(d->m_searchResultWidget); return d->m_currentSearch; @@ -289,7 +291,11 @@ bool SearchResultWindow::canFocus() */ void SearchResultWindow::setFocus() { - d->m_searchResultWidget->setFocusInternally(); + int stackIndex = d->m_widget->currentIndex(); + if (stackIndex == 0) + d->m_widget->currentWidget()->setFocus(); + else + d->m_searchResultWidget->setFocusInternally(); } /*! @@ -301,6 +307,12 @@ void SearchResultWindow::setTextEditorFont(const QFont &font) d->m_searchResultWidget->setTextEditorFont(font); } +void SearchResultWindow::openNewSearchPanel() +{ + d->m_widget->setCurrentIndex(0); + popup(); +} + /*! \fn void SearchResultWindow::handleExpandCollapseToolButton(bool checked) \internal @@ -410,6 +422,8 @@ SearchResult::SearchResult(SearchResultWidget *widget) this, SIGNAL(activated(Find::SearchResultItem))); connect(widget, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)), this, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>))); + connect(widget, SIGNAL(cancelled()), + this, SIGNAL(cancelled())); connect(widget, SIGNAL(visibilityChanged(bool)), this, SIGNAL(visibilityChanged(bool))); } diff --git a/src/plugins/find/searchresultwindow.h b/src/plugins/find/searchresultwindow.h index a3be1133b97..24f25eae8eb 100644 --- a/src/plugins/find/searchresultwindow.h +++ b/src/plugins/find/searchresultwindow.h @@ -110,6 +110,7 @@ public slots: signals: void activated(const Find::SearchResultItem &item); void replaceButtonClicked(const QString &replaceText, const QList<Find::SearchResultItem> &checkedItems); + void cancelled(); void visibilityChanged(bool visible); private: @@ -132,7 +133,7 @@ public: }; - SearchResultWindow(); + SearchResultWindow(QWidget *newSearchPanel); virtual ~SearchResultWindow(); static SearchResultWindow *instance(); @@ -153,8 +154,9 @@ public: bool canNavigate(); void setTextEditorFont(const QFont &font); + void openNewSearchPanel(); - // search result object only lives till next startnewsearch call + // search result object is guaranteed to live till its finishSearch method is called SearchResult *startNewSearch(SearchMode searchOrSearchAndReplace = SearchOnly, const QString &cfgGroup = QString()); diff --git a/src/plugins/qmljseditor/qmljsfindreferences.cpp b/src/plugins/qmljseditor/qmljsfindreferences.cpp index 3a2005c22d3..79a7a70bd2e 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.cpp +++ b/src/plugins/qmljseditor/qmljsfindreferences.cpp @@ -928,6 +928,7 @@ void FindReferences::displayResults(int first, int last) m_currentSearch->setInfo(tr("Usages:"), QString(), symbolName); connect(m_currentSearch, SIGNAL(activated(Find::SearchResultItem)), this, SLOT(openEditor(Find::SearchResultItem))); + connect(m_currentSearch, SIGNAL(cancelled()), this, SLOT(cancel())); Find::SearchResultWindow::instance()->popup(true); Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); @@ -956,6 +957,11 @@ void FindReferences::searchFinished() emit changed(); } +void FindReferences::cancel() +{ + m_watcher.cancel(); +} + void FindReferences::openEditor(const Find::SearchResultItem &item) { if (item.path.size() > 0) { diff --git a/src/plugins/qmljseditor/qmljsfindreferences.h b/src/plugins/qmljseditor/qmljsfindreferences.h index 326213d8bf8..db6e548d27c 100644 --- a/src/plugins/qmljseditor/qmljsfindreferences.h +++ b/src/plugins/qmljseditor/qmljsfindreferences.h @@ -85,6 +85,7 @@ public: private Q_SLOTS: void displayResults(int first, int last); void searchFinished(); + void cancel(); void openEditor(const Find::SearchResultItem &item); void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items); diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index 1f58df1423b..105fa8f8f9c 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -83,11 +83,6 @@ bool BaseFileFind::isEnabled() const return !m_isSearching; } -bool BaseFileFind::canCancel() const -{ - return m_isSearching; -} - void BaseFileFind::cancel() { m_watcher.cancel(); @@ -143,6 +138,7 @@ void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags, m_watcher.setFuture(Utils::findInFiles(txt, files(), textDocumentFlagsForFindFlags(findFlags), ITextEditor::openedTextEditorsContents())); } + connect(m_currentSearch, SIGNAL(cancelled()), this, SLOT(cancel())); Core::FutureProgress *progress = Core::ICore::instance()->progressManager()->addTask(m_watcher.future(), tr("Search"), diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h index 97086b46ea3..6f757b10031 100644 --- a/src/plugins/texteditor/basefilefind.h +++ b/src/plugins/texteditor/basefilefind.h @@ -68,8 +68,6 @@ public: ~BaseFileFind(); 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); @@ -94,6 +92,7 @@ protected: private slots: void displayResult(int index); void searchFinished(); + void cancel(); void openEditor(const Find::SearchResultItem &item); void doReplace(const QString &txt, const QList<Find::SearchResultItem> &items); |