Skip to content

Commit e1fe33b

Browse files
committed
Support for filtering actions
1 parent 3f45316 commit e1fe33b

File tree

4 files changed

+92
-14
lines changed

4 files changed

+92
-14
lines changed

src/Files.App/Dialogs/SettingsDialog.xaml.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,13 @@ private void UpdateDialogLayout()
5050
{
5151
ContainerGrid.Height = MainWindow.Instance.Bounds.Height <= 760 ? MainWindow.Instance.Bounds.Height - 70 : 690;
5252
ContainerGrid.Width = MainWindow.Instance.Bounds.Width <= 1100 ? MainWindow.Instance.Bounds.Width : 1100;
53-
MainSettingsNavigationView.PaneDisplayMode = MainWindow.Instance.Bounds.Width < 700 ? NavigationViewPaneDisplayMode.LeftCompact : NavigationViewPaneDisplayMode.Left;
53+
54+
var paneDisplayMode = MainWindow.Instance.Bounds.Width < 700
55+
? NavigationViewPaneDisplayMode.LeftCompact
56+
: NavigationViewPaneDisplayMode.Left;
57+
58+
if (MainSettingsNavigationView.PaneDisplayMode != paneDisplayMode)
59+
MainSettingsNavigationView.PaneDisplayMode = paneDisplayMode;
5460
}
5561

5662
private void MainSettingsNavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)

src/Files.App/ViewModels/Settings/ActionsViewModel.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ public sealed partial class ActionsViewModel : ObservableObject
2020
public ObservableCollection<ModifiableActionItem> ValidActionItems { get; } = [];
2121
public ObservableCollection<ModifiableActionItem> AllActionItems { get; } = [];
2222

23+
private ObservableCollection<ModifiableActionItem> _FilteredActionItems;
24+
public ObservableCollection<ModifiableActionItem> FilteredActionItems
25+
{
26+
get { return _FilteredActionItems; }
27+
set { SetProperty(ref _FilteredActionItems, value); }
28+
}
29+
2330
private bool _IsResetAllConfirmationTeachingTipOpened;
2431
public bool IsResetAllConfirmationTeachingTipOpened
2532
{
@@ -148,6 +155,8 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
148155
}
149156
}
150157
});
158+
159+
FilteredActionItems = new ObservableCollection<ModifiableActionItem>(ValidActionItems);
151160
}
152161

153162
private void ExecuteShowAddNewKeyBindingBlockCommand()
@@ -432,5 +441,21 @@ ActionsSettingsService.ActionsV2 is not null
432441
item.IsInEditMode = false;
433442
ValidActionItems.Remove(item);
434443
}
444+
445+
public void FilterItems(string query)
446+
{
447+
if (string.IsNullOrEmpty(query))
448+
{
449+
FilteredActionItems = new ObservableCollection<ModifiableActionItem>(ValidActionItems);
450+
}
451+
else
452+
{
453+
FilteredActionItems = new ObservableCollection<ModifiableActionItem>(
454+
ValidActionItems.Where(item =>
455+
item.CommandLabel.Contains(query, StringComparison.OrdinalIgnoreCase) ||
456+
item.CommandDescription.Contains(query, StringComparison.OrdinalIgnoreCase))
457+
);
458+
}
459+
}
435460
}
436461
}

src/Files.App/Views/Settings/ActionsPage.xaml

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,34 +70,50 @@
7070
Text="{helpers:ResourceString Name=Actions}" />
7171

7272
<!-- Subtitle -->
73-
<Grid ColumnSpacing="12">
73+
<Grid ColumnSpacing="8" RowSpacing="8">
7474
<Grid.ColumnDefinitions>
7575
<ColumnDefinition Width="*" />
7676
<ColumnDefinition Width="Auto" />
7777
<ColumnDefinition Width="Auto" />
7878
</Grid.ColumnDefinitions>
7979

80+
<Grid.RowDefinitions>
81+
<RowDefinition Height="Auto" />
82+
<RowDefinition Height="Auto" />
83+
</Grid.RowDefinitions>
84+
8085
<!-- Subtitle Text -->
8186
<TextBlock
8287
Margin="0,8,0,4"
8388
FontSize="16"
8489
FontWeight="Medium"
8590
Text="{helpers:ResourceString Name=Commands}" />
8691

