aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorEike Ziller <[email protected]>2011-09-09 08:46:51 +0200
committerEike Ziller <[email protected]>2011-09-13 15:38:47 +0200
commit1e47de1416b0321507ed114f513bd6822f0b089a (patch)
tree4ea2228ebd8b582fb24b54254df8f27ae159f0f9 /src/plugins
parent5990b039e89a41423b1b6acf40936aa8ba83f4f7 (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.cpp8
-rw-r--r--src/plugins/cpptools/cppfindreferences.h1
-rw-r--r--src/plugins/cpptools/symbolsfindfilter.cpp6
-rw-r--r--src/plugins/cpptools/symbolsfindfilter.h3
-rw-r--r--src/plugins/find/finddialog.ui278
-rw-r--r--src/plugins/find/findplugin.cpp12
-rw-r--r--src/plugins/find/findplugin.h1
-rw-r--r--src/plugins/find/findtoolwindow.cpp30
-rw-r--r--src/plugins/find/findtoolwindow.h8
-rw-r--r--src/plugins/find/ifindfilter.h2
-rw-r--r--src/plugins/find/searchresultwidget.cpp23
-rw-r--r--src/plugins/find/searchresultwidget.h4
-rw-r--r--src/plugins/find/searchresultwindow.cpp34
-rw-r--r--src/plugins/find/searchresultwindow.h6
-rw-r--r--src/plugins/qmljseditor/qmljsfindreferences.cpp6
-rw-r--r--src/plugins/qmljseditor/qmljsfindreferences.h1
-rw-r--r--src/plugins/texteditor/basefilefind.cpp6
-rw-r--r--src/plugins/texteditor/basefilefind.h3
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 &macro)
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&amp;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 &amp;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>&amp;Case sensitive</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="wholeWords">
+ <property name="text">
+ <string>&amp;Whole words only</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="regExp">
+ <property name="text">
+ <string>Use regular e&amp;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&amp;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>&amp;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 &amp;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>&amp;Case sensitive</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="wholeWords">
- <property name="text">
- <string>&amp;Whole words only</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="regExp">
- <property name="text">
- <string>Use regular e&amp;xpressions</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="5" column="2">
+ <item>
<widget class="QPushButton" name="replaceButton">
<property name="text">
<string>Search &amp;&amp; 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);