Skip to content

Commit 3c8e262

Browse files
committed
PRE-MERGE #18917 Allow editing actions in the settings UI
2 parents 49a2074 + eecb32d commit 3c8e262

24 files changed

+2849
-572
lines changed

src/cascadia/TerminalSettingsEditor/Actions.cpp

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -19,57 +19,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
1919
Automation::AutomationProperties::SetName(AddNewButton(), RS_(L"Actions_AddNewTextBlock/Text"));
2020
}
2121

22-
Automation::Peers::AutomationPeer Actions::OnCreateAutomationPeer()
23-
{
24-
_ViewModel.OnAutomationPeerAttached();
25-
return nullptr;
26-
}
27-
2822
void Actions::OnNavigatedTo(const NavigationEventArgs& e)
2923
{
3024
_ViewModel = e.Parameter().as<Editor::ActionsViewModel>();
31-
32-
// Subscribe to the view model's FocusContainer event.
33-
// Use the KeyBindingViewModel or index provided in the event to focus the corresponding container
34-
_ViewModel.FocusContainer([this](const auto& /*sender*/, const auto& args) {
35-
if (auto kbdVM{ args.try_as<KeyBindingViewModel>() })
36-
{
37-
if (const auto& container = KeyBindingsListView().ContainerFromItem(*kbdVM))
38-
{
39-
container.as<Controls::ListViewItem>().Focus(FocusState::Programmatic);
40-
}
41-
}
42-
else if (const auto& index = args.try_as<uint32_t>())
43-
{
44-
if (const auto& container = KeyBindingsListView().ContainerFromIndex(*index))
45-
{
46-
container.as<Controls::ListViewItem>().Focus(FocusState::Programmatic);
47-
}
48-
}
49-
});
50-
51-
// Subscribe to the view model's UpdateBackground event.
52-
// The view model does not have access to the page resources, so it asks us
53-
// to update the key binding's container background
54-
_ViewModel.UpdateBackground([this](const auto& /*sender*/, const auto& args) {
55-
if (auto kbdVM{ args.try_as<KeyBindingViewModel>() })
56-
{
57-
if (kbdVM->IsInEditMode())
58-
{
59-
const auto& containerBackground{ Resources().Lookup(box_value(L"ActionContainerBackgroundEditing")).as<Windows::UI::Xaml::Media::Brush>() };
60-
kbdVM->ContainerBackground(containerBackground);
61-
}
62-
else
63-
{
64-
const auto& containerBackground{ Resources().Lookup(box_value(L"ActionContainerBackground")).as<Windows::UI::Xaml::Media::Brush>() };
65-
kbdVM->ContainerBackground(containerBackground);
66-
}
67-
}
68-
});
25+
_ViewModel.CurrentPage(ActionsSubPage::Base);
6926
}
7027

7128
void Actions::AddNew_Click(const IInspectable& /*sender*/, const RoutedEventArgs& /*eventArgs*/)
7229
{
73-
_ViewModel.AddNewKeybinding();
30+
_ViewModel.AddNewCommand();
7431
}
7532
}

src/cascadia/TerminalSettingsEditor/Actions.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
1616
Actions();
1717

1818
void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e);
19-
Windows::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer();
2019

2120
void AddNew_Click(const IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& eventArgs);
2221

src/cascadia/TerminalSettingsEditor/Actions.xaml

Lines changed: 19 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
<Style x:Key="KeyBindingContainerStyle"
123123
BasedOn="{StaticResource DefaultListViewItemStyle}"
124124
TargetType="ListViewItem">
125-
<Setter Property="Padding" Value="4" />
125+
<Setter Property="Padding" Value="12,4,4,4" />
126126
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
127127
<Setter Property="XYFocusKeyboardNavigation" Value="Enabled" />
128128
</Style>
@@ -137,24 +137,6 @@
137137
<Setter Property="HorizontalAlignment" Value="Right" />
138138
<Setter Property="VerticalAlignment" Value="Center" />
139139
</Style>
140-
<x:Int32 x:Key="EditButtonSize">32</x:Int32>
141-
<x:Double x:Key="EditButtonIconSize">15</x:Double>
142-
<Style x:Key="EditButtonStyle"
143-
BasedOn="{StaticResource DefaultButtonStyle}"
144-
TargetType="Button">
145-
<Setter Property="Padding" Value="0" />
146-
<Setter Property="VerticalAlignment" Value="Center" />
147-
<Setter Property="Height" Value="{StaticResource EditButtonSize}" />
148-
<Setter Property="Width" Value="{StaticResource EditButtonSize}" />
149-
</Style>
150-
<Style x:Key="AccentEditButtonStyle"
151-
BasedOn="{StaticResource AccentButtonStyle}"
152-
TargetType="Button">
153-
<Setter Property="Padding" Value="3" />
154-
<Setter Property="VerticalAlignment" Value="Center" />
155-
<Setter Property="Height" Value="{StaticResource EditButtonSize}" />
156-
<Setter Property="Width" Value="{StaticResource EditButtonSize}" />
157-
</Style>
158140

