Skip to content

Commit 9c2a507

Browse files
committed
PRE-MERGE #19827 Allow searching through the available shortcut actions in the EditAction page
2 parents 425a403 + d37fb80 commit 9c2a507

File tree

3 files changed

+95
-6
lines changed

3 files changed

+95
-6
lines changed

src/cascadia/TerminalSettingsEditor/EditAction.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
#include "../TerminalSettingsModel/AllShortcutActions.h"
99

1010
using namespace winrt::Windows::UI::Xaml;
11+
using namespace winrt::Windows::UI::Xaml::Controls;
1112
using namespace winrt::Windows::UI::Xaml::Navigation;
13+
using namespace winrt::Windows::Foundation::Collections;
1214

1315
namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
1416
{
@@ -49,5 +51,82 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
4951

5052
CommandNameTextBox().Focus(FocusState::Programmatic);
5153
});
54+
55+
// Initialize AutoSuggestBox with current action and store last valid action
56+
if (_ViewModel.ProposedShortcutActionName())
57+
{
58+
const auto currentAction = winrt::unbox_value<winrt::hstring>(_ViewModel.ProposedShortcutActionName());
59+
ShortcutActionBox().Text(currentAction);
60+
_lastValidAction = currentAction;
61+
}
62+
}
63+
64+
void EditAction::ShortcutActionBox_GotFocus(const IInspectable& sender, const RoutedEventArgs&)
65+
{
66+
// Open the suggestions list with all available actions
67+
std::vector<winrt::hstring> allActions;
68+
for (const auto& action : _ViewModel.AvailableShortcutActions())
69+
{
70+
allActions.push_back(action);
71+
}
72+
73+
_filteredActions = winrt::single_threaded_observable_vector(std::move(allActions));
74+
sender.as<AutoSuggestBox>().ItemsSource(_filteredActions);
75+
sender.as<AutoSuggestBox>().IsSuggestionListOpen(true);
76+
}
77+
78+
void EditAction::ShortcutActionBox_TextChanged(const AutoSuggestBox& sender, const AutoSuggestBoxTextChangedEventArgs& args)
79+
{
80+
if (args.Reason() == AutoSuggestionBoxTextChangeReason::UserInput)
81+
{
82+
const auto searchText = sender.Text();
83+
std::vector<winrt::hstring> filtered;
84+
85+
for (const auto& action : _ViewModel.AvailableShortcutActions())
86+
{
87+
if (til::contains_linguistic_insensitive(action, searchText))
88+
{
89+
filtered.push_back(action);
90+
}
91+
}
92+
93+
_filteredActions = winrt::single_threaded_observable_vector(std::move(filtered));
94+
sender.ItemsSource(_filteredActions);
95+
}
96+
}
97+
98+
void EditAction::ShortcutActionBox_SuggestionChosen(const AutoSuggestBox& sender, const AutoSuggestBoxSuggestionChosenEventArgs& args)
99+
{
100+
if (const auto selectedAction = args.SelectedItem().try_as<winrt::hstring>())
101+
{
102+
sender.Text(*selectedAction);
103+
}
104+
}
105+
106+
void EditAction::ShortcutActionBox_QuerySubmitted(const AutoSuggestBox& sender, const AutoSuggestBoxQuerySubmittedEventArgs& args)
107+
{
108+
const auto submittedText = args.QueryText();
109+
110+
// Validate that this is a valid shortcut action
111+
bool isValid = false;
112+
for (const auto& action : _ViewModel.AvailableShortcutActions())
113+
{
114+
if (action == submittedText)
115+
{
116+
isValid = true;
117+
break;
118+
}
119+
}
120+
121+
if (isValid)
122+
{
123+
_ViewModel.ProposedShortcutActionName(winrt::box_value(submittedText));
124+
_lastValidAction = submittedText;
125+
}
126+
else
127+
{
128+
// Revert to the last valid action
129+
sender.Text(_lastValidAction);
130+
}
52131
}
53132
}

src/cascadia/TerminalSettingsEditor/EditAction.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,18 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
2020

2121
WINRT_OBSERVABLE_PROPERTY(Editor::CommandViewModel, ViewModel, PropertyChanged.raise, nullptr);
2222

23+
void ShortcutActionBox_GotFocus(const winrt::Windows::Foundation::IInspectable& sender, const winrt::Windows::UI::Xaml::RoutedEventArgs& args);
24+
void ShortcutActionBox_TextChanged(const winrt::Windows::UI::Xaml::Controls::AutoSuggestBox& sender, const winrt::Windows::UI::Xaml::Controls::AutoSuggestBoxTextChangedEventArgs& args);
25+
void ShortcutActionBox_SuggestionChosen(const winrt::Windows::UI::Xaml::Controls::AutoSuggestBox& sender, const winrt::Windows::UI::Xaml::Controls::AutoSuggestBoxSuggestionChosenEventArgs& args);
26+
void ShortcutActionBox_QuerySubmitted(const winrt::Windows::UI::Xaml::Controls::AutoSuggestBox& sender, const winrt::Windows::UI::Xaml::Controls::AutoSuggestBoxQuerySubmittedEventArgs& args);
27+
2328
private:
2429
friend struct EditActionT<EditAction>; // for Xaml to bind events
2530
winrt::Windows::UI::Xaml::FrameworkElement::LayoutUpdated_revoker _layoutUpdatedRevoker;
2631
Editor::CommandViewModel::PropagateWindowRootRequested_revoker _propagateWindowRootRevoker;
2732
Editor::CommandViewModel::FocusContainer_revoker _focusContainerRevoker;
33+
winrt::Windows::Foundation::Collections::IObservableVector<winrt::hstring> _filteredActions{ nullptr };
34+
winrt::hstring _lastValidAction;
2835
};
2936
}
3037

src/cascadia/TerminalSettingsEditor/EditAction.xaml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -678,12 +678,15 @@
678678
Grid.Row="1"
679679
Grid.Column="0"
680680
VerticalAlignment="Center" />
681-
<ComboBox Grid.Row="1"
682-
Grid.Column="1"
683-
VerticalAlignment="Center"
684-
AutomationProperties.Name="{x:Bind ViewModel.ShortcutActionComboBoxAutomationPropName}"
685-
ItemsSource="{x:Bind ViewModel.AvailableShortcutActions, Mode=OneWay}"
686-
SelectedItem="{x:Bind ViewModel.ProposedShortcutActionName, Mode=TwoWay}" />
681+
<AutoSuggestBox x:Name="ShortcutActionBox"
682+
Grid.Row="1"
683+
Grid.Column="1"
684+
VerticalAlignment="Center"
685+
AutomationProperties.Name="{x:Bind ViewModel.ShortcutActionComboBoxAutomationPropName}"
686+
GotFocus="ShortcutActionBox_GotFocus"
687+
QuerySubmitted="ShortcutActionBox_QuerySubmitted"
688+
SuggestionChosen="ShortcutActionBox_SuggestionChosen"
689+
TextChanged="ShortcutActionBox_TextChanged" />
687690
<TextBlock x:Uid="Actions_Arguments"
688691
Grid.Row="2"
689692
Grid.Column="0"

0 commit comments

Comments
 (0)