Skip to content

Commit bb138fd

Browse files
Rich Commands: Toggle sidebar (#11847)
Co-authored-by: Yair <[email protected]>
1 parent 443a71e commit bb138fd

File tree

8 files changed

+51
-23
lines changed

8 files changed

+51
-23
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using CommunityToolkit.Mvvm.ComponentModel;
2+
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using Files.App.Commands;
4+
using Files.App.Extensions;
5+
using Files.App.ViewModels;
6+
using System.ComponentModel;
7+
using System.Threading.Tasks;
8+
using Windows.System;
9+
10+
namespace Files.App.Actions
11+
{
12+
internal class ToggleSidebarAction : ObservableObject, IToggleAction
13+
{
14+
private readonly SidebarViewModel viewModel = Ioc.Default.GetRequiredService<SidebarViewModel>();
15+
16+
public string Label { get; } = "ToggleSidebar".GetLocalizedResource();
17+
18+
public string Description { get; } = "TODO: Need to be described.";
19+
20+
public HotKey HotKey { get; } = new(VirtualKey.B, VirtualKeyModifiers.Control);
21+
22+
public bool IsOn => viewModel.IsSidebarOpen;
23+
24+
public ToggleSidebarAction()
25+
{
26+
viewModel.PropertyChanged += ViewModel_PropertyChanged;
27+
}
28+
29+
public Task ExecuteAsync()
30+
{
31+
viewModel.IsSidebarOpen = !IsOn;
32+
return Task.CompletedTask;
33+
}
34+
35+
private void ViewModel_PropertyChanged(object? sender, PropertyChangedEventArgs e)
36+
{
37+
if (e.PropertyName is nameof(SidebarViewModel.IsSidebarOpen))
38+
OnPropertyChanged(nameof(IsOn));
39+
}
40+
}
41+
}

src/Files.App/App.xaml.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ protected override void OnLaunched(LaunchActivatedEventArgs e)
229229
.AddSingleton<IJumpListService, JumpListService>()
230230
.AddSingleton<MainPageViewModel>()
231231
.AddSingleton<PreviewPaneViewModel>()
232+
.AddSingleton<SidebarViewModel>()
232233
.AddSingleton<SettingsViewModel>()
233234
.AddSingleton<OngoingTasksViewModel>()
234235
.AddSingleton<AppearanceViewModel>()

src/Files.App/Commands/CommandCodes.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public enum CommandCodes
1616
ToggleShowHiddenItems,
1717
ToggleShowFileExtensions,
1818
TogglePreviewPane,
19+
ToggleSidebar,
1920

2021
// File System
2122
CopyItem,

src/Files.App/Commands/Manager/CommandManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ internal class CommandManager : ICommandManager
3232
public IRichCommand ToggleShowHiddenItems => commands[CommandCodes.ToggleShowHiddenItems];
3333
public IRichCommand ToggleShowFileExtensions => commands[CommandCodes.ToggleShowFileExtensions];
3434
public IRichCommand TogglePreviewPane => commands[CommandCodes.TogglePreviewPane];
35+
public IRichCommand ToggleSidebar => commands[CommandCodes.ToggleSidebar];
3536
public IRichCommand SelectAll => commands[CommandCodes.SelectAll];
3637
public IRichCommand InvertSelection => commands[CommandCodes.InvertSelection];
3738
public IRichCommand ClearSelection => commands[CommandCodes.ClearSelection];
@@ -164,6 +165,7 @@ public CommandManager()
164165
[CommandCodes.ToggleShowHiddenItems] = new ToggleShowHiddenItemsAction(),
165166
[CommandCodes.ToggleShowFileExtensions] = new ToggleShowFileExtensionsAction(),
166167
[CommandCodes.TogglePreviewPane] = new TogglePreviewPaneAction(),
168+
[CommandCodes.ToggleSidebar] = new ToggleSidebarAction(),
167169
[CommandCodes.SelectAll] = new SelectAllAction(),
168170
[CommandCodes.InvertSelection] = new InvertSelectionAction(),
169171
[CommandCodes.ClearSelection] = new ClearSelectionAction(),

src/Files.App/Commands/Manager/ICommandManager.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public interface ICommandManager : IEnumerable<IRichCommand>
1919
IRichCommand ToggleShowHiddenItems { get; }
2020
IRichCommand ToggleShowFileExtensions { get; }
2121
IRichCommand TogglePreviewPane { get; }
22+
IRichCommand ToggleSidebar { get; }
2223

2324
IRichCommand CopyItem { get; }
2425
IRichCommand CopyPath { get; }

src/Files.App/Strings/en-US/Resources.resw

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2661,6 +2661,9 @@
26612661
<data name="ExitCompactOverlayDescription" xml:space="preserve">
26622662
<value>Exit compact overlay</value>
26632663
</data>
2664+
<data name="ToggleSidebar" xml:space="preserve">
2665+
<value>Toggle the sidebar</value>
2666+
</data>
26642667
<data name="Key.Menu" xml:space="preserve">
26652668
<value>Menu</value>
26662669
<comment>Key name for hotkeys in menus. Use abbreviation if possible.</comment>

src/Files.App/Views/MainPage.xaml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,16 +131,6 @@
131131
</icore:EventTriggerBehavior>
132132
</i:Interaction.Behaviors>
133133
</KeyboardAccelerator>
134-
<KeyboardAccelerator
135-
Key="S"
136-
x:Name="ToggleSidebarVisibilityKeyboardAcceleretor"
137-
Modifiers="Control,Menu">
138-
<i:Interaction.Behaviors>
139-
<icore:EventTriggerBehavior EventName="Invoked">
140-
<icore:InvokeCommandAction Command="{x:Bind ToggleSidebarCollapsedStateCommand}" />
141-
</icore:EventTriggerBehavior>
142-
</i:Interaction.Behaviors>
143-
</KeyboardAccelerator>
144134
</Page.KeyboardAccelerators>
145135

146136
<Border>

src/Files.App/Views/MainPage.xaml.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using CommunityToolkit.Mvvm.DependencyInjection;
2-
using CommunityToolkit.Mvvm.Input;
32
using CommunityToolkit.WinUI.Helpers;
43
using CommunityToolkit.WinUI.UI;
54
using CommunityToolkit.WinUI.UI.Controls;
@@ -25,7 +24,6 @@
2524
using System.ComponentModel;
2625
using System.Runtime.CompilerServices;
2726
using System.Threading.Tasks;
28-
using System.Windows.Input;
2927
using UWPToWinAppSDKUpgradeHelpers;
3028
using Windows.ApplicationModel;
3129
using Windows.Services.Store;
@@ -45,6 +43,8 @@ public sealed partial class MainPage : Page, INotifyPropertyChanged
4543
public ICommandManager Commands { get; } = Ioc.Default.GetRequiredService<ICommandManager>();
4644
public IWindowContext WindowContext { get; } = Ioc.Default.GetRequiredService<IWindowContext>();
4745

46+
public SidebarViewModel SidebarAdaptiveViewModel = Ioc.Default.GetRequiredService<SidebarViewModel>();
47+
4848
public AppModel AppModel => App.AppModel;
4949

5050
public MainPageViewModel ViewModel
@@ -53,20 +53,15 @@ public MainPageViewModel ViewModel
5353
set => DataContext = value;
5454
}
5555

56-
5756
/// <summary>
5857
/// True if the user is currently resizing the preview pane
5958
/// </summary>
6059
private bool draggingPreviewPane;
6160

6261
private bool keyReleased = true;
6362

64-
public SidebarViewModel SidebarAdaptiveViewModel = new SidebarViewModel();
65-
6663
public readonly OngoingTasksViewModel OngoingTasksViewModel;
6764

68-
private ICommand ToggleSidebarCollapsedStateCommand => new RelayCommand<KeyboardAcceleratorInvokedEventArgs>(x => ToggleSidebarCollapsedState(x));
69-
7065
public MainPage()
7166
{
7267
InitializeComponent();
@@ -406,12 +401,6 @@ private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
406401
}
407402
}
408403

409-
private void ToggleSidebarCollapsedState(KeyboardAcceleratorInvokedEventArgs? e)
410-
{
411-
SidebarAdaptiveViewModel.IsSidebarOpen = !SidebarAdaptiveViewModel.IsSidebarOpen;
412-
e!.Handled = true;
413-
}
414-
415404
private void SidebarControl_Loaded(object sender, RoutedEventArgs e)
416405
{
417406
SidebarAdaptiveViewModel.UpdateTabControlMargin(); // Set the correct tab margin on startup

0 commit comments

Comments
 (0)