From cad754c7e3f477ebc884a4289d2a95be8362c821 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Thu, 24 Apr 2025 18:11:47 -0400 Subject: [PATCH 1/2] Init --- src/Files.App/Dialogs/SettingsDialog.xaml | 19 ++++ src/Files.App/Dialogs/SettingsDialog.xaml.cs | 103 ++++++++++++++++++- 2 files changed, 121 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml b/src/Files.App/Dialogs/SettingsDialog.xaml index 451a492f67d2..9e946f5a269d 100644 --- a/src/Files.App/Dialogs/SettingsDialog.xaml +++ b/src/Files.App/Dialogs/SettingsDialog.xaml @@ -82,6 +82,25 @@ PaneDisplayMode="Left" SelectionChanged="MainSettingsNavigationView_SelectionChanged"> + + + + + + + + + + Text; // Ensures dropdown shows search text + } + + private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) + { + if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput) + { + var query = sender.Text; + var results = SearchSettingsPages(query); + + // Store actual objects instead of just text + sender.ItemsSource = results; + } + } + + private void AutoSuggestBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) + { + var query = args.QueryText; + var results = SearchSettingsPages(query); + sender.ItemsSource = results; + } + + private void NavViewSearchBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args) + { + if (args.SelectedItem is SearchResultItem selectedItem) + { + SettingsContentFrame.Navigate(selectedItem.ParentPage.GetType()); + NavViewSearchBox.Text = string.Empty; + } + } + + private IEnumerable SearchVisualTreeForText(DependencyObject parent, string query) + { + var results = new List(); + + for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) + { + var child = VisualTreeHelper.GetChild(parent, i); + + if (child is FrameworkElement element) + { + if (element is TextBlock textBlock && textBlock.Text.Contains(query, StringComparison.OrdinalIgnoreCase)) + results.Add(textBlock.Text); + else if (element is SettingsCard settingsCard && settingsCard.Header is string headerText && + headerText.Contains(query, StringComparison.OrdinalIgnoreCase)) + results.Add(headerText); + else if (element is SettingsExpander settingsExpander) + { + if (settingsExpander.Header is string expanderHeader && + expanderHeader.Contains(query, StringComparison.OrdinalIgnoreCase)) + results.Add(expanderHeader); + + results.AddRange(SearchVisualTreeForText(settingsExpander, query)); + + results.AddRange(settingsExpander.Items.OfType() + .Select(subCard => subCard.Header) + .OfType() + .Where(subCardHeader => subCardHeader.Contains(query, StringComparison.OrdinalIgnoreCase))); + } + } + + results.AddRange(SearchVisualTreeForText(child, query)); + } + + return results; + } + + + private IEnumerable SearchSettingsPages(string query) + { + var results = new List(); + + var settingsPages = new List + { + new AboutPage(), + new AppearancePage(), + new TagsPage(), + new DevToolsPage(), + new GeneralPage(), + new FoldersPage(), + }; + + foreach (var page in settingsPages) + { + var matches = SearchVisualTreeForText(page, query); + foreach (var match in matches) + { + results.Add(new SearchResultItem { Text = match, ParentPage = page }); + } + } + + return results; + } + } } From e362db46f81a4ce088c3ffc61eb96aff20286d25 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 27 May 2025 17:53:47 -0400 Subject: [PATCH 2/2] Update SettingsDialog.xaml --- src/Files.App/Dialogs/SettingsDialog.xaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Files.App/Dialogs/SettingsDialog.xaml b/src/Files.App/Dialogs/SettingsDialog.xaml index 9e946f5a269d..5532ccd71123 100644 --- a/src/Files.App/Dialogs/SettingsDialog.xaml +++ b/src/Files.App/Dialogs/SettingsDialog.xaml @@ -89,7 +89,8 @@ QueryIcon="Find" QuerySubmitted="AutoSuggestBox_QuerySubmitted" SuggestionChosen="NavViewSearchBox_SuggestionChosen" - TextChanged="AutoSuggestBox_TextChanged"> + TextChanged="AutoSuggestBox_TextChanged" + UpdateTextOnSelect="False">