diff options
author | con <qtc-committer@nokia.com> | 2010-07-14 14:45:02 +0200 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2010-07-14 14:45:18 +0200 |
commit | 2c25f5ed7a8061ae2eb30f0762c74aef5d69105a (patch) | |
tree | 8b92e014420b59a1be297a1ca2e487f114135b38 /src/plugins/find | |
parent | 352b491c87aba787fa1e87d04ea79c282f5b843d (diff) | |
download | qt-creator-2c25f5ed7a8061ae2eb30f0762c74aef5d69105a.tar.gz |
Add replace action. Replace the icons for replace with text-only.
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
Diffstat (limited to 'src/plugins/find')
-rw-r--r-- | src/plugins/find/basetextfind.cpp | 18 | ||||
-rw-r--r-- | src/plugins/find/basetextfind.h | 4 | ||||
-rw-r--r-- | src/plugins/find/currentdocumentfind.cpp | 7 | ||||
-rw-r--r-- | src/plugins/find/currentdocumentfind.h | 2 | ||||
-rw-r--r-- | src/plugins/find/findtoolbar.cpp | 26 | ||||
-rw-r--r-- | src/plugins/find/findtoolbar.h | 2 | ||||
-rw-r--r-- | src/plugins/find/findwidget.ui | 18 | ||||
-rw-r--r-- | src/plugins/find/ifindsupport.h | 2 | ||||
-rw-r--r-- | src/plugins/find/searchresultwindow.cpp | 8 | ||||
-rw-r--r-- | src/plugins/find/textfindconstants.h | 1 |
10 files changed, 80 insertions, 8 deletions
diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp index 86dd69e33c..80e30044ce 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 c62f5a7282..e2bca51127 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 18c625b547..d378823bcb 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 f104ef5f4b..f199854c53 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 2dc9323683..2c1f828645 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 ab8d8a4132..92abe7e475 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 0e9b1cafe7..d5eb4556db 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 3d7900f051..e0293474bb 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 40ebf6f209..f6566b5a77 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 a5e56e2297..d1afe64822 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"; |