Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RichCommands: Search #11837

Merged
merged 12 commits into from
Mar 28, 2023
31 changes: 31 additions & 0 deletions src/Files.App/Actions/Global/SearchAction.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.DependencyInjection;
using Files.App.Commands;
using Files.App.Contexts;
using Files.App.Extensions;
using System.Threading.Tasks;
using Windows.System;

namespace Files.App.Actions
{
internal class SearchAction : ObservableObject, IAction
{
private readonly IContentPageContext context = Ioc.Default.GetRequiredService<IContentPageContext>();

public string Label { get; } = "Search".GetLocalizedResource();

public string Description { get; } = "TODO: Need to be described.";

public HotKey HotKey { get; } = new(VirtualKey.F, VirtualKeyModifiers.Control);
yaira2 marked this conversation as resolved.
Show resolved Hide resolved

public HotKey SecondHotKey { get; } = new(VirtualKey.F3);

public RichGlyph Glyph { get; } = new();

public Task ExecuteAsync()
{
context.ShellPage?.ToolbarViewModel.SwitchSearchBoxVisibility();
return Task.CompletedTask;
}
}
}
1 change: 1 addition & 0 deletions src/Files.App/Commands/CommandCodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public enum CommandCodes
EnterCompactOverlay,
ExitCompactOverlay,
ToggleCompactOverlay,
Search,

// Show
ToggleShowHiddenItems,
Expand Down
2 changes: 2 additions & 0 deletions src/Files.App/Commands/Manager/CommandManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ internal class CommandManager : ICommandManager
public IRichCommand EnterCompactOverlay => commands[CommandCodes.EnterCompactOverlay];
public IRichCommand ExitCompactOverlay => commands[CommandCodes.ExitCompactOverlay];
public IRichCommand ToggleCompactOverlay => commands[CommandCodes.ToggleCompactOverlay];
public IRichCommand Search => commands[CommandCodes.Search];
public IRichCommand ToggleShowHiddenItems => commands[CommandCodes.ToggleShowHiddenItems];
public IRichCommand ToggleShowFileExtensions => commands[CommandCodes.ToggleShowFileExtensions];
public IRichCommand TogglePreviewPane => commands[CommandCodes.TogglePreviewPane];
Expand Down Expand Up @@ -158,6 +159,7 @@ public CommandManager()
[CommandCodes.EnterCompactOverlay] = new EnterCompactOverlayAction(),
[CommandCodes.ExitCompactOverlay] = new ExitCompactOverlayAction(),
[CommandCodes.ToggleCompactOverlay] = new ToggleCompactOverlayAction(),
[CommandCodes.Search] = new SearchAction(),
[CommandCodes.ToggleShowHiddenItems] = new ToggleShowHiddenItemsAction(),
[CommandCodes.ToggleShowFileExtensions] = new ToggleShowFileExtensionsAction(),
[CommandCodes.TogglePreviewPane] = new TogglePreviewPaneAction(),
Expand Down
2 changes: 1 addition & 1 deletion src/Files.App/Commands/Manager/ICommandManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;

namespace Files.App.Commands
Expand All @@ -15,6 +14,7 @@ public interface ICommandManager : IEnumerable<IRichCommand>
IRichCommand EnterCompactOverlay { get; }
IRichCommand ExitCompactOverlay { get; }
IRichCommand ToggleCompactOverlay { get; }
IRichCommand Search { get; }

IRichCommand ToggleShowHiddenItems { get; }
IRichCommand ToggleShowFileExtensions { get; }
Expand Down
15 changes: 15 additions & 0 deletions src/Files.App/Contexts/ContentPage/ContentPageContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using Files.App.Filesystem;
using Files.App.UserControls.MultitaskingControl;
using Files.App.ViewModels;
using Files.App.Views.LayoutModes;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
Expand All @@ -21,6 +22,8 @@ internal class ContentPageContext : ObservableObject, IContentPageContext

public IShellPage? ShellPage => context?.PaneOrColumn;