87-
<!-- Show Add New Section Button -->
88-
<Button
89-
x:Name="ShowAddNewGridButton"
92+
<TextBox
93+
x:Name="SearchBox"
9094
Grid.Column="1"
91-
Command="{x:Bind ViewModel.ShowAddNewKeyBindingBlockCommand, Mode=OneWay}"
92-
Content="{helpers:ResourceString Name=AddCommand}"
93-
IsEnabled="{x:Bind ViewModel.ShowAddNewKeyBindingBlock, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}" />
95+
MinWidth="200"
96+
PlaceholderText="{helpers:ResourceString Name=Search}"
97+
TextChanged="SearchBox_TextChanged" />
9498

95-
<!-- Restore Defaults Button -->
96-
<Button
97-
x:Name="RestoreDefaultsButton"
99+
<StackPanel
100+
x:Name="CommandStackPanel"
98101
Grid.Column="2"
99-
Command="{x:Bind ViewModel.ShowRestoreDefaultsConfirmationCommand, Mode=OneWay}"
100-
Content="{helpers:ResourceString Name=RestoreDefaults}" />
102+
Orientation="Horizontal"
103+
Spacing="8">
104+
<!-- Add New Action Button -->
105+
<Button
106+
x:Name="AddNewGridButton"
107+
Command="{x:Bind ViewModel.ShowAddNewKeyBindingBlockCommand, Mode=OneWay}"
108+
Content="{helpers:ResourceString Name=AddCommand}"
109+
IsEnabled="{x:Bind ViewModel.ShowAddNewKeyBindingBlock, Converter={StaticResource BoolNegationConverter}, Mode=OneWay}" />
110+
111+
<!-- Restore Defaults Button -->
112+
<Button
113+
x:Name="RestoreDefaultsButton"
114+
Command="{x:Bind ViewModel.ShowRestoreDefaultsConfirmationCommand, Mode=OneWay}"
115+
Content="{helpers:ResourceString Name=RestoreDefaults}" />
116+
</StackPanel>
101117
</Grid>
102118

103119
<!-- New Key Binding Block -->
@@ -184,7 +200,7 @@
184200
<!-- List Of Available Key Bindings -->
185201
<ListView
186202
x:Name="ValidKeyBindingsListView"
187-
ItemsSource="{x:Bind ViewModel.ValidActionItems, Mode=OneWay}"
203+
ItemsSource="{x:Bind ViewModel.FilteredActionItems, Mode=OneWay}"
188204
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
189205
ScrollViewer.HorizontalScrollMode="Disabled"
190206
ScrollViewer.VerticalScrollBarVisibility="Hidden"
@@ -392,5 +408,30 @@
392408
PreferredPlacement="Bottom"
393409
Subtitle="{helpers:ResourceString Name=KeybindingInvalidKeyNotification}" />
394410

411+
<VisualStateManager.VisualStateGroups>
412+
<VisualStateGroup>
413+
<VisualState x:Name="DefaultState">
414+
<VisualState.StateTriggers>
415+
<AdaptiveTrigger MinWindowWidth="880" />
416+
</VisualState.StateTriggers>
417+
<VisualState.Setters>
418+
<Setter Target="CommandStackPanel.(Grid.Column)" Value="2" />
419+
<Setter Target="CommandStackPanel.(Grid.ColumnSpan)" Value="2" />
420+
<Setter Target="CommandStackPanel.(Grid.Row)" Value="0" />
421+
</VisualState.Setters>
422+
</VisualState>
423+
<VisualState x:Name="CompactState">
424+
<VisualState.StateTriggers>
425+
<AdaptiveTrigger MinWindowWidth="0" />
426+
</VisualState.StateTriggers>
427+
<VisualState.Setters>
428+
<Setter Target="CommandStackPanel.(Grid.ColumnSpan)" Value="3" />
429+
<Setter Target="CommandStackPanel.(Grid.Column)" Value="0" />
430+
<Setter Target="CommandStackPanel.(Grid.Row)" Value="1" />
431+
<Setter Target="SearchBox.(Grid.Column)" Value="2" />
432+
</VisualState.Setters>
433+
</VisualState>
434+
</VisualStateGroup>
435+
</VisualStateManager.VisualStateGroups>
395436
</Grid>
396437
</Page>

src/Files.App/Views/Settings/ActionsPage.xaml.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,5 +158,11 @@ private void NewKeyBindingItemPickerComboBox_DropDownClosed(object sender, objec
158158
// Focus the editor TextBox
159159
KeyBindingEditorTextBox.Focus(FocusState.Programmatic);
160160
}
161+
162+
private void SearchBox_TextChanged(object sender, TextChangedEventArgs e)
163+
{
164+
var query = ((TextBox)sender).Text;
165+
ViewModel.FilterItems(query);
166+
}
161167
}
162168
}

0 commit comments

Comments
 (0)