Find: Remember the find flags per completer entry

Replace the QStringListModel used by the completer
by a special model storing a struct of the text and find flags.
On activating the completer, the flags are applied.

Change-Id: I05031641647692196ce60dcad36fc8970131f516
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Friedemann Kleint
2017-12-20 16:40:45 +01:00
parent b3dd52b30f
commit 91530a3e0c
6 changed files with 151 additions and 18 deletions

View File

@@ -116,6 +116,9 @@ FindToolBar::FindToolBar(CurrentDocumentFind *currentDocumentFind)
this, &FindToolBar::invokeFindEnter, Qt::QueuedConnection);
connect(m_ui.replaceEdit, &Utils::FancyLineEdit::returnPressed,
this, &FindToolBar::invokeReplaceEnter, Qt::QueuedConnection);
connect(m_findCompleter,
static_cast<void (QCompleter::*)(const QModelIndex &)>(&QCompleter::activated),
this, &FindToolBar::findCompleterActivated);
QAction *shiftEnterAction = new QAction(m_ui.findEdit);
shiftEnterAction->setShortcut(QKeySequence(tr("Shift+Enter")));
@@ -313,6 +316,17 @@ FindToolBar::~FindToolBar()
{
}
void FindToolBar::findCompleterActivated(const QModelIndex &index)
{
const int findFlagsI = index.data(Find::CompletionModelFindFlagsRole).toInt();
const FindFlags findFlags(findFlagsI);
setFindFlag(FindCaseSensitively, findFlags.testFlag(FindCaseSensitively));
setFindFlag(FindBackward, findFlags.testFlag(FindBackward));
setFindFlag(FindWholeWords, findFlags.testFlag(FindWholeWords));
setFindFlag(FindRegularExpression, findFlags.testFlag(FindRegularExpression));
setFindFlag(FindPreserveCase, findFlags.testFlag(FindPreserveCase));
}
void FindToolBar::installEventFilters()
{
if (!m_eventFiltersInstalled) {
@@ -527,9 +541,10 @@ void FindToolBar::invokeFindStep()
m_findStepTimer.stop();
m_findIncrementalTimer.stop();
if (m_currentDocumentFind->isEnabled()) {
Find::updateFindCompletion(getFindText());
const FindFlags ef = effectiveFindFlags();
Find::updateFindCompletion(getFindText(), ef);
IFindSupport::Result result =
m_currentDocumentFind->findStep(getFindText(), effectiveFindFlags());
m_currentDocumentFind->findStep(getFindText(), ef);
indicateSearchState(result);
if (result == IFindSupport::NotYetFound)
m_findStepTimer.start(50);
@@ -556,9 +571,10 @@ void FindToolBar::invokeReplace()
{
setFindFlag(FindBackward, false);
if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
Find::updateFindCompletion(getFindText());
const FindFlags ef = effectiveFindFlags();
Find::updateFindCompletion(getFindText(), ef);
Find::updateReplaceCompletion(getReplaceText());
m_currentDocumentFind->replace(getFindText(), getReplaceText(), effectiveFindFlags());
m_currentDocumentFind->replace(getFindText(), getReplaceText(), ef);
}
}
@@ -595,18 +611,20 @@ void FindToolBar::invokeGlobalReplacePrevious()
void FindToolBar::invokeReplaceStep()
{
if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
Find::updateFindCompletion(getFindText());
const FindFlags ef = effectiveFindFlags();
Find::updateFindCompletion(getFindText(), ef);
Find::updateReplaceCompletion(getReplaceText());
m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), effectiveFindFlags());
m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), ef);
}
}
void FindToolBar::invokeReplaceAll()
{
Find::updateFindCompletion(getFindText());
const FindFlags ef = effectiveFindFlags();
Find::updateFindCompletion(getFindText(), ef);
Find::updateReplaceCompletion(getReplaceText());
if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace())
m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), effectiveFindFlags());
m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), ef);
}
void FindToolBar::invokeGlobalReplaceAll()