diff --git a/src/Files.App/Actions/Show/ToggleSidebarAction.cs b/src/Files.App/Actions/Show/ToggleSidebarAction.cs new file mode 100644 index 000000000000..e400392d37ad --- /dev/null +++ b/src/Files.App/Actions/Show/ToggleSidebarAction.cs @@ -0,0 +1,40 @@ +// Copyright (c) 2024 Files Community +// Licensed under the MIT License. See the LICENSE. + +namespace Files.App.Actions +{ + internal sealed class ToggleSidebarAction : IToggleAction + { + private IAppearanceSettingsService AppearanceSettingsService { get; } = Ioc.Default.GetRequiredService(); + + public string Label + => "ToggleSidebar".GetLocalizedResource(); + + public string Description + => "ToggleSidebarDescription".GetLocalizedResource(); + + public HotKey HotKey + => new(Keys.S, KeyModifiers.CtrlAlt); + + public bool IsOn + => AppearanceSettingsService.IsSidebarOpen; + + public ToggleSidebarAction() + { + AppearanceSettingsService.PropertyChanged += ViewModel_PropertyChanged; + } + + public Task ExecuteAsync(object? parameter = null) + { + AppearanceSettingsService.IsSidebarOpen = !IsOn; + + return Task.CompletedTask; + } + + private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e) + { + if (e.PropertyName is nameof(AppearanceSettingsService.IsSidebarOpen)) + OnPropertyChanged(nameof(IsOn)); + } + } +} diff --git a/src/Files.App/Data/Commands/Manager/CommandCodes.cs b/src/Files.App/Data/Commands/Manager/CommandCodes.cs index 42858fa1303a..638a998a6cad 100644 --- a/src/Files.App/Data/Commands/Manager/CommandCodes.cs +++ b/src/Files.App/Data/Commands/Manager/CommandCodes.cs @@ -26,6 +26,7 @@ public enum CommandCodes ToggleDetailsPane, ToggleInfoPane, ToggleToolbar, + ToggleSidebar, // File System CopyItem, diff --git a/src/Files.App/Data/Commands/Manager/CommandManager.cs b/src/Files.App/Data/Commands/Manager/CommandManager.cs index aba8781e33ca..27ec361df8a0 100644 --- a/src/Files.App/Data/Commands/Manager/CommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/CommandManager.cs @@ -57,6 +57,7 @@ public IRichCommand this[HotKey hotKey] public IRichCommand ToggleDetailsPane => commands[CommandCodes.ToggleDetailsPane]; public IRichCommand ToggleInfoPane => commands[CommandCodes.ToggleInfoPane]; public IRichCommand ToggleToolbar => commands[CommandCodes.ToggleToolbar]; + public IRichCommand ToggleSidebar => commands[CommandCodes.ToggleSidebar]; public IRichCommand SelectAll => commands[CommandCodes.SelectAll]; public IRichCommand InvertSelection => commands[CommandCodes.InvertSelection]; public IRichCommand ClearSelection => commands[CommandCodes.ClearSelection]; @@ -253,6 +254,7 @@ public IEnumerator GetEnumerator() => [CommandCodes.ToggleDetailsPane] = new ToggleDetailsPaneAction(), [CommandCodes.ToggleInfoPane] = new ToggleInfoPaneAction(), [CommandCodes.ToggleToolbar] = new ToggleToolbarAction(), + [CommandCodes.ToggleSidebar] = new ToggleSidebarAction(), [CommandCodes.SelectAll] = new SelectAllAction(), [CommandCodes.InvertSelection] = new InvertSelectionAction(), [CommandCodes.ClearSelection] = new ClearSelectionAction(), diff --git a/src/Files.App/Data/Commands/Manager/ICommandManager.cs b/src/Files.App/Data/Commands/Manager/ICommandManager.cs index 03735eed1d38..42f8a36485a7 100644 --- a/src/Files.App/Data/Commands/Manager/ICommandManager.cs +++ b/src/Files.App/Data/Commands/Manager/ICommandManager.cs @@ -31,6 +31,7 @@ public interface ICommandManager : IEnumerable IRichCommand ToggleDetailsPane { get; } IRichCommand ToggleInfoPane { get; } IRichCommand ToggleToolbar { get; } + IRichCommand ToggleSidebar { get; } IRichCommand CopyItem { get; } IRichCommand CopyItemPath { get; }