diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 0c5f6a46700042373bf0e7bb8f1af05730d1728f..b7858db4f3c350fd39930c23b904c4ab96a7ef94 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 86dd69e33c666b81a218ffdfe58b3efd805403d2..80e30044cee21f049c431fdcfbab6de74ca55685 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 c62f5a7282e3f07405d0d983540414146ff8f1e7..e2bca5112714eab1e259f4bf4757f04c766d2881 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 18c625b547fa9c35f23648c2454ee527f0a06822..d378823bcba6801a65efbe552228df2f685d7d7c 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 f104ef5f4b18ff0d5355ce6ad833e447660e88aa..f199854c53c0c4ff3827b22e29cd7665dbc5f592 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 2dc9323683241e23751d6e565044cb972b884981..2c1f8286453fe7f9571558ed279d1578fc6063e5 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 ab8d8a4132fd4b3658539b9f1f229ccf2a82bfa8..92abe7e4750b452d15557f5bbcbd8a93922168ea 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 0e9b1cafe7a1d3552e787ee0c3cf38530bf19be4..d5eb4556db762e92c8123dc75f1e042c860bb533 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 3d7900f0510e990523fc8e2ce5d628e386b70996..e0293474bb1bcc74a01977e51390d23e0f951874 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 40ebf6f209d6dc3c85c8b00990d2a9a02eafff39..f6566b5a776404b87513e6ba25c3f3a5c5c5ace8 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 a5e56e2297041b742690ccb7077b0d3cf21eba3f..d1afe6482241ab608531786c89e96cb023394375 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 4292381b17c12c225cdc33d096359e8a4d54f577..f317f5aa9f7a6824695cff8e894ae1be546068e7 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 &,