Skip to content

Commit e1ee482

Browse files
committed
Click on a suggestion
1 parent ad8dfc3 commit e1ee482

File tree

7 files changed

+29
-11
lines changed

7 files changed

+29
-11
lines changed

src/Files.App.Controls/Omnibar/Omnibar.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ private string GetObjectText(object obj)
237237
return obj is string text
238238
? text
239239
: obj is IOmnibarTextMemberPathProvider textMemberPathProvider
240-
? textMemberPathProvider.GetTextMemberPath(CurrentSelectedMode.DisplayMemberPath ?? string.Empty)
240+
? textMemberPathProvider.GetTextMemberPath(CurrentSelectedMode.TextMemberPath ?? string.Empty)
241241
: obj.ToString() ?? string.Empty;
242242
}
243243

src/Files.App.Controls/Omnibar/OmnibarMode.Properties.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ public partial class OmnibarMode
3535
public partial DataTemplate? SuggestionItemTemplate { get; set; }
3636

3737
[GeneratedDependencyProperty]
38-
public partial string? DisplayMemberPath { get; set; }
38+
/// <remark>
39+
/// Implement <see cref="IOmnibarTextMemberPathProvider"/> in <see cref="SuggestionItemsSource"/> to get the text member path from the suggestion item correctly.
40+
/// </remark>
41+
public partial string? TextMemberPath { get; set; }
3942

4043
[GeneratedDependencyProperty(DefaultValue = true)]
4144
public partial bool UpdateTextOnSelect { get; set; }
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
11
// Copyright (c) Files Community
22
// Licensed under the MIT License.
33

4+
using Files.App.Controls;
5+
46
namespace Files.App.Data.Models
57
{
6-
internal record OmnibarPathModeSuggestionModel(string Path, string DisplayName);
8+
internal record OmnibarPathModeSuggestionModel(string Path, string DisplayName) : IOmnibarTextMemberPathProvider
9+
{
10+
public string GetTextMemberPath(string textMemberPath)
11+
{
12+
return textMemberPath switch
13+
{
14+
nameof(Path) => Path,
15+
nameof(DisplayName) => DisplayName,
16+
_ => string.Empty
17+
};
18+
}
19+
}
720
}

src/Files.App/UserControls/NavigationToolbar.xaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -345,14 +345,14 @@
345345
SuggestionChosen="Omnibar_SuggestionChosen">
346346

347347
<controls:OmnibarMode
348-
DisplayMemberPath="Path"
349348
IconOnActive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Path}, IsFilled=True}"
350349
IconOnInactive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Path}, IconType=Outline}"
351350
IsDefault="True"
352351
ModeName="Path"
353352
PlaceholderText="{helpers:ResourceString Name=OmnibarPathModeTextPlaceholder}"
354353
SuggestionItemsSource="{x:Bind ViewModel.PathModeSuggestionItems, Mode=OneWay}"
355-
Text="{x:Bind ViewModel.OmnibarPathModeText, Mode=OneWay}">
354+
Text="{x:Bind ViewModel.OmnibarPathModeText, Mode=OneWay}"
355+
TextMemberPath="Path">
356356
<controls:OmnibarMode.ContentOnInactive>
357357
<controls:BreadcrumbBar
358358
x:Name="BreadcrumbBar"

src/Files.App/UserControls/NavigationToolbar.xaml.cs

+6-4
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,10 @@ private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs
254254
ViewModel.IsEditModeEnabled = true;
255255
}
256256

257-
private void Omnibar_SuggestionChosen(Controls.Omnibar sender, Controls.OmnibarSuggestionChosenEventArgs args)
257+
private async void Omnibar_SuggestionChosen(Omnibar sender, OmnibarSuggestionChosenEventArgs args)
258258
{
259-
259+
if (args.SelectedItem is OmnibarPathModeSuggestionModel item)
260+
await ViewModel.HandleFolderNavigationAsync(item.Path);
260261
}
261262

262263
private async void BreadcrumbBar_ItemClicked(Controls.BreadcrumbBar sender, Controls.BreadcrumbBarItemClickedEventArgs args)
@@ -267,7 +268,7 @@ private async void BreadcrumbBar_ItemClicked(Controls.BreadcrumbBar sender, Cont
267268
return;
268269
}
269270

270-
await ViewModel.HandleBreadcrumbBarItemClicked(ViewModel.PathComponents[args.Index].Path);
271+
await ViewModel.HandleFolderNavigationAsync(ViewModel.PathComponents[args.Index].Path);
271272
}
272273

273274
private async void BreadcrumbBar_ItemDropDownFlyoutOpening(object sender, BreadcrumbBarItemDropDownFlyoutEventArgs e)
@@ -286,13 +287,14 @@ private async void BreadcrumbBar_ItemDropDownFlyoutOpening(object sender, Breadc
286287
e.Flyout.Items.Add(new MenuFlyoutHeaderItem() { Text = "Drives" });
287288
e.Flyout.Items.Add(new MenuFlyoutItem() { Text = "Local Disk (C:)" });
288289
e.Flyout.Items.Add(new MenuFlyoutItem() { Text = "Local Disk (D:)" });
290+
289291
return;
290292
}
291293

292294
await ViewModel.SetPathBoxDropDownFlyoutAsync(e.Flyout, ViewModel.PathComponents[e.Index]);
293295
}
294296

295-
private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, Controls.BreadcrumbBarItemDropDownFlyoutEventArgs e)
297+
private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBarItemDropDownFlyoutEventArgs e)
296298
{
297299
// Clear the flyout items to save memory
298300
e.Flyout.Items.Clear();

src/Files.App/UserControls/PathBreadcrumb.xaml.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ textBlock.DataContext is not PathBoxItem item ||
5656
return;
5757

5858
// TODO: Implement middle click retrieving.
59-
await ViewModel.HandleBreadcrumbBarItemClicked(path);
59+
await ViewModel.HandleFolderNavigationAsync(path);
6060

6161
e.Handled = true;
6262
}

src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ public void PathBoxItem_PointerPressed(object sender, PointerRoutedEventArgs e)
596596
_pointerRoutedEventArgs = ptrPt.Properties.IsMiddleButtonPressed ? e : null;
597597
}
598598

599-
public async Task HandleBreadcrumbBarItemClicked(string path, bool? isMiddleButtonPressed = null)
599+
public async Task HandleFolderNavigationAsync(string path, bool? isMiddleButtonPressed = null)
600600
{
601601
isMiddleButtonPressed ??= _pointerRoutedEventArgs is not null;
602602
if (isMiddleButtonPressed is true)

0 commit comments

Comments
 (0)