FindFilter: Move settings saving to Store

This makes it possible to save it for the session instead/in addition.

Task-number: QTCREATORBUG-793
Change-Id: I95bc20f4912a97863cb88849e32699a689ba6f3f
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2024-05-27 15:53:07 +02:00
parent c3a1b41fb3
commit f870e7ffdf
18 changed files with 216 additions and 122 deletions

View File

@@ -6,6 +6,8 @@
#include "../coreicons.h"
#include "../coreplugintr.h"
#include <utils/qtcsettings.h>
#include <QApplication>
#include <QKeySequence>
#include <QPainter>
@@ -177,18 +179,6 @@ using namespace Utils;
dialog. It will be reparented and deleted by the find plugin.
*/
/*!
\fn void Core::IFindFilter::writeSettings(Utils::QtcSettings *settings)
Called at shutdown to write the state of the additional options
for this find filter to the \a settings.
*/
/*!
\fn void Core::IFindFilter::readSettings(Utils::QtcSettings *settings)
Called at startup to read the state of the additional options
for this find filter from the \a settings.
*/
/*!
\fn void Core::IFindFilter::enabledChanged(bool enabled)
@@ -264,6 +254,60 @@ FindFlags IFindFilter::supportedFindFlags() const
| FindWholeWords;
}
/*!
Returns a Store with the find filter's settings to store
in the session. Default values should not be saved.
The default implementation returns an empty store.
\sa restore()
*/
Store IFindFilter::save() const
{
return {};
}
/*!
Restores the find filter's settings from the Store \a s.
Settings that are not present in the store should be reset to
the default.
The default implementation does nothing.
\sa save()
*/
void IFindFilter::restore([[maybe_unused]] const Utils::Store &s) {}
/*!
Called at shutdown to write the state of the additional options
for this find filter to the \a settings.
\deprecated [14.0] Implement save() instead.
*/
void IFindFilter::writeSettings(Utils::QtcSettings *settings)
{
settings->remove(settingsKey()); // make sure defaults are removed
storeToSettings(settingsKey(), settings, save());
}
/*!
Called at startup to read the state of the additional options
for this find filter from the \a settings.
\deprecated [14.0] Implement restore() instead.
*/
void IFindFilter::readSettings(Utils::QtcSettings *settings)
{
restore(storeFromSettings(settingsKey(), settings));
}
/*!
\internal
\deprecated [14.0]
*/
QByteArray IFindFilter::settingsKey() const
{
return id().toUtf8();
}
/*!
Returns icons for the find flags \a flags.
*/

View File

@@ -6,6 +6,7 @@
#include "../core_global.h"
#include <utils/filesearch.h>
#include <utils/store.h>
QT_BEGIN_NAMESPACE
class QWidget;
@@ -42,8 +43,13 @@ public:
{ Q_UNUSED(txt) Q_UNUSED(findFlags) }
virtual QWidget *createConfigWidget() { return nullptr; }
virtual void writeSettings(Utils::QtcSettings *settings) { Q_UNUSED(settings) }
virtual void readSettings(Utils::QtcSettings *settings) { Q_UNUSED(settings) }
virtual Utils::Store save() const;
virtual void restore(const Utils::Store &s);
// deprecated in 14.0
virtual void writeSettings(Utils::QtcSettings *settings);
virtual void readSettings(Utils::QtcSettings *settings);
virtual QByteArray settingsKey() const;
static QPixmap pixmapForFindFlags(Utils::FindFlags flags);
static QString descriptionForFindFlags(Utils::FindFlags flags);

View File

@@ -166,26 +166,28 @@ QWidget *SymbolsFindFilter::createConfigWidget()
return new SymbolsFindFilterConfigWidget(this);
}
void SymbolsFindFilter::writeSettings(QtcSettings *settings)
Store SymbolsFindFilter::save() const
{
settings->beginGroup(SETTINGS_GROUP);
settings->setValue(SETTINGS_SYMBOLTYPES, int(m_symbolsToSearch));
settings->setValue(SETTINGS_SEARCHSCOPE, int(m_scope));
settings->endGroup();
Store s;
s.insert(SETTINGS_SYMBOLTYPES, int(m_symbolsToSearch));
s.insert(SETTINGS_SEARCHSCOPE, int(m_scope));
return s;
}
void SymbolsFindFilter::readSettings(QtcSettings *settings)
void SymbolsFindFilter::restore(const Utils::Store &s)
{
settings->beginGroup(SETTINGS_GROUP);
m_symbolsToSearch = static_cast<SearchSymbols::SymbolTypes>(
settings->value(SETTINGS_SYMBOLTYPES, int(SearchSymbols::AllTypes)).toInt());
s.value(SETTINGS_SYMBOLTYPES, int(SearchSymbols::AllTypes)).toInt());
m_scope = static_cast<SearchScope>(
settings->value(SETTINGS_SEARCHSCOPE,
int(SymbolSearcher::SearchProjectsOnly)).toInt());
settings->endGroup();
s.value(SETTINGS_SEARCHSCOPE, int(SymbolSearcher::SearchProjectsOnly)).toInt());
emit symbolsToSearchChanged();
}
QByteArray SymbolsFindFilter::settingsKey() const
{
return SETTINGS_GROUP;
}
void SymbolsFindFilter::onTaskStarted(Id type)
{
if (type == Constants::TASK_INDEX) {

View File

@@ -37,8 +37,8 @@ public:
void findAll(const QString &txt, Utils::FindFlags findFlags) override;
QWidget *createConfigWidget() override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
Utils::Store save() const override;
void restore(const Utils::Store &s) override;
void setSymbolsToSearch(const SearchSymbols::SymbolTypes &types) { m_symbolsToSearch = types; }
SearchSymbols::SymbolTypes symbolsToSearch() const { return m_symbolsToSearch; }
@@ -46,6 +46,9 @@ public:
void setSearchScope(SearchScope scope) { m_scope = scope; }
SearchScope searchScope() const { return m_scope; }
// deprecated
QByteArray settingsKey() const override;
signals:
void symbolsToSearchChanged();

View File

@@ -245,14 +245,15 @@ GitGrepParameters GitGrep::gitParameters() const
return {m_treeLineEdit->text(), m_recurseSubmodules && m_recurseSubmodules->isChecked()};
}
void GitGrep::readSettings(QtcSettings *settings)
void GitGrep::readSettings(const Store &s)
{
m_treeLineEdit->setText(settings->value(GitGrepRef).toString());
m_treeLineEdit->setText(s.value(GitGrepRef).toString());
}
void GitGrep::writeSettings(QtcSettings *settings) const
void GitGrep::writeSettings(Store &s) const
{
settings->setValue(GitGrepRef, m_treeLineEdit->text());
if (!m_treeLineEdit->text().isEmpty())
s.insert(GitGrepRef, m_treeLineEdit->text());
}
SearchExecutor GitGrep::searchExecutor() const

View File

@@ -24,8 +24,8 @@ public:
QString title() const override;
QString toolTip() const override;
QWidget *widget() const override;
void readSettings(Utils::QtcSettings *settings) override;
void writeSettings(Utils::QtcSettings *settings) const override;
void readSettings(const Utils::Store &settings) override;
void writeSettings(Utils::Store &settings) const override;
TextEditor::SearchExecutor searchExecutor() const override;
TextEditor::EditorOpener editorOpener() const override;

View File

@@ -113,16 +113,19 @@ QWidget *AllProjectsFind::createConfigWidget()
return m_configWidget;
}
void AllProjectsFind::writeSettings(QtcSettings *settings)
Store AllProjectsFind::save() const
{
settings->beginGroup("AllProjectsFind");
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void AllProjectsFind::readSettings(QtcSettings *settings)
void AllProjectsFind::restore(const Utils::Store &s)
{
settings->beginGroup("AllProjectsFind");
readCommonSettings(settings, "*", "");
settings->endGroup();
readCommonSettings(s, "*", "");
}
QByteArray AllProjectsFind::settingsKey() const
{
return "AllProjectsFind";
}

View File

@@ -26,8 +26,12 @@ public:
bool isEnabled() const override;
QWidget *createConfigWidget() override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
Utils::Store save() const override;
void restore(const Utils::Store &s) override;
// deprecated
QByteArray settingsKey() const override;
protected:
static Utils::FileContainer filesForProjects(const QStringList &nameFilters,

View File

@@ -29,8 +29,11 @@ private:
bool isEnabled() const final;
void writeSettings(Utils::QtcSettings *settings) final;
void readSettings(Utils::QtcSettings *settings) final;
Utils::Store save() const final;
void restore(const Utils::Store &s) final;
// deprecated
QByteArray settingsKey() const final;
QString label() const final;
@@ -115,18 +118,21 @@ void CurrentProjectFind::setupSearch(Core::SearchResult *search)
});
}
void CurrentProjectFind::writeSettings(QtcSettings *settings)
Store CurrentProjectFind::save() const
{
settings->beginGroup("CurrentProjectFind");
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void CurrentProjectFind::readSettings(QtcSettings *settings)
void CurrentProjectFind::restore(const Store &s)
{
settings->beginGroup("CurrentProjectFind");
readCommonSettings(settings, "*", "");
settings->endGroup();
readCommonSettings(s, "*", "");
}
QByteArray CurrentProjectFind::settingsKey() const
{
return "CurrentProjectFind";
}
void setupCurrentProjectFind()

View File

@@ -30,21 +30,24 @@ QString FilesInAllProjectsFind::displayName() const
const char kSettingsKey[] = "FilesInAllProjectDirectories";
void FilesInAllProjectsFind::writeSettings(QtcSettings *settings)
Store FilesInAllProjectsFind::save() const
{
settings->beginGroup(kSettingsKey);
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void FilesInAllProjectsFind::readSettings(QtcSettings *settings)
void FilesInAllProjectsFind::restore(const Utils::Store &s)
{
settings->beginGroup(kSettingsKey);
readCommonSettings(
settings,
s,
"CMakeLists.txt,*.cmake,*.pro,*.pri,*.qbs,*.cpp,*.h,*.mm,*.qml,*.md,*.txt,*.qdoc",
"*/.git/*,*/.cvs/*,*/.svn/*,*.autosave,*/build/*");
settings->endGroup();
}
QByteArray FilesInAllProjectsFind::settingsKey() const
{
return kSettingsKey;
}
FileContainerProvider FilesInAllProjectsFind::fileContainerProvider() const

View File

@@ -16,8 +16,11 @@ public:
QString id() const override;
QString displayName() const override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
Utils::Store save() const override;
void restore(const Utils::Store &s) override;
// deprecated
QByteArray settingsKey() const override;
protected:
TextEditor::FileContainerProvider fileContainerProvider() const override;

View File

@@ -128,14 +128,15 @@ public:
QString toolTip() const final { return {}; }
QWidget *widget() const final { return m_widget; }
void readSettings(QtcSettings *settings) final
void readSettings(const Store &s) final
{
m_searchOptionsLineEdit->setText(settings->value(s_searchOptionsString).toString());
m_searchOptionsLineEdit->setText(s.value(s_searchOptionsString).toString());
}
void writeSettings(QtcSettings *settings) const final
void writeSettings(Store &s) const final
{
settings->setValue(s_searchOptionsString, m_searchOptionsLineEdit->text());
if (!m_searchOptionsLineEdit->text().isEmpty())
s.insert(s_searchOptionsString, m_searchOptionsLineEdit->text());
}
SearchExecutor searchExecutor() const final

View File

@@ -139,8 +139,8 @@ public:
QString title() const override { return Tr::tr("Internal"); }
QString toolTip() const override { return {}; }
QWidget *widget() const override { return m_widget; }
void readSettings(QtcSettings * /*settings*/) override {}
void writeSettings(QtcSettings * /*settings*/) const override {}
void readSettings(const Store &) override {}
void writeSettings(Store &) const override {}
SearchExecutor searchExecutor() const override
{
return [](const FileFindParameters &parameters) {
@@ -442,47 +442,48 @@ FilePath BaseFileFind::searchDir() const
return d->m_searchDir;
}
void BaseFileFind::writeCommonSettings(QtcSettings *settings)
void BaseFileFind::writeCommonSettings(Store &s) const
{
const auto fromNativeSeparators = [](const QStringList &files) -> QStringList {
return Utils::transform(files, &QDir::fromNativeSeparators);
};
settings->setValue("filters", fromNativeSeparators(d->m_filterStrings.stringList()));
s.insert("filters", fromNativeSeparators(d->m_filterStrings.stringList()));
if (d->m_filterCombo)
settings->setValue("currentFilter",
QDir::fromNativeSeparators(d->m_filterCombo->currentText()));
settings->setValue("exclusionFilters", fromNativeSeparators(d->m_exclusionStrings.stringList()));
if (d->m_exclusionCombo)
settings->setValue("currentExclusionFilter",
QDir::fromNativeSeparators(d->m_exclusionCombo->currentText()));
s.insert("currentFilter", QDir::fromNativeSeparators(d->m_filterCombo->currentText()));
s.insert("exclusionFilters", fromNativeSeparators(d->m_exclusionStrings.stringList()));
if (d->m_exclusionCombo) {
s.insert(
"currentExclusionFilter",
QDir::fromNativeSeparators(d->m_exclusionCombo->currentText()));
}
for (const SearchEngine *searchEngine : std::as_const(d->m_searchEngines))
searchEngine->writeSettings(settings);
settings->setValue("currentSearchEngineIndex", d->m_currentSearchEngineIndex);
searchEngine->writeSettings(s);
s.insert("currentSearchEngineIndex", d->m_currentSearchEngineIndex);
}
void BaseFileFind::readCommonSettings(QtcSettings *settings, const QString &defaultFilter,
const QString &defaultExclusionFilter)
void BaseFileFind::readCommonSettings(
const Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter)
{
const auto toNativeSeparators = [](const QStringList &files) -> QStringList {
return Utils::transform(files, &QDir::toNativeSeparators);
};
const QStringList filterSetting = settings->value("filters").toStringList();
const QStringList filterSetting = s.value("filters").toStringList();
const QStringList filters = filterSetting.isEmpty() ? QStringList(defaultFilter)
: filterSetting;
const QVariant currentFilter = settings->value("currentFilter");
const QVariant currentFilter = s.value("currentFilter");
d->m_filterSetting = currentFilter.isValid() ? currentFilter.toString()
: filters.first();
d->m_filterStrings.setStringList(toNativeSeparators(filters));
if (d->m_filterCombo)
syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
QStringList exclusionFilters = settings->value("exclusionFilters").toStringList();
QStringList exclusionFilters = s.value("exclusionFilters").toStringList();
if (!exclusionFilters.contains(defaultExclusionFilter))
exclusionFilters << defaultExclusionFilter;
const QVariant currentExclusionFilter = settings->value("currentExclusionFilter");
const QVariant currentExclusionFilter = s.value("currentExclusionFilter");
d->m_exclusionSetting = currentExclusionFilter.isValid() ? currentExclusionFilter.toString()
: exclusionFilters.first();
d->m_exclusionStrings.setStringList(toNativeSeparators(exclusionFilters));
@@ -490,8 +491,8 @@ void BaseFileFind::readCommonSettings(QtcSettings *settings, const QString &defa
syncComboWithSettings(d->m_exclusionCombo, d->m_exclusionSetting);
for (SearchEngine* searchEngine : std::as_const(d->m_searchEngines))
searchEngine->readSettings(settings);
const int currentSearchEngineIndex = settings->value("currentSearchEngineIndex", 0).toInt();
searchEngine->readSettings(s);
const int currentSearchEngineIndex = s.value("currentSearchEngineIndex", 0).toInt();
syncSearchEngineCombo(currentSearchEngineIndex);
}

View File

@@ -69,8 +69,8 @@ public:
virtual QString title() const = 0;
virtual QString toolTip() const = 0; // add %1 placeholder where the find flags should be put
virtual QWidget *widget() const = 0;
virtual void readSettings(Utils::QtcSettings *settings) = 0;
virtual void writeSettings(Utils::QtcSettings *settings) const = 0;
virtual void readSettings(const Utils::Store &s) = 0;
virtual void writeSettings(Utils::Store &settings) const = 0;
virtual SearchExecutor searchExecutor() const = 0;
virtual EditorOpener editorOpener() const { return {}; }
bool isEnabled() const;
@@ -108,8 +108,9 @@ protected:
virtual QString toolTip() const = 0; // see Core::SearchResultWindow::startNewSearch,
// add %1 placeholder where the find flags should be put
void writeCommonSettings(Utils::QtcSettings *settings);
void readCommonSettings(Utils::QtcSettings *settings, const QString &defaultFilter, const QString &defaultExclusionFilter);
void writeCommonSettings(Utils::Store &s) const;
void readCommonSettings(
const Utils::Store &s, const QString &defaultFilter, const QString &defaultExclusionFilter);
QList<QPair<QWidget *, QWidget *>> createPatternWidgets();
QStringList fileNameFilters() const;
QStringList fileExclusionFilters() const;

View File

@@ -27,8 +27,8 @@ private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
void writeSettings(Utils::QtcSettings *settings) final;
void readSettings(Utils::QtcSettings *settings) final;
Utils::Store save() const final;
void restore(const Utils::Store &s) final;
QString label() const final;
QString toolTip() const final;
@@ -37,6 +37,9 @@ private:
void handleFileChange(Core::IEditor *editor);
QPointer<Core::IDocument> m_currentDocument;
// deprecated
QByteArray settingsKey() const final;
};
FindInCurrentFile::FindInCurrentFile()
@@ -97,18 +100,21 @@ void FindInCurrentFile::handleFileChange(Core::IEditor *editor)
}
}
void FindInCurrentFile::writeSettings(QtcSettings *settings)
Store FindInCurrentFile::save() const
{
settings->beginGroup("FindInCurrentFile");
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void FindInCurrentFile::readSettings(QtcSettings *settings)
void FindInCurrentFile::restore(const Store &s)
{
settings->beginGroup("FindInCurrentFile");
readCommonSettings(settings, "*", "");
settings->endGroup();
readCommonSettings(s, "*", "");
}
QByteArray FindInCurrentFile::settingsKey() const
{
return "FindInCurrentFile";
}
void setupFindInCurrentFile()

View File

@@ -188,18 +188,21 @@ QWidget *FindInFiles::createConfigWidget()
return m_configWidget;
}
void FindInFiles::writeSettings(QtcSettings *settings)
Store FindInFiles::save() const
{
settings->beginGroup("FindInFiles");
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void FindInFiles::readSettings(QtcSettings *settings)
void FindInFiles::restore(const Utils::Store &s)
{
settings->beginGroup("FindInFiles");
readCommonSettings(settings, "*.cpp,*.h", "*/.git/*,*/.cvs/*,*/.svn/*,*.autosave,*/build/*");
settings->endGroup();
readCommonSettings(s, "*.cpp,*.h", "*/.git/*,*/.cvs/*,*/.svn/*,*.autosave,*/build/*");
}
QByteArray FindInFiles::settingsKey() const
{
return "FindInFiles";
}
void FindInFiles::setBaseDirectory(const FilePath &directory)

View File

@@ -30,8 +30,8 @@ public:
QString id() const override;
QString displayName() const override;
QWidget *createConfigWidget() override;
void writeSettings(Utils::QtcSettings *settings) override;
void readSettings(Utils::QtcSettings *settings) override;
Utils::Store save() const override;
void restore(const Utils::Store &s) override;
bool isValid() const override;
void setDirectory(const Utils::FilePath &directory);
@@ -39,6 +39,9 @@ public:
static void findOnFileSystem(const QString &path);
static FindInFiles *instance();
// deprecated
QByteArray settingsKey() const override;
protected:
QString label() const override;
QString toolTip() const override;

View File

@@ -25,14 +25,17 @@ private:
QString id() const final;
QString displayName() const final;
bool isEnabled() const final;
void writeSettings(Utils::QtcSettings *settings) final;
void readSettings(Utils::QtcSettings *settings) final;
Utils::Store save() const final;
void restore(const Utils::Store &s) final;
QString label() const final;
QString toolTip() const final;
FileContainerProvider fileContainerProvider() const final;
void updateEnabledState() { emit enabledChanged(isEnabled()); }
// deprecated
QByteArray settingsKey() const final;
};
FindInOpenFiles::FindInOpenFiles()
@@ -90,21 +93,22 @@ bool FindInOpenFiles::isEnabled() const
return Core::DocumentModel::entryCount() > 0;
}
void FindInOpenFiles::writeSettings(QtcSettings *settings)
Store FindInOpenFiles::save() const
{
settings->beginGroup("FindInOpenFiles");
writeCommonSettings(settings);
settings->endGroup();
Store s;
writeCommonSettings(s);
return s;
}
void FindInOpenFiles::readSettings(QtcSettings *settings)
void FindInOpenFiles::restore(const Store &s)
{
settings->beginGroup("FindInOpenFiles");
readCommonSettings(settings, "*", "");
settings->endGroup();
readCommonSettings(s, "*", "");
}
QByteArray FindInOpenFiles::settingsKey() const
{
return "FindInOpenFiles";
}
void setupFindInOpenFiles()
{