From 2c25f5ed7a8061ae2eb30f0762c74aef5d69105a Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Wed, 14 Jul 2010 14:45:02 +0200 Subject: [PATCH] Add replace action. Replace the icons for replace with text-only. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also show "Replace", "Replace & Find" and "Replace All" in the tool bar, i.e. don't show the "Replace & Find Previous" in the tool bar to avoid it getting crowded. Reviewed-by: Thorbjørn Lindeijer --- src/plugins/bineditor/bineditorplugin.cpp | 2 ++ src/plugins/find/basetextfind.cpp | 18 ++++++++++++++-- src/plugins/find/basetextfind.h | 4 ++++ src/plugins/find/currentdocumentfind.cpp | 7 ++++++ src/plugins/find/currentdocumentfind.h | 2 ++ src/plugins/find/findtoolbar.cpp | 26 ++++++++++++++++++++--- src/plugins/find/findtoolbar.h | 2 ++ src/plugins/find/findwidget.ui | 18 +++++++++++++--- src/plugins/find/ifindsupport.h | 2 ++ src/plugins/find/searchresultwindow.cpp | 8 +++++++ src/plugins/find/textfindconstants.h | 1 + src/plugins/help/helpfindsupport.h | 4 ++++ 12 files changed, 86 insertions(+), 8 deletions(-) diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 0c5f6a46700..b7858db4f3c 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -154,6 +154,8 @@ public: return result; } + void replace(const QString &, const QString &, + Find::IFindSupport::FindFlags) { } bool replaceStep(const QString &, const QString &, Find::IFindSupport::FindFlags) { return false;} int replaceAll(const QString &, const QString &, diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp index 86dd69e33c6..80e30044cee 100644 --- a/src/plugins/find/basetextfind.cpp +++ b/src/plugins/find/basetextfind.cpp @@ -153,8 +153,15 @@ IFindSupport::Result BaseTextFind::findStep(const QString &txt, IFindSupport::Fi return found ? Found : NotFound; } -bool BaseTextFind::replaceStep(const QString &before, const QString &after, - IFindSupport::FindFlags findFlags) +void BaseTextFind::replace(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags) +{ + QTextCursor cursor = replaceInternal(before, after, findFlags); + setTextCursor(cursor); +} + +QTextCursor BaseTextFind::replaceInternal(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags) { QTextCursor cursor = textCursor(); bool usesRegExp = (findFlags & IFindSupport::FindRegularExpression); @@ -169,6 +176,13 @@ bool BaseTextFind::replaceStep(const QString &before, const QString &after, if ((findFlags&IFindSupport::FindBackward) != 0) cursor.setPosition(start); } + return cursor; +} + +bool BaseTextFind::replaceStep(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags) +{ + QTextCursor cursor = replaceInternal(before, after, findFlags); return find(before, findFlags, cursor); } diff --git a/src/plugins/find/basetextfind.h b/src/plugins/find/basetextfind.h index c62f5a7282e..e2bca511271 100644 --- a/src/plugins/find/basetextfind.h +++ b/src/plugins/find/basetextfind.h @@ -60,6 +60,8 @@ public: Result findIncremental(const QString &txt, IFindSupport::FindFlags findFlags); Result findStep(const QString &txt, IFindSupport::FindFlags findFlags); + void replace(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags); bool replaceStep(const QString &before, const QString &after, IFindSupport::FindFlags findFlags); int replaceAll(const QString &before, const QString &after, @@ -76,6 +78,8 @@ private: bool find(const QString &txt, IFindSupport::FindFlags findFlags, QTextCursor start); + QTextCursor replaceInternal(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags); QTextCursor textCursor() const; void setTextCursor(const QTextCursor&); diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp index 18c625b547f..d378823bcba 100644 --- a/src/plugins/find/currentdocumentfind.cpp +++ b/src/plugins/find/currentdocumentfind.cpp @@ -118,6 +118,13 @@ IFindSupport::Result CurrentDocumentFind::findStep(const QString &txt, IFindSupp return m_currentFind->findStep(txt, findFlags); } +void CurrentDocumentFind::replace(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags) +{ + QTC_ASSERT(m_currentFind, return); + m_currentFind->replace(before, after, findFlags); +} + bool CurrentDocumentFind::replaceStep(const QString &before, const QString &after, IFindSupport::FindFlags findFlags) { diff --git a/src/plugins/find/currentdocumentfind.h b/src/plugins/find/currentdocumentfind.h index f104ef5f4b1..f199854c53c 100644 --- a/src/plugins/find/currentdocumentfind.h +++ b/src/plugins/find/currentdocumentfind.h @@ -56,6 +56,8 @@ public: void highlightAll(const QString &txt, IFindSupport::FindFlags findFlags); IFindSupport::Result findIncremental(const QString &txt, IFindSupport::FindFlags findFlags); IFindSupport::Result findStep(const QString &txt, IFindSupport::FindFlags findFlags); + void replace(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags); bool replaceStep(const QString &before, const QString &after, IFindSupport::FindFlags findFlags); int replaceAll(const QString &before, const QString &after, diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp index 2dc93236832..2c1f8286453 100644 --- a/src/plugins/find/findtoolbar.cpp +++ b/src/plugins/find/findtoolbar.cpp @@ -71,7 +71,9 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen m_enterFindStringAction(0), m_findNextAction(0), m_findPreviousAction(0), + m_replaceAction(0), m_replaceNextAction(0), + m_replacePreviousAction(0), m_casesensitiveIcon(":/find/images/casesensitively.png"), m_regexpIcon(":/find/images/regexp.png"), m_wholewordsIcon(":/find/images/wholewords.png"), @@ -168,7 +170,15 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen connect(m_findPreviousAction, SIGNAL(triggered()), this, SLOT(invokeFindPrevious())); m_ui.findPreviousButton->setDefaultAction(cmd->action()); - m_replaceNextAction = new QAction(tr("Replace && Find Next"), this); + m_replaceAction = new QAction(tr("Replace"), this); + cmd = am->registerAction(m_replaceAction, Constants::REPLACE, globalcontext); + cmd->setDefaultKeySequence(QKeySequence()); + mfind->addAction(cmd, Constants::G_FIND_ACTIONS); + connect(m_replaceAction, SIGNAL(triggered()), this, SLOT(invokeReplace())); + m_ui.replaceButton->setDefaultAction(cmd->action()); + + m_replaceNextAction = new QAction(tr("Replace && Find"), this); + m_replaceNextAction->setIconText(tr("Replace && Find")); // work around bug in Qt that kills ampersands in tool button cmd = am->registerAction(m_replaceNextAction, Constants::REPLACE_NEXT, globalcontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+="))); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); @@ -181,7 +191,6 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen //cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Shift+="))); mfind->addAction(cmd, Constants::G_FIND_ACTIONS); connect(m_replacePreviousAction, SIGNAL(triggered()), this, SLOT(invokeReplacePrevious())); - m_ui.replacePreviousButton->setDefaultAction(cmd->action()); m_replaceAllAction = new QAction(tr("Replace All"), this); cmd = am->registerAction(m_replaceAllAction, Constants::REPLACE_ALL, globalcontext); @@ -315,6 +324,7 @@ void FindToolBar::updateToolBar() m_findNextAction->setEnabled(enabled); m_findPreviousAction->setEnabled(enabled); + m_replaceAction->setEnabled(replaceEnabled); m_replaceNextAction->setEnabled(replaceEnabled); m_replacePreviousAction->setEnabled(replaceEnabled); m_replaceAllAction->setEnabled(replaceEnabled); @@ -332,7 +342,7 @@ void FindToolBar::updateToolBar() m_ui.replaceLabel->setEnabled(replaceEnabled); m_ui.replaceEdit->setVisible(replaceEnabled); m_ui.replaceLabel->setVisible(replaceEnabled); - m_ui.replacePreviousButton->setVisible(replaceEnabled); + m_ui.replaceButton->setVisible(replaceEnabled); m_ui.replaceNextButton->setVisible(replaceEnabled); m_ui.replaceAllButton->setVisible(replaceEnabled); layout()->invalidate(); @@ -433,6 +443,16 @@ void FindToolBar::invokeFindIncremental() } } +void FindToolBar::invokeReplace() +{ + setFindFlag(IFindSupport::FindBackward, false); + if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) { + m_plugin->updateFindCompletion(getFindText()); + m_plugin->updateReplaceCompletion(getReplaceText()); + m_currentDocumentFind->replace(getFindText(), getReplaceText(), effectiveFindFlags()); + } +} + void FindToolBar::invokeReplaceNext() { setFindFlag(IFindSupport::FindBackward, false); diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h index ab8d8a4132f..92abe7e4750 100644 --- a/src/plugins/find/findtoolbar.h +++ b/src/plugins/find/findtoolbar.h @@ -67,6 +67,7 @@ private slots: void invokeFindNext(); void invokeFindPrevious(); void invokeFindStep(); + void invokeReplace(); void invokeReplaceNext(); void invokeReplacePrevious(); void invokeReplaceStep(); @@ -120,6 +121,7 @@ private: QAction *m_enterFindStringAction; QAction *m_findNextAction; QAction *m_findPreviousAction; + QAction *m_replaceAction; QAction *m_replaceNextAction; QAction *m_replacePreviousAction; QAction *m_replaceAllAction; diff --git a/src/plugins/find/findwidget.ui b/src/plugins/find/findwidget.ui index 0e9b1cafe7a..d5eb4556db7 100644 --- a/src/plugins/find/findwidget.ui +++ b/src/plugins/find/findwidget.ui @@ -100,7 +100,7 @@ </widget> </item> <item row="1" column="1"> - <widget class="Utils::FilterLineEdit" name="replaceEdit"/> + <widget class="Utils::FilterLineEdit" name="replaceEdit"/> </item> <item row="1" column="2"> <layout class="QHBoxLayout" name="horizontalLayout"> @@ -108,10 +108,16 @@ <number>3</number> </property> <item> - <widget class="QToolButton" name="replacePreviousButton"> + <widget class="QToolButton" name="replaceButton"> <property name="focusPolicy"> <enum>Qt::NoFocus</enum> </property> + <property name="text"> + <string>Replace</string> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextOnly</enum> + </property> <property name="arrowType"> <enum>Qt::LeftArrow</enum> </property> @@ -125,6 +131,12 @@ <property name="focusPolicy"> <enum>Qt::NoFocus</enum> </property> + <property name="text"> + <string>Replace && Find</string> + </property> + <property name="toolButtonStyle"> + <enum>Qt::ToolButtonTextOnly</enum> + </property> <property name="arrowType"> <enum>Qt::RightArrow</enum> </property> @@ -136,7 +148,7 @@ <font/> </property> <property name="text"> - <string>All</string> + <string>Replace All</string> </property> <property name="toolButtonStyle"> <enum>Qt::ToolButtonTextOnly</enum> diff --git a/src/plugins/find/ifindsupport.h b/src/plugins/find/ifindsupport.h index 3d7900f0510..e0293474bb1 100644 --- a/src/plugins/find/ifindsupport.h +++ b/src/plugins/find/ifindsupport.h @@ -65,6 +65,8 @@ public: virtual void highlightAll(const QString &txt, FindFlags findFlags); virtual Result findIncremental(const QString &txt, FindFlags findFlags) = 0; virtual Result findStep(const QString &txt, FindFlags findFlags) = 0; + virtual void replace(const QString &before, const QString &after, + FindFlags findFlags) = 0; virtual bool replaceStep(const QString &before, const QString &after, FindFlags findFlags) = 0; virtual int replaceAll(const QString &before, const QString &after, diff --git a/src/plugins/find/searchresultwindow.cpp b/src/plugins/find/searchresultwindow.cpp index 40ebf6f209d..f6566b5a776 100644 --- a/src/plugins/find/searchresultwindow.cpp +++ b/src/plugins/find/searchresultwindow.cpp @@ -160,6 +160,14 @@ namespace Internal { return IFindSupport::NotFound; } + void replace(const QString &before, const QString &after, + IFindSupport::FindFlags findFlags) + { + Q_UNUSED(before) + Q_UNUSED(after) + Q_UNUSED(findFlags) + } + bool replaceStep(const QString &before, const QString &after, IFindSupport::FindFlags findFlags) { diff --git a/src/plugins/find/textfindconstants.h b/src/plugins/find/textfindconstants.h index a5e56e22970..d1afe648224 100644 --- a/src/plugins/find/textfindconstants.h +++ b/src/plugins/find/textfindconstants.h @@ -45,6 +45,7 @@ const char * const FIND_IN_DOCUMENT = "Find.FindInCurrentDocument"; const char * const FIND_NEXT = "Find.FindNext"; const char * const FIND_PREVIOUS = "Find.FindPrevious"; const char * const FIND_ALL = "Find.FindAll"; +const char * const REPLACE = "Find.Replace"; const char * const REPLACE_NEXT = "Find.ReplaceNext"; const char * const REPLACE_PREVIOUS = "Find.ReplacePrevious"; const char * const REPLACE_ALL = "Find.ReplaceAll"; diff --git a/src/plugins/help/helpfindsupport.h b/src/plugins/help/helpfindsupport.h index 4292381b17c..f317f5aa9f7 100644 --- a/src/plugins/help/helpfindsupport.h +++ b/src/plugins/help/helpfindsupport.h @@ -58,6 +58,8 @@ public: Result findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags); Result findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags); + void replace(const QString &, const QString &, + Find::IFindSupport::FindFlags ) { } bool replaceStep(const QString &, const QString &, Find::IFindSupport::FindFlags ) { return false; } int replaceAll(const QString &, const QString &, @@ -85,6 +87,8 @@ public: Result findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags); Result findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags); + void replace(const QString &, const QString &, + Find::IFindSupport::FindFlags ) { } bool replaceStep(const QString &, const QString &, Find::IFindSupport::FindFlags ) { return false; } int replaceAll(const QString &, const QString &, -- GitLab