diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index fab5586963b72f14cd22428cd14b26563ca10dfb..99a1b2868193a701c550f9f6687ede8041ee639b 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -63,6 +63,11 @@ public: ~BinEditorFind() {} bool supportsReplace() const { return false; } + IFindSupport::FindFlags supportedFindFlags() const + { + return IFindSupport::FindBackward | IFindSupport::FindCaseSensitively; + } + void resetIncrementalSearch() { m_incrementalStartPos = -1; } void clearResults() { m_editor->highlightSearchResults(QByteArray()); } QString currentFindString() const { return QString(); } diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp index 4f055e12a245c7bade78e74ab15a9ab6b8ee8b0d..da3c1de3d9d0170d2feeea622b2ff13739ba6b9a 100644 --- a/src/plugins/find/basetextfind.cpp +++ b/src/plugins/find/basetextfind.cpp @@ -75,6 +75,12 @@ bool BaseTextFind::supportsReplace() const return !isReadOnly(); } +IFindSupport::FindFlags BaseTextFind::supportedFindFlags() const +{ + return IFindSupport::FindBackward | IFindSupport::FindCaseSensitively + | IFindSupport::FindRegularExpression | IFindSupport::FindWholeWords; +} + void BaseTextFind::resetIncrementalSearch() { m_incrementalStartPos = -1; diff --git a/src/plugins/find/basetextfind.h b/src/plugins/find/basetextfind.h index f0718738cccfe9ba560d55dd4886e15c17770304..bad6e4d8c8d437a5b54f3ae838f1679200dfb1a0 100644 --- a/src/plugins/find/basetextfind.h +++ b/src/plugins/find/basetextfind.h @@ -47,6 +47,7 @@ public: BaseTextFind(QTextEdit *editor); bool supportsReplace() const; + IFindSupport::FindFlags supportedFindFlags() const; void resetIncrementalSearch(); void clearResults(); QString currentFindString() const; diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp index f9e57e1e4a54df0d5a987f8ba028eb50ed5a82c7..dbd9071240d40e5993489b7b9eec07208744dbab 100644 --- a/src/plugins/find/currentdocumentfind.cpp +++ b/src/plugins/find/currentdocumentfind.cpp @@ -77,6 +77,12 @@ bool CurrentDocumentFind::supportsReplace() const return m_currentFind->supportsReplace(); } +IFindSupport::FindFlags CurrentDocumentFind::supportedFindFlags() const +{ + QTC_ASSERT(m_currentFind, return 0); + return m_currentFind->supportedFindFlags(); +} + QString CurrentDocumentFind::currentFindString() const { QTC_ASSERT(m_currentFind, return QString()); diff --git a/src/plugins/find/currentdocumentfind.h b/src/plugins/find/currentdocumentfind.h index 59d734dcd23e495aa9d9a46773ddcb0bf3a4e248..eb8bdf38e0c2782817b0b17f018186427392eea8 100644 --- a/src/plugins/find/currentdocumentfind.h +++ b/src/plugins/find/currentdocumentfind.h @@ -48,6 +48,7 @@ public: void resetIncrementalSearch(); void clearResults(); bool supportsReplace() const; + IFindSupport::FindFlags supportedFindFlags() const; QString currentFindString() const; QString completedFindString() const; diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp index 49fcd0d9258bff9d6e30effb330e97d301784487..8b7a4bb6af0949429c197a2a3673de99f8107a6b 100644 --- a/src/plugins/find/findtoolbar.cpp +++ b/src/plugins/find/findtoolbar.cpp @@ -228,7 +228,6 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateActions())); updateActions(); - updateIcons(); } FindToolBar::~FindToolBar() @@ -300,6 +299,8 @@ void FindToolBar::updateActions() m_ui.replaceLabel->setEnabled(replaceEnabled); if (!replaceEnabled && enabled && replaceFocus) m_ui.findEdit->setFocus(); + updateIcons(); + updateFlagMenus(); } void FindToolBar::invokeFindEnter() @@ -365,7 +366,7 @@ void FindToolBar::invokeFindStep() { if (m_currentDocumentFind->isEnabled()) { m_plugin->updateFindCompletion(getFindText()); - m_currentDocumentFind->findStep(getFindText(), m_findFlags); + m_currentDocumentFind->findStep(getFindText(), effectiveFindFlags()); } } @@ -373,7 +374,7 @@ void FindToolBar::invokeFindIncremental() { if (m_currentDocumentFind->isEnabled()) { QString text = getFindText(); - m_currentDocumentFind->findIncremental(text, m_findFlags); + m_currentDocumentFind->findIncremental(text, effectiveFindFlags()); if (text.isEmpty()) m_currentDocumentFind->clearResults(); } @@ -396,7 +397,7 @@ void FindToolBar::invokeReplaceStep() if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) { m_plugin->updateFindCompletion(getFindText()); m_plugin->updateReplaceCompletion(getReplaceText()); - m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), m_findFlags); + m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), effectiveFindFlags()); } } @@ -405,7 +406,7 @@ void FindToolBar::invokeReplaceAll() m_plugin->updateFindCompletion(getFindText()); m_plugin->updateReplaceCompletion(getReplaceText()); if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) { - m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), m_findFlags); + m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), effectiveFindFlags()); } } @@ -442,9 +443,10 @@ void FindToolBar::findFlagsChanged() void FindToolBar::updateIcons() { - bool casesensitive = m_findFlags & IFindSupport::FindCaseSensitively; - bool wholewords = m_findFlags & IFindSupport::FindWholeWords; - bool regexp = m_findFlags & IFindSupport::FindRegularExpression; + IFindSupport::FindFlags effectiveFlags = effectiveFindFlags(); + bool casesensitive = effectiveFlags & IFindSupport::FindCaseSensitively; + bool wholewords = effectiveFlags & IFindSupport::FindWholeWords; + bool regexp = effectiveFlags & IFindSupport::FindRegularExpression; QPixmap pixmap(17, 17); QPainter painter(&pixmap); painter.eraseRect(0, 0, 17, 17); @@ -468,6 +470,16 @@ void FindToolBar::updateIcons() m_ui.findEdit->setPixmap(pixmap); } +IFindSupport::FindFlags FindToolBar::effectiveFindFlags() +{ + IFindSupport::FindFlags supportedFlags; + if (m_currentDocumentFind->isEnabled()) + supportedFlags = m_currentDocumentFind->supportedFindFlags(); + else + supportedFlags = (IFindSupport::FindFlags)0xFFFFFF; + return supportedFlags & m_findFlags; +} + void FindToolBar::updateFlagMenus() { bool wholeOnly = ((m_findFlags & IFindSupport::FindWholeWords)); @@ -479,6 +491,12 @@ void FindToolBar::updateFlagMenus() m_caseSensitiveAction->setChecked(sensitive); if (m_regularExpressionAction->isChecked() != regexp) m_regularExpressionAction->setChecked(regexp); + IFindSupport::FindFlags supportedFlags; + if (m_currentDocumentFind->isEnabled()) + supportedFlags = m_currentDocumentFind->supportedFindFlags(); + m_wholeWordAction->setEnabled(supportedFlags & IFindSupport::FindWholeWords); + m_caseSensitiveAction->setEnabled(supportedFlags & IFindSupport::FindCaseSensitively); + m_regularExpressionAction->setEnabled(supportedFlags & IFindSupport::FindRegularExpression); } bool FindToolBar::setFocusToCurrentFindSupport() @@ -509,7 +527,7 @@ void FindToolBar::openFind() if (!text.isEmpty()) setFindText(text); m_currentDocumentFind->defineFindScope(); - m_currentDocumentFind->highlightAll(getFindText(), m_findFlags); + m_currentDocumentFind->highlightAll(getFindText(), effectiveFindFlags()); selectFindText(); } diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h index 44e96b6ad0fc10c4a4183fcd8c1fb6f86ea17a4c..4b85c1a9e831580fd2eb2c5c95d99531e933b886 100644 --- a/src/plugins/find/findtoolbar.h +++ b/src/plugins/find/findtoolbar.h @@ -88,6 +88,7 @@ private: bool setFocusToCurrentFindSupport(); void setFindFlag(IFindSupport::FindFlag flag, bool enabled); bool hasFindFlag(IFindSupport::FindFlag flag); + IFindSupport::FindFlags effectiveFindFlags(); bool eventFilter(QObject *obj, QEvent *event); void setFindText(const QString &text); diff --git a/src/plugins/find/ifindsupport.h b/src/plugins/find/ifindsupport.h index 977dc831687fd124668892c6be46c2e29f9a8d0e..c61ab3bda0e21abc162eef374a9b6400494d2aeb 100644 --- a/src/plugins/find/ifindsupport.h +++ b/src/plugins/find/ifindsupport.h @@ -54,6 +54,7 @@ public: virtual ~IFindSupport() {} virtual bool supportsReplace() const = 0; + virtual FindFlags supportedFindFlags() const = 0; virtual void resetIncrementalSearch() = 0; virtual void clearResults() = 0; virtual QString currentFindString() const = 0; diff --git a/src/plugins/help/helpfindsupport.cpp b/src/plugins/help/helpfindsupport.cpp index 80f3f17baa06d4131bd0b5d1abe55c566e0562fa..abc7e2d239c7dd3d44a49e98582e0ec1fb3fcf5c 100644 --- a/src/plugins/help/helpfindsupport.cpp +++ b/src/plugins/help/helpfindsupport.cpp @@ -48,6 +48,12 @@ bool HelpFindSupport::isEnabled() const return true; } +Find::IFindSupport::FindFlags HelpFindSupport::supportedFindFlags() const +{ + return Find::IFindSupport::FindBackward | Find::IFindSupport::FindCaseSensitively + | Find::IFindSupport::FindWholeWords; +} + QString HelpFindSupport::currentFindString() const { QTC_ASSERT(m_centralWidget, return QString()); @@ -84,6 +90,12 @@ HelpViewerFindSupport::HelpViewerFindSupport(HelpViewer *viewer) { } +Find::IFindSupport::FindFlags HelpViewerFindSupport::supportedFindFlags() const +{ + return Find::IFindSupport::FindBackward | Find::IFindSupport::FindCaseSensitively + | Find::IFindSupport::FindWholeWords; +} + QString HelpViewerFindSupport::currentFindString() const { QTC_ASSERT(m_viewer, return QString()); diff --git a/src/plugins/help/helpfindsupport.h b/src/plugins/help/helpfindsupport.h index 789c15a77dd5711b20fd0d68ccef5c0998085fe1..ce57be8acb0359a6e39ba3b573d3acd6c53eb609 100644 --- a/src/plugins/help/helpfindsupport.h +++ b/src/plugins/help/helpfindsupport.h @@ -50,6 +50,8 @@ public: bool isEnabled() const; bool supportsReplace() const { return false; } + IFindSupport::FindFlags supportedFindFlags() const; + void resetIncrementalSearch() {} void clearResults() {} QString currentFindString() const; @@ -76,6 +78,7 @@ public: bool isEnabled() const { return true; } bool supportsReplace() const { return false; } + IFindSupport::FindFlags supportedFindFlags() const; void resetIncrementalSearch() {} void clearResults() {} QString currentFindString() const;