public Type PageLayoutType => ShellPage?.CurrentPageType ?? typeof(DetailsLayoutBrowser);

private ContentPageTypes pageType = ContentPageTypes.None;
public ContentPageTypes PageType => pageType;

Expand Down Expand Up @@ -53,6 +56,7 @@ private void Context_Changing(object? sender, EventArgs e)
{
if (ShellPage is IShellPage page)
{
page.PropertyChanged -= Page_PropertyChanged;
page.ContentChanged -= Page_ContentChanged;
page.InstanceViewModel.PropertyChanged -= InstanceViewModel_PropertyChanged;
page.ToolbarViewModel.PropertyChanged -= ToolbarViewModel_PropertyChanged;
Expand All @@ -68,6 +72,7 @@ private void Context_Changed(object? sender, EventArgs e)
{
if (ShellPage is IShellPage page)
{
page.PropertyChanged += Page_PropertyChanged;
page.ContentChanged += Page_ContentChanged;
page.InstanceViewModel.PropertyChanged += InstanceViewModel_PropertyChanged;
page.ToolbarViewModel.PropertyChanged += ToolbarViewModel_PropertyChanged;
Expand All @@ -81,6 +86,16 @@ private void Context_Changed(object? sender, EventArgs e)
OnPropertyChanged(nameof(ShellPage));
}

private void Page_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case nameof(ShellPage.CurrentPageType):
OnPropertyChanged(nameof(PageLayoutType));
break;
}
}

private void Page_ContentChanged(object? sender, TabItemArguments e) => Update();

private void InstanceViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e)
Expand Down
3 changes: 3 additions & 0 deletions src/Files.App/Contexts/ContentPage/IContentPageContext.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Files.App.Filesystem;
using System;
using System.Collections.Generic;
using System.ComponentModel;

Expand All @@ -10,6 +11,8 @@ public interface IContentPageContext : INotifyPropertyChanged

ContentPageTypes PageType { get; }

Type PageLayoutType { get; }

ListedItem? Folder { get; }

bool HasItem { get; }
Expand Down
2 changes: 1 addition & 1 deletion src/Files.App/IShellPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

namespace Files.App
{
public interface IShellPage : ITabItemContent, IMultiPaneInfo, IDisposable
public interface IShellPage : ITabItemContent, IMultiPaneInfo, IDisposable, INotifyPropertyChanged
{
ItemViewModel FilesystemViewModel { get; }

Expand Down
3 changes: 0 additions & 3 deletions src/Files.App/Strings/en-US/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -324,9 +324,6 @@
<data name="Refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="NavSearchButton.ToolTipService.ToolTip" xml:space="preserve">
<value>Search (Ctrl+F)</value>
</data>
<data name="ItemAlreadyExistsDialogContent" xml:space="preserve">
<value>An item with this name already exists in this directory.</value>
</data>
Expand Down
13 changes: 4 additions & 9 deletions src/Files.App/UserControls/AddressToolbar.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -189,18 +189,13 @@
<Button
x:Name="SearchButton"
AccessKey="I"
AutomationProperties.Name="{helpers:ResourceString Name=Search}"
Click="SearchButton_Click"
AutomationProperties.Name="{x:Bind ViewModel.Commands.Search.Label}"
Command="{x:Bind ViewModel.Commands.Search, Mode=OneWay}"
IsEnabled="{x:Bind ViewModel.Commands.Search.IsExecutable}"
Style="{StaticResource AddressToolbarButtonStyle}"
ToolTipService.ToolTip="{helpers:ResourceString Name=NavSearchButton/ToolTipService/ToolTip}"
ToolTipService.ToolTip="{x:Bind ViewModel.Commands.Search.LabelWithHotKey}"
Visibility="Collapsed">
<FontIcon FontSize="14" Glyph="{x:Bind ViewModel.SearchButtonGlyph, Mode=OneWay}" />
<Button.KeyboardAccelerators>
<KeyboardAccelerator
Key="F"
IsEnabled="False"
Modifiers="Control" />
</Button.KeyboardAccelerators>
</Button>

<Button
Expand Down
1 change: 0 additions & 1 deletion src/Files.App/UserControls/AddressToolbar.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ private void VisiblePath_LostFocus(object _, RoutedEventArgs e)
VisiblePath.Focus(FocusState.Programmatic);
}

private void SearchButton_Click(object _, RoutedEventArgs e) => ViewModel.SwitchSearchBoxVisibility();
private void SearchRegion_OnGotFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_GotFocus(sender, e);
private void SearchRegion_LostFocus(object sender, RoutedEventArgs e) => ViewModel.SearchRegion_LostFocus(sender, e);
private void SearchRegion_AccessKeyInvoked(UIElement sender, AccessKeyInvokedEventArgs args) => sender.Focus(FocusState.Keyboard);
Expand Down
10 changes: 8 additions & 2 deletions src/Files.App/ViewModels/ToolbarViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using CommunityToolkit.WinUI;
using CommunityToolkit.WinUI.UI;
using Files.App.Commands;
using Files.App.Contexts;
using Files.App.Extensions;
using Files.App.Filesystem;
using Files.App.Filesystem.StorageItems;
Expand Down Expand Up @@ -504,8 +505,7 @@ public void SwitchSearchBoxVisibility()
{
if (IsSearchBoxVisible)
{
SearchBox.Query = string.Empty;
IsSearchBoxVisible = false;
CloseSearchBox();
}
else
{
Expand Down Expand Up @@ -536,6 +536,12 @@ public void CloseSearchBox()
{
SearchBox.Query = string.Empty;
IsSearchBoxVisible = false;

var page = Ioc.Default.GetRequiredService<IContentPageContext>().ShellPage?.SlimContentPage;
if (page is StandardViewBase svb && svb.IsLoaded)
page.ItemManipulationModel.FocusFileList();
else
AddressToolbar?.Focus(FocusState.Programmatic);
}
}

Expand Down
9 changes: 0 additions & 9 deletions src/Files.App/Views/ColumnShellPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,6 @@
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}"
Modifiers="Menu" />
<KeyboardAccelerator
Key="F"
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}"
Modifiers="Control" />
<KeyboardAccelerator
Key="F3"
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}" />
</local:BaseShellPage.KeyboardAccelerators>
<Grid
x:Name="RootGrid"
Expand Down
5 changes: 0 additions & 5 deletions src/Files.App/Views/ColumnShellPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,6 @@ private async void KeyboardAccelerator_Invoked(KeyboardAccelerator sender, Keybo
await storageHistoryHelpers.TryRedo();
break;

case (false, false, false, true, VirtualKey.F3): //f3
case (true, false, false, true, VirtualKey.F): // ctrl + f
ToolbarViewModel.SwitchSearchBoxVisibility();
break;

case (true, true, false, true, VirtualKey.N): // ctrl + shift + n, new item
if (InstanceViewModel.CanCreateFileInPage)
{
Expand Down
9 changes: 0 additions & 9 deletions src/Files.App/Views/ModernShellPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,6 @@
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}"
Modifiers="Menu" />
<KeyboardAccelerator
Key="F"
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}"
Modifiers="Control" />
<KeyboardAccelerator
Key="F3"
Invoked="KeyboardAccelerator_Invoked"
IsEnabled="{x:Bind IsCurrentInstance, Mode=OneWay}" />
</local:BaseShellPage.KeyboardAccelerators>

<Frame
Expand Down
7 changes: 0 additions & 7 deletions src/Files.App/Views/ModernShellPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,6 @@ private async void KeyboardAccelerator_Invoked(KeyboardAccelerator sender, Keybo

break;

case (false, false, false, _, VirtualKey.F3): //f3
case (true, false, false, _, VirtualKey.F): // ctrl + f
if (tabInstance || CurrentPageType == typeof(WidgetsPage))
ToolbarViewModel.SwitchSearchBoxVisibility();

break;

case (true, true, false, true, VirtualKey.N): // ctrl + shift + n, new item
if (InstanceViewModel.CanCreateFileInPage)
{
Expand Down