From e36d5c495fcbc70832076794eb49bcf01fa749b9 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Thu, 9 Feb 2023 18:54:33 +0100 Subject: [PATCH] Add option to hide settings categories This allows to hide setting categories by id. For example: HideOptionCategories=C++, Debug, Designer, Kits, BuildAndRun, CPaster, LanguageClient, Version Control Change-Id: Ifeacbf7885fc2d51ef262fdb8bbbfc81f52bce53 Reviewed-by: Tim Jenssen Reviewed-by: Qt CI Bot --- .../coreplugin/dialogs/settingsdialog.cpp | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/plugins/coreplugin/dialogs/settingsdialog.cpp b/src/plugins/coreplugin/dialogs/settingsdialog.cpp index d4a65df5de5..bb6182ebf4f 100644 --- a/src/plugins/coreplugin/dialogs/settingsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/settingsdialog.cpp @@ -236,15 +236,33 @@ protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; }; +const char SETTING_HIDE_OPTION_CATEGORIES[] = "HideOptionCategories"; + +static bool categoryVisible(const Id &id) +{ + static QStringList list + = Core::ICore::settings()->value(SETTING_HIDE_OPTION_CATEGORIES).toStringList(); + + if (anyOf(list, [id](const QString &str) { return id.toString().contains(str); })) + return false; + + return true; +} + bool CategoryFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { + const CategoryModel *cm = static_cast(sourceModel()); + const Category *category = cm->categories().at(sourceRow); + + if (!categoryVisible(category->id)) + return false; + // Regular contents check, then check page-filter. if (QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent)) return true; const QRegularExpression regex = filterRegularExpression(); - const CategoryModel *cm = static_cast(sourceModel()); - const Category *category = cm->categories().at(sourceRow); + for (const IOptionsPage *page : category->pages) { if (page->displayCategory().contains(regex) || page->displayName().contains(regex) || page->matches(regex))