From 56cd161fd7bc2592f8f08e102c0f9b84fbb64c22 Mon Sep 17 00:00:00 2001 From: tetektoza Date: Sat, 27 Sep 2025 13:33:11 +0200 Subject: [PATCH] Gui: Support searching for tooltips, comboboxes and groups in Prefs As the title says. This patch adds support for finding tooltip text, also extends widget types to QSpinBoxes/QDoubleSpinBoxes and also adds support for finding combobox items from QComboBox dropdown. Also adds support for QGroupBox titles. --- src/Gui/Dialogs/DlgPreferencesImp.cpp | 85 ++++++++++++++++++++++----- 1 file changed, 70 insertions(+), 15 deletions(-) diff --git a/src/Gui/Dialogs/DlgPreferencesImp.cpp b/src/Gui/Dialogs/DlgPreferencesImp.cpp index 1b63965393..19fbc7c19e 100644 --- a/src/Gui/Dialogs/DlgPreferencesImp.cpp +++ b/src/Gui/Dialogs/DlgPreferencesImp.cpp @@ -27,6 +27,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -1480,6 +1483,10 @@ void PreferencesSearchController::collectSearchResults( searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); + searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); + searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); + searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); + searchWidgetType(widget, searchText, groupName, pageName, pageDisplayName, tabName); } void PreferencesSearchController::onSearchResultSelected() @@ -1644,6 +1651,9 @@ void PreferencesSearchController::searchWidgetType( else if constexpr (std::is_same_v) { widgetText = widget->text(); } + else if constexpr (std::is_same_v) { + widgetText = widget->title(); + } else if constexpr (std::is_same_v) { widgetText = widget->text(); } @@ -1651,21 +1661,66 @@ void PreferencesSearchController::searchWidgetType( widgetText = widget->text(); } - // Use fuzzy matching instead of simple contains - int score = 0; - if (fuzzyMatch(searchText, widgetText, score)) { - SearchResult result { - .groupName = groupName, - .pageName = pageName, - .widget = widget, - .matchText = widgetText, - .groupBoxName = findGroupBoxForWidget(widget), - .tabName = tabName, - .pageDisplayName = pageDisplayName, - .isPageLevelMatch = false, - .score = score - }; - m_searchResults.append(result); + if (!widgetText.isEmpty()) { + int score = 0; + if (fuzzyMatch(searchText, widgetText, score)) { + SearchResult result { + .groupName = groupName, + .pageName = pageName, + .widget = widget, + .matchText = widgetText, + .groupBoxName = findGroupBoxForWidget(widget), + .tabName = tabName, + .pageDisplayName = pageDisplayName, + .isPageLevelMatch = false, + .score = score + }; + m_searchResults.append(result); + } + } + + // search tooltip text for all widget types + QString tooltip = widget->toolTip(); + if (!tooltip.isEmpty()) { + int tooltipScore = 0; + if (fuzzyMatch(searchText, tooltip, tooltipScore)) { + SearchResult result { + .groupName = groupName, + .pageName = pageName, + .widget = widget, + .matchText = QStringLiteral("Tooltip: ") + tooltip, + .groupBoxName = findGroupBoxForWidget(widget), + .tabName = tabName, + .pageDisplayName = pageDisplayName, + .isPageLevelMatch = false, + .score = tooltipScore - 100 // lower score for tooltip match + }; + m_searchResults.append(result); + } + } + + // search throughout combobox items + if constexpr (std::is_same_v) { + for (int i = 0; i < widget->count(); ++i) { + QString itemText = widget->itemText(i); + if (!itemText.isEmpty()) { + int itemScore = 0; + if (fuzzyMatch(searchText, itemText, itemScore)) { + SearchResult result { + .groupName = groupName, + .pageName = pageName, + .widget = widget, + .matchText = QStringLiteral("Option: ") + itemText, + .groupBoxName = findGroupBoxForWidget(widget), + .tabName = tabName, + .pageDisplayName = pageDisplayName, + .isPageLevelMatch = false, + .score = itemScore + 50 // boost score for combo item + }; + m_searchResults.append(result); + } + } + } } } }