From e38cec518b7481a77b909dac0aaef33cea2e543e Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Mon, 13 Jul 2009 14:48:45 +0200 Subject: [PATCH] Find implementations now tell what find flags are actually supported. --- src/plugins/bineditor/bineditorplugin.cpp | 5 ++++ src/plugins/find/basetextfind.cpp | 6 ++++ src/plugins/find/basetextfind.h | 1 + src/plugins/find/currentdocumentfind.cpp | 6 ++++ src/plugins/find/currentdocumentfind.h | 1 + src/plugins/find/findtoolbar.cpp | 36 +++++++++++++++++------ src/plugins/find/findtoolbar.h | 1 + src/plugins/find/ifindsupport.h | 1 + src/plugins/help/helpfindsupport.cpp | 12 ++++++++ src/plugins/help/helpfindsupport.h | 3 ++ 10 files changed, 63 insertions(+), 9 deletions(-) diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index fab5586963b..99a1b286819 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 4f055e12a24..da3c1de3d9d 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 f0718738ccc..bad6e4d8c8d 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 f9e57e1e4a5..dbd9071240d 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 59d734dcd23..eb8bdf38e0c 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 49fcd0d9258..8b7a4bb6af0 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 44e96b6ad0f..4b85c1a9e83 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 977dc831687..c61ab3bda0e 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 80f3f17baa0..abc7e2d239c 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 789c15a77dd..ce57be8acb0 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; -- GitLab