159141
<!-- Converters & Misc. -->
160142
<SolidColorBrush x:Key="ActionContainerBackgroundEditing"
@@ -163,22 +145,16 @@
163145
Color="Transparent" />
164146

165147
<!-- Templates -->
166-
<DataTemplate x:Key="KeyBindingTemplate"
167-
x:DataType="local:KeyBindingViewModel">
168-
<ListViewItem AutomationProperties.AcceleratorKey="{x:Bind KeyChordText, Mode=OneWay}"
169-
AutomationProperties.Name="{x:Bind Name, Mode=OneWay}"
170-
Background="{x:Bind ContainerBackground, Mode=OneWay}"
171-
GotFocus="{x:Bind ActionGotFocus}"
172-
LostFocus="{x:Bind ActionLostFocus}"
173-
PointerEntered="{x:Bind EnterHoverMode}"
174-
PointerExited="{x:Bind ExitHoverMode}"
148+
<DataTemplate x:Key="CommandTemplate"
149+
x:DataType="local:CommandViewModel">
150+
<ListViewItem AutomationProperties.Name="{x:Bind DisplayName, Mode=OneWay}"
175151
Style="{StaticResource KeyBindingContainerStyle}">
176152
<Grid ColumnSpacing="8">
177153
<Grid.ColumnDefinitions>
178154
<!-- command name -->
179155
<ColumnDefinition Width="*" />
180156
<!-- key chord -->
181-
<ColumnDefinition Width="auto" />
157+
<ColumnDefinition Width="150" />
182158
<!-- edit buttons -->
183159
<!--
184160
This needs to be 112 because that is the width of the row of buttons in edit mode + padding.
@@ -192,133 +168,7 @@
192168
<!-- Command Name -->
193169
<TextBlock Grid.Column="0"
194170
Style="{StaticResource KeyBindingNameTextBlockStyle}"
195-
Text="{x:Bind Name, Mode=OneWay}"
196-
Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}" />
197-
198-
<!-- Edit Mode: Action Combo-box -->
199-
<ComboBox x:Uid="Actions_ActionComboBox"
200-
Grid.Column="0"
201-
VerticalAlignment="Center"
202-
ItemsSource="{x:Bind AvailableActions, Mode=OneWay}"
203-
SelectedItem="{x:Bind ProposedAction, Mode=TwoWay}"
204-
Visibility="{x:Bind IsInEditMode, Mode=OneWay}" />
205-
206-
<!-- Key Chord Text -->
207-
<Border Grid.Column="1"
208-
Padding="2,0,2,0"
209-
HorizontalAlignment="Right"
210-
VerticalAlignment="Center"
211-
Style="{ThemeResource KeyChordBorderStyle}"
212-
Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsInEditMode), Mode=OneWay}">
213-
214-
<TextBlock FontSize="14"
215-
Style="{ThemeResource KeyChordTextBlockStyle}"
216-
Text="{x:Bind KeyChordText, Mode=OneWay}"
217-
TextWrapping="WrapWholeWords" />
218-
</Border>
219-
220-
<!-- Edit Mode: Key Chord Listener -->
221-
<local:KeyChordListener Grid.Column="1"
222-
Keys="{x:Bind ProposedKeys, Mode=TwoWay}"
223-
Style="{StaticResource KeyChordEditorStyle}"
224-
Visibility="{x:Bind IsInEditMode, Mode=OneWay}" />
225-
226-
<!-- Edit Button -->
227-
<Button x:Uid="Actions_EditButton"
228-
Grid.Column="2"
229-
AutomationProperties.Name="{x:Bind EditButtonName}"
230-
Background="Transparent"
231-
Click="{x:Bind ToggleEditMode}"
232-
GettingFocus="{x:Bind EditButtonGettingFocus}"
233-
LosingFocus="{x:Bind EditButtonLosingFocus}"
234-
Style="{StaticResource EditButtonStyle}"
235-
Visibility="{x:Bind ShowEditButton, Mode=OneWay}">
236-
<Button.Content>
237-
<FontIcon FontSize="{StaticResource EditButtonIconSize}"
238-
Glyph="&#xE70F;" />
239-
</Button.Content>
240-
<Button.Resources>
241-
<ResourceDictionary>
242-
<ResourceDictionary.ThemeDictionaries>
243-
<ResourceDictionary x:Key="Light">
244-
<SolidColorBrush x:Key="ButtonForegroundPointerOver"
245-
Color="{StaticResource SystemAccentColor}" />
246-
<SolidColorBrush x:Key="ButtonForegroundPressed"
247-
Color="{StaticResource SystemAccentColor}" />
248-
</ResourceDictionary>
249-
<ResourceDictionary x:Key="Dark">
250-
<SolidColorBrush x:Key="ButtonForegroundPointerOver"
251-
Color="{StaticResource SystemAccentColor}" />
252-
<SolidColorBrush x:Key="ButtonForegroundPressed"
253-
Color="{StaticResource SystemAccentColor}" />
254-
</ResourceDictionary>
255-
<ResourceDictionary x:Key="HighContrast">
256-
<SolidColorBrush x:Key="ButtonBackground"
257-
Color="{ThemeResource SystemColorButtonFaceColor}" />
258-
<SolidColorBrush x:Key="ButtonBackgroundPointerOver"
259-
Color="{ThemeResource SystemColorHighlightColor}" />
260-
<SolidColorBrush x:Key="ButtonBackgroundPressed"
261-
Color="{ThemeResource SystemColorHighlightColor}" />
262-
<SolidColorBrush x:Key="ButtonForeground"
263-
Color="{ThemeResource SystemColorButtonTextColor}" />
264-
<SolidColorBrush x:Key="ButtonForegroundPointerOver"
265-
Color="{ThemeResource SystemColorHighlightTextColor}" />
266-
<SolidColorBrush x:Key="ButtonForegroundPressed"
267-
Color="{ThemeResource SystemColorHighlightTextColor}" />
268-
</ResourceDictionary>
269-
</ResourceDictionary.ThemeDictionaries>
270-
</ResourceDictionary>
271-
</Button.Resources>
272-
</Button>
273-
274-
<!-- Edit Mode: Buttons -->
275-
<StackPanel Grid.Column="2"
276-
Orientation="Horizontal"
277-
Visibility="{x:Bind IsInEditMode, Mode=OneWay}">
278-
279-
<!-- Cancel editing the action -->
280-
<Button x:Uid="Actions_CancelButton"
281-
AutomationProperties.Name="{x:Bind CancelButtonName}"
282-
Click="{x:Bind CancelChanges}"
283-
Style="{StaticResource EditButtonStyle}">
284-
<FontIcon FontSize="{StaticResource EditButtonIconSize}"
285-
Glyph="&#xE711;" />
286-
</Button>
287-
288-
<!-- Accept changes -->
289-
<Button x:Uid="Actions_AcceptButton"
290-
Margin="8,0,0,0"
291-
AutomationProperties.Name="{x:Bind AcceptButtonName}"
292-
Click="{x:Bind AttemptAcceptChanges}"
293-
Flyout="{x:Bind AcceptChangesFlyout, Mode=OneWay}"
294-
Style="{StaticResource AccentEditButtonStyle}">
295-
<FontIcon FontSize="{StaticResource EditButtonIconSize}"
296-
Glyph="&#xE8FB;" />
297-
</Button>
298-
299-
<!-- Delete the current key binding -->
300-
<Button x:Uid="Actions_DeleteButton"
301-
Margin="8,0,0,0"
302-
AutomationProperties.Name="{x:Bind DeleteButtonName}"
303-
Style="{StaticResource DeleteSmallButtonStyle}"
304-
Visibility="{x:Bind mtu:Converters.InvertedBooleanToVisibility(IsNewlyAdded), Mode=OneWay}">
305-
<Button.Content>
306-
<FontIcon FontSize="{StaticResource EditButtonIconSize}"
307-
Glyph="&#xE74D;" />
308-
</Button.Content>
309-
<Button.Flyout>
310-
<Flyout FlyoutPresenterStyle="{StaticResource CustomFlyoutPresenterStyle}">
311-
<StackPanel>
312-
<TextBlock x:Uid="Actions_DeleteConfirmationMessage"
313-
Style="{StaticResource CustomFlyoutTextStyle}" />
314-
<Button x:Uid="Actions_DeleteConfirmationButton"
315-
Click="{x:Bind DeleteKeyBinding}" />
316-
</StackPanel>
317-
</Flyout>
318-
</Button.Flyout>
319-
</Button>
320-
321-
</StackPanel>
171+
Text="{x:Bind DisplayName, Mode=OneWay}" />
322172
</Grid>
323173
</ListViewItem>
324174
</DataTemplate>
@@ -330,6 +180,13 @@
330180
HorizontalAlignment="Left"
331181
Spacing="8"
332182
Style="{StaticResource SettingsStackStyle}">
183+
<TextBlock Style="{StaticResource DisclaimerStyle}"
184+
TextWrapping="WrapWholeWords">
185+
<Hyperlink NavigateUri="https://learn.microsoft.com/en-us/windows/terminal/customize-settings/actions"
186+
TextDecorations="None">
187+
<Run x:Uid="Actions_Disclaimer" />
188+
</Hyperlink>
189+
</TextBlock>
333190
<!-- Add New Button -->
334191
<Button x:Name="AddNewButton"
335192
Click="AddNew_Click">
@@ -344,10 +201,12 @@
344201
</Button>
345202

346203
<!-- Keybindings -->
347-
<ListView x:Name="KeyBindingsListView"
348-
ItemTemplate="{StaticResource KeyBindingTemplate}"
349-
ItemsSource="{x:Bind ViewModel.KeyBindingList, Mode=OneWay}"
350-
SelectionMode="None" />
204+
<ListView x:Name="CommandsListView"
205+
Margin="-8,0,0,0"
206+
IsItemClickEnabled="True"
207+
ItemClick="{x:Bind ViewModel.CmdListItemClicked}"
208+
ItemTemplate="{StaticResource CommandTemplate}"
209+
ItemsSource="{x:Bind ViewModel.CommandList, Mode=OneWay}" />
351210
</StackPanel>
352211
</Border>
353212
</Page>

0 commit comments

Comments
 (0)