Skip to content

Commit 0221243

Browse files
RichCommands: Navigate Up, Back and Forward (#11829)
1 parent 9cd21ac commit 0221243

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+464
-332
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using CommunityToolkit.Mvvm.ComponentModel;
2+
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using Files.App.Commands;
4+
using Files.App.Contexts;
5+
using Files.App.Extensions;
6+
using System.ComponentModel;
7+
using System.Threading.Tasks;
8+
using Windows.System;
9+
10+
namespace Files.App.Actions
11+
{
12+
internal class NavigateBackAction : ObservableObject, IAction
13+
{
14+
private readonly IContentPageContext context = Ioc.Default.GetRequiredService<IContentPageContext>();
15+
16+
public string Label { get; } = "Back".GetLocalizedResource();
17+
18+
public string Description { get; } = "NavigateBack".GetLocalizedResource();
19+
20+
public HotKey HotKey { get; } = new(VirtualKey.Left, VirtualKeyModifiers.Menu);
21+
public HotKey SecondHotKey { get; } = new(VirtualKey.Back);
22+
public HotKey ThirdHotKey { get; } = new(VirtualKey.XButton1);
23+
24+
public RichGlyph Glyph { get; } = new("\uE72B");
25+
26+
public bool IsExecutable => context.CanGoBack;
27+
28+
public NavigateBackAction()
29+
{
30+
context.PropertyChanged += Context_PropertyChanged;
31+
}
32+
33+
public Task ExecuteAsync()
34+
{
35+
context.ShellPage!.Back_Click();
36+
return Task.CompletedTask;
37+
}
38+
39+
private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
40+
{
41+
switch (e.PropertyName)
42+
{
43+
case nameof(IContentPageContext.CanGoBack):
44+
OnPropertyChanged(nameof(IsExecutable));
45+
break;
46+
}
47+
}
48+
}
49+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using CommunityToolkit.Mvvm.ComponentModel;
2+
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using Files.App.Commands;
4+
using Files.App.Contexts;
5+
using Files.App.Extensions;
6+
using System.ComponentModel;
7+
using System.Threading.Tasks;
8+
using Windows.System;
9+
10+
namespace Files.App.Actions
11+
{
12+
internal class NavigateForwardAction : ObservableObject, IAction
13+
{
14+
private readonly IContentPageContext context = Ioc.Default.GetRequiredService<IContentPageContext>();
15+
16+
public string Label { get; } = "Forward".GetLocalizedResource();
17+
18+
public string Description { get; } = "NavigateForward".GetLocalizedResource();
19+
20+
public HotKey HotKey { get; } = new(VirtualKey.Right, VirtualKeyModifiers.Menu);
21+
public HotKey SecondHotKey { get; } = new(VirtualKey.XButton2);
22+
23+
public RichGlyph Glyph { get; } = new("\uE72A");
24+
25+
public bool IsExecutable => context.CanGoForward;
26+
27+
public NavigateForwardAction()
28+
{
29+
context.PropertyChanged += Context_PropertyChanged;
30+
}
31+
32+
public Task ExecuteAsync()
33+
{
34+
context.ShellPage!.Forward_Click();
35+
return Task.CompletedTask;
36+
}
37+
38+
private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
39+
{
40+
switch (e.PropertyName)
41+
{
42+
case nameof(IContentPageContext.CanGoForward):
43+
OnPropertyChanged(nameof(IsExecutable));
44+
break;
45+
}
46+
}
47+
}
48+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+

2+
using CommunityToolkit.Mvvm.ComponentModel;
3+
using CommunityToolkit.Mvvm.DependencyInjection;
4+
using Files.App.Commands;
5+
using Files.App.Contexts;
6+
using Files.App.Extensions;
7+
using System.ComponentModel;
8+
using System.Threading.Tasks;
9+
using Windows.System;
10+
11+
namespace Files.App.Actions
12+
{
13+
internal class NavigateUpAction : ObservableObject, IAction
14+
{
15+
private readonly IContentPageContext context = Ioc.Default.GetRequiredService<IContentPageContext>();
16+
17+
public string Label { get; } = "Up".GetLocalizedResource();
18+
19+
public string Description { get; } = "NavigateUp".GetLocalizedResource();
20+
21+
public HotKey HotKey { get; } = new(VirtualKey.Up, VirtualKeyModifiers.Menu);
22+
23+
public RichGlyph Glyph { get; } = new("\uE74A");
24+
25+
public bool IsExecutable => context.CanNavigateToParent;
26+
27+
public NavigateUpAction()
28+
{
29+
context.PropertyChanged += Context_PropertyChanged;
30+
}
31+
32+
public Task ExecuteAsync()
33+
{
34+
context.ShellPage!.Up_Click();
35+
return Task.CompletedTask;
36+
}
37+
38+
private void Context_PropertyChanged(object? sender, PropertyChangedEventArgs e)
39+
{
40+
switch (e.PropertyName)
41+
{
42+
case nameof(IContentPageContext.CanNavigateToParent):
43+
OnPropertyChanged(nameof(IsExecutable));
44+
break;
45+
}
46+
}
47+
}
48+
}

src/Files.App/Commands/CommandCodes.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ public enum CommandCodes
127127

128128
// Navigation
129129
NewTab,
130+
NavigateBack,
131+
NavigateForward,
132+
NavigateUp,
133+
134+
// Other
130135
DuplicateCurrentTab,
131136
DuplicateSelectedTab,
132137
CloseTabsToTheLeftCurrent,

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ internal class CommandManager : ICommandManager
111111
public IRichCommand GroupDescending => commands[CommandCodes.GroupDescending];
112112
public IRichCommand ToggleGroupDirection => commands[CommandCodes.ToggleGroupDirection];
113113
public IRichCommand NewTab => commands[CommandCodes.NewTab];
114+
public IRichCommand NavigateBack => commands[CommandCodes.NavigateBack];
115+
public IRichCommand NavigateForward => commands[CommandCodes.NavigateForward];
116+
public IRichCommand NavigateUp => commands[CommandCodes.NavigateUp];
114117
public IRichCommand DuplicateCurrentTab => commands[CommandCodes.DuplicateCurrentTab];
115118
public IRichCommand DuplicateSelectedTab => commands[CommandCodes.DuplicateSelectedTab];
116119
public IRichCommand CloseTabsToTheLeftCurrent => commands[CommandCodes.CloseTabsToTheLeftCurrent];
@@ -236,6 +239,9 @@ public CommandManager()
236239
[CommandCodes.GroupDescending] = new GroupDescendingAction(),
237240
[CommandCodes.ToggleGroupDirection] = new ToggleGroupDirectionAction(),
238241
[CommandCodes.NewTab] = new NewTabAction(),
242+
[CommandCodes.NavigateBack] = new NavigateBackAction(),
243+
[CommandCodes.NavigateForward] = new NavigateForwardAction(),
244+
[CommandCodes.NavigateUp] = new NavigateUpAction(),
239245
[CommandCodes.DuplicateCurrentTab] = new DuplicateCurrentTabAction(),
240246
[CommandCodes.DuplicateSelectedTab] = new DuplicateSelectedTabAction(),
241247
[CommandCodes.CloseTabsToTheLeftCurrent] = new CloseTabsToTheLeftCurrentAction(),

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ public interface ICommandManager : IEnumerable<IRichCommand>
112112
IRichCommand ToggleGroupDirection { get; }
113113

114114
IRichCommand NewTab { get; }
115+
IRichCommand NavigateBack { get; }
116+
IRichCommand NavigateForward { get; }
117+
IRichCommand NavigateUp { get; }
118+
115119
IRichCommand DuplicateCurrentTab { get; }
116120
IRichCommand DuplicateSelectedTab { get; }
117121
IRichCommand CloseTabsToTheLeftCurrent { get; }

src/Files.App/Contexts/ContentPage/ContentPageContext.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ internal class ContentPageContext : ObservableObject, IContentPageContext
3434
private IReadOnlyList<ListedItem> selectedItems = emptyItems;
3535
public IReadOnlyList<ListedItem> SelectedItems => selectedItems;
3636

37-
public bool CanRefresh => ShellPage is not null && ShellPage.ToolbarViewModel.CanRefresh;
37+
public bool CanRefresh => ShellPage is not null && ShellPage.ToolbarViewModel.CanRefresh;
38+
39+
public bool CanGoBack => ShellPage is not null && ShellPage.ToolbarViewModel.CanGoBack;
40+
41+
public bool CanGoForward => ShellPage is not null && ShellPage.ToolbarViewModel.CanGoForward;
42+
43+
public bool CanNavigateToParent => ShellPage is not null && ShellPage.ToolbarViewModel.CanNavigateToParent;
3844

3945
public ContentPageContext()
4046
{
@@ -98,6 +104,9 @@ private void ToolbarViewModel_PropertyChanged(object? sender, PropertyChangedEve
98104
{
99105
switch (e.PropertyName)
100106
{
107+
case nameof(ToolbarViewModel.CanGoBack):
108+
case nameof(ToolbarViewModel.CanGoForward):
109+
case nameof(ToolbarViewModel.CanNavigateToParent):
101110
case nameof(ToolbarViewModel.HasItem):
102111
case nameof(ToolbarViewModel.CanRefresh):
103112
OnPropertyChanged(e.PropertyName);
@@ -121,6 +130,9 @@ private void Update()
121130

122131
OnPropertyChanged(nameof(Folder));
123132
OnPropertyChanged(nameof(HasItem));
133+
OnPropertyChanged(nameof(CanGoBack));
134+
OnPropertyChanged(nameof(CanGoForward));
135+
OnPropertyChanged(nameof(CanNavigateToParent));
124136
OnPropertyChanged(nameof(CanRefresh));
125137
}
126138

src/Files.App/Contexts/ContentPage/IContentPageContext.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,9 @@ public interface IContentPageContext : INotifyPropertyChanged
1717
bool CanRefresh { get; }
1818
ListedItem? SelectedItem { get; }
1919
IReadOnlyList<ListedItem> SelectedItems { get; }
20+
21+
bool CanGoBack { get; }
22+
bool CanGoForward { get; }
23+
bool CanNavigateToParent { get; }
2024
}
2125
}

src/Files.App/IAddressToolbar.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,6 @@ public interface IAddressToolbar
3939

4040
public event ItemDraggedOverPathItemEventHandler ItemDraggedOverPathItem;
4141

42-
public event EventHandler BackRequested;
43-
44-
public event EventHandler ForwardRequested;
45-
46-
public event EventHandler UpRequested;
47-
4842
public event EventHandler RefreshRequested;
4943

5044
public event EventHandler RefreshWidgetsRequested;

src/Files.App/IShellPage.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ public interface IShellPage : ITabItemContent, IMultiPaneInfo, IDisposable
2727

2828
void Refresh_Click();
2929

30+
void Back_Click();
31+
32+
void Forward_Click();
33+
3034
void Up_Click();
3135

3236
void UpdatePathUIToWorkingDirectory(string newWorkingDir, string singleItemOverride = null);

src/Files.App/Strings/af/Resources.resw

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,13 @@
315315
<data name="EmptyFolder.Text" xml:space="preserve">
316316
<value>Hierdie omslag is leeg.</value>
317317
</data>
318-
<data name="NavBackButton.ToolTipService.ToolTip" xml:space="preserve">
318+
<data name="Back" xml:space="preserve">
319319
<value>Terug (Alt+Linkerpyltjie)</value>
320320
</data>
321-
<data name="NavForwardButton.ToolTipService.ToolTip" xml:space="preserve">
321+
<data name="Forward" xml:space="preserve">
322322
<value>Vorentoe (Alt+Regterpyltjie)</value>
323323
</data>
324-
<data name="NavUpButton.ToolTipService.ToolTip" xml:space="preserve">
324+
<data name="Up" xml:space="preserve">
325325
<value>Op (Alt+Oppyltjie)</value>
326326
</data>
327327
<data name="NavRefreshButton.ToolTipService.ToolTip" xml:space="preserve">
@@ -660,16 +660,16 @@
660660
<data name="LayoutMode" xml:space="preserve">
661661
<value>Uitlegmodus</value>
662662
</data>
663-
<data name="NavBackButton.AutomationProperties.Name" xml:space="preserve">
663+
<data name="NavigateBack" xml:space="preserve">
664664
<value>Navigeer agteruit</value>
665665
</data>
666-
<data name="NavForwardButton.AutomationProperties.Name" xml:space="preserve">
666+
<data name="NavigateForward" xml:space="preserve">
667667
<value>Navigeer vorentoe</value>
668668
</data>
669669
<data name="NavResfreshButton.AutomationProperties.Name" xml:space="preserve">
670670
<value>Verfris die gids</value>
671671
</data>
672-
<data name="NavUpButton.AutomationProperties.Name" xml:space="preserve">
672+
<data name="NavigateUp" xml:space="preserve">
673673
<value>Gaan op een gids</value>
674674
</data>
675675
<data name="Language" xml:space="preserve">

src/Files.App/Strings/ar/Resources.resw

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,13 @@
315315
<data name="EmptyFolder.Text" xml:space="preserve">
316316
<value>‏‏هذا المجلد فارغ</value>
317317
</data>
318-
<data name="NavBackButton.ToolTipService.ToolTip" xml:space="preserve">
318+
<data name="Back" xml:space="preserve">
319319
<value>‏‏الانتقال للخلف (Alt + مفتاح السهم الأيسر)</value>
320320
</data>
321-
<data name="NavForwardButton.ToolTipService.ToolTip" xml:space="preserve">
321+
<data name="Forward" xml:space="preserve">
322322
<value>‏‏الانتقال للأمام (Alt + مفتاح السهم الأيمن)</value>
323323
</data>
324-
<data name="NavUpButton.ToolTipService.ToolTip" xml:space="preserve">
324+
<data name="Up" xml:space="preserve">
325325
<value>‏‏الانتقال للاعلى (Alt + مفتاح السهم الأيمن)</value>
326326
</data>
327327
<data name="NavRefreshButton.ToolTipService.ToolTip" xml:space="preserve">
@@ -660,16 +660,16 @@
660660
<data name="LayoutMode" xml:space="preserve">
661661
<value>وضع التخطيط</value>
662662
</data>
663-
<data name="NavBackButton.AutomationProperties.Name" xml:space="preserve">
663+
<data name="NavigateBack" xml:space="preserve">
664664
<value>انتقل إلى الخلف</value>
665665
</data>
666-
<data name="NavForwardButton.AutomationProperties.Name" xml:space="preserve">
666+
<data name="NavigateForward" xml:space="preserve">
667667
<value>التنقل للأمام</value>
668668
</data>
669669
<data name="NavResfreshButton.AutomationProperties.Name" xml:space="preserve">
670670
<value>قم بتحديث الدليل</value>
671671
</data>
672-
<data name="NavUpButton.AutomationProperties.Name" xml:space="preserve">
672+
<data name="NavigateUp" xml:space="preserve">
673673
<value>اصعد دليل واحد</value>
674674
</data>
675675
<data name="Language" xml:space="preserve">

src/Files.App/Strings/bg/Resources.resw

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,13 @@
315315
<data name="EmptyFolder.Text" xml:space="preserve">
316316
<value>Тази папка е празна.</value>
317317
</data>
318-
<data name="NavBackButton.ToolTipService.ToolTip" xml:space="preserve">
318+
<data name="Back" xml:space="preserve">
319319
<value>Назад (Alt+Стрелка наляво)</value>
320320
</data>
321-
<data name="NavForwardButton.ToolTipService.ToolTip" xml:space="preserve">
321+
<data name="Forward" xml:space="preserve">
322322
<value>Напред (Alt+Стрелка надясно)</value>
323323
</data>
324-
<data name="NavUpButton.ToolTipService.ToolTip" xml:space="preserve">
324+
<data name="Up" xml:space="preserve">
325325
<value>Нагоре (Alt+Стрелка нагоре)</value>
326326
</data>
327327
<data name="NavRefreshButton.ToolTipService.ToolTip" xml:space="preserve">
@@ -660,16 +660,16 @@
660660
<data name="LayoutMode" xml:space="preserve">
661661
<value>Режим на оформление</value>
662662
</data>
663-
<data name="NavBackButton.AutomationProperties.Name" xml:space="preserve">
663+
<data name="NavigateBack" xml:space="preserve">
664664
<value>Навигирай назад</value>
665665
</data>
666-
<data name="NavForwardButton.AutomationProperties.Name" xml:space="preserve">
666+
<data name="NavigateForward" xml:space="preserve">
667667
<value>Навигирай напред</value>
668668
</data>
669669
<data name="NavResfreshButton.AutomationProperties.Name" xml:space="preserve">
670670
<value>Обнови директорията</value>
671671
</data>
672-
<data name="NavUpButton.AutomationProperties.Name" xml:space="preserve">
672+
<data name="NavigateUp" xml:space="preserve">
673673
<value>Отиди една директория нагоре</value>
674674
</data>
675675
<data name="Language" xml:space="preserve">

0 commit comments

Comments
 (0)