Skip to content

Commit abc121f

Browse files
committed
Init
1 parent a31cfc6 commit abc121f

File tree

4 files changed

+107
-35
lines changed

4 files changed

+107
-35
lines changed

src/Files.App/Data/Items/NavigationBarSuggestionItem.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
// Copyright (c) Files Community
22
// Licensed under the MIT License.
33

4+
using Files.App.Controls;
5+
46
namespace Files.App.Data.Items
57
{
68
[Obsolete("Remove once Omnibar goes out of experimental.")]
7-
public sealed partial class NavigationBarSuggestionItem : ObservableObject
9+
public sealed partial class NavigationBarSuggestionItem : ObservableObject, IOmnibarTextMemberPathProvider
810
{
911
private string? _Text;
1012
public string? Text
@@ -88,5 +90,16 @@ private void UpdatePrimaryDisplay()
8890
}
8991
}
9092
}
93+
94+
public string GetTextMemberPath(string textMemberPath)
95+
{
96+
return textMemberPath switch
97+
{
98+
nameof(Text) => Text,
99+
nameof(PrimaryDisplay) => PrimaryDisplay,
100+
nameof(SearchText) => SearchText,
101+
_ => string.Empty
102+
};
103+
}
91104
}
92105
}

src/Files.App/UserControls/NavigationToolbar.xaml

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -383,42 +383,42 @@
383383
IconOnActive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Commands}, IsFilled=True}"
384384
IconOnInactive="{controls:ThemedIconMarkup Style={StaticResource App.ThemedIcons.Omnibar.Commands}, IconType=Outline}"
385385
ModeName="{helpers:ResourceString Name=CommandPalette}"
386-
PlaceholderText="{helpers:ResourceString Name=OmnibarCommandPaletteModeTextPlaceholder}">
387-
<!--<controls:OmnibarMode.SuggestionItemTemplate>
388-
<DataTemplate x:DataType="data:OmnibarPaletteSuggestionItem">
389-
<Grid Height="48" ColumnSpacing="12">
386+
PlaceholderText="{helpers:ResourceString Name=OmnibarCommandPaletteModeTextPlaceholder}"
387+
SuggestionItemsSource="{x:Bind ViewModel.OmnibarCommandPaletteModeSuggestionItems, Mode=OneWay}"
388+
Text="{x:Bind ViewModel.OmnibarCommandPaletteModeText, Mode=TwoWay}"
389+
TextMemberPath="Text">
390+
<controls:OmnibarMode.SuggestionItemTemplate>
391+
<DataTemplate x:DataType="dataitems:NavigationBarSuggestionItem">
392+
<Grid ColumnSpacing="12">
390393
<Grid.ColumnDefinitions>
391394
<ColumnDefinition Width="Auto" />
392395
<ColumnDefinition Width="*" />
393396
<ColumnDefinition Width="Auto" />
394397
</Grid.ColumnDefinitions>
395-
<controls:ThemedIcon
396-
Width="20"
397-
Height="20"
398-
VerticalAlignment="Center"
399-
Style="{StaticResource App.ThemedIcons.Actions.Copying}" />
400-
<StackPanel Grid.Column="1" VerticalAlignment="Center">
401-
<TextBlock
402-
Style="{StaticResource BodyStrongTextBlockStyle}"
403-
Text="{x:Bind Title}"
404-
TextTrimming="CharacterEllipsis"
405-
TextWrapping="NoWrap" />
406-
<TextBlock
407-
Foreground="{ThemeResource TextFillColorSecondaryBrush}"
408-
Style="{StaticResource CaptionTextBlockStyle}"
409-
Text="{x:Bind Description}"
410-
TextTrimming="CharacterEllipsis"
411-
TextWrapping="NoWrap" />
412-
</StackPanel>
413-
<StackPanel Grid.Column="2" VerticalAlignment="Center">
414-
<TextBlock
415-
Text="{x:Bind HotKeys}"
416-
TextTrimming="CharacterEllipsis"
417-
TextWrapping="NoWrap" />
418-
</StackPanel>
398+
399+
<ContentPresenter Grid.Column="0">
400+
<controls:ThemedIcon Style="{ThemeResource App.ThemedIcons.Filter}" />
401+
</ContentPresenter>
402+
403+
<!-- Primary Title -->
404+
<TextBlock
405+
x:Name="PrimaryDisplayBlock"
406+
Grid.Column="1"
407+
Foreground="{ThemeResource TextFillColorPrimaryBrush}"
408+
MaxLines="1"
409+
TextTrimming="CharacterEllipsis"
410+
TextWrapping="NoWrap">
411+
<Run FontWeight="Normal" Text="{x:Bind PrimaryDisplayPreMatched, Mode=OneWay}" /><Run FontWeight="Bold" Text="{x:Bind PrimaryDisplayMatched, Mode=OneWay}" /><Run FontWeight="Normal" Text="{x:Bind PrimaryDisplayPostMatched, Mode=OneWay}" />
412+
</TextBlock>
413+
414+
<!-- Keyboard Shortcuts -->
415+
<keyboard:KeyboardShortcut
416+
x:Name="RightAlignedKeyboardShortcut"
417+
Grid.Column="2"
418+
HotKeys="{x:Bind HotKeys, Mode=OneWay}" />
419419
</Grid>
420420
</DataTemplate>
421-
</controls:OmnibarMode.SuggestionItemTemplate>-->
421+
</controls:OmnibarMode.SuggestionItemTemplate>
422422
</controls:OmnibarMode>
423423

424424
<controls:OmnibarMode

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

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,19 +256,47 @@ private void ClickablePath_GettingFocus(UIElement sender, GettingFocusEventArgs
256256

257257
private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedEventArgs args)
258258
{
259-
await ViewModel.HandleItemNavigationAsync(args.Text);
259+
if (Omnibar.CurrentSelectedMode == OmnibarPathMode)
260+
{
261+
await ViewModel.HandleItemNavigationAsync(args.Text);
262+
}
263+
else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode)
264+
{
265+
}
266+
else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode)
267+
{
268+
}
260269
}
261270

262271
private async void Omnibar_SuggestionChosen(Omnibar sender, OmnibarSuggestionChosenEventArgs args)
263272
{
264-
if (args.SelectedItem is OmnibarPathModeSuggestionModel item &&
265-
!string.IsNullOrEmpty(item.Path))
266-
await ViewModel.HandleItemNavigationAsync(item.Path);
273+
if (Omnibar.CurrentSelectedMode == OmnibarPathMode)
274+
{
275+
if (args.SelectedItem is OmnibarPathModeSuggestionModel item &&
276+
!string.IsNullOrEmpty(item.Path))
277+
await ViewModel.HandleItemNavigationAsync(item.Path);
278+
}
279+
else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode)
280+
{
281+
}
282+
else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode)
283+
{
284+
}
267285
}
268286

269287
private async void Omnibar_TextChanged(Omnibar sender, OmnibarTextChangedEventArgs args)
270288
{
271-
await ViewModel.PopulateOmnibarSuggestionsForPathMode();
289+
if (Omnibar.CurrentSelectedMode == OmnibarPathMode)
290+
{
291+
await ViewModel.PopulateOmnibarSuggestionsForPathMode();
292+
}
293+
else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode)
294+
{
295+
await ViewModel.PopulateOmnibarSuggestionsForCommandPaletteMode();
296+
}
297+
else if (Omnibar.CurrentSelectedMode == OmnibarSearchMode)
298+
{
299+
}
272300
}
273301

274302
private async void BreadcrumbBar_ItemClicked(Controls.BreadcrumbBar sender, Controls.BreadcrumbBarItemClickedEventArgs args)

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ public sealed partial class NavigationToolbarViewModel : ObservableObject, IAddr
7171

7272
internal ObservableCollection<OmnibarPathModeSuggestionModel> PathModeSuggestionItems { get; } = [];
7373

74+
internal ObservableCollection<NavigationBarSuggestionItem> OmnibarCommandPaletteModeSuggestionItems { get; } = [];
75+
7476
public bool IsSingleItemOverride { get; set; }
7577

7678
public bool SearchHasFocus { get; private set; }
@@ -218,6 +220,8 @@ public string? PathText
218220
}
219221
}
220222

223+
private string? _OmnibarCommandPaletteModeText;
224+
public string? OmnibarCommandPaletteModeText { get => _OmnibarCommandPaletteModeText; set => SetProperty(ref _OmnibarCommandPaletteModeText, value); }
221225

222226
private bool _IsOmnibarFocused;
223227
public bool IsOmnibarFocused
@@ -239,6 +243,7 @@ public bool IsOmnibarFocused
239243
_ = PopulateOmnibarSuggestionsForPathMode();
240244
break;
241245
case OmnibarPaletteModeName:
246+
_ = PopulateOmnibarSuggestionsForCommandPaletteMode();
242247
break;
243248
case OmnibarSearchModeName:
244249
break;
@@ -1126,6 +1131,32 @@ void AddNoResultsItem()
11261131
}
11271132
}
11281133

1134+
public async Task PopulateOmnibarSuggestionsForCommandPaletteMode()
1135+
{
1136+
if (string.IsNullOrEmpty(OmnibarCommandPaletteModeText))
1137+
return;
1138+
1139+
OmnibarCommandPaletteModeSuggestionItems.Clear();
1140+
1141+
IList<NavigationBarSuggestionItem>? suggestions = null;
1142+
1143+
suggestions = [.. Commands.Where(command =>
1144+
command.IsExecutable &&
1145+
command.IsAccessibleGlobally &&
1146+
(command.Description.Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase) ||
1147+
command.Code.ToString().Contains(OmnibarCommandPaletteModeText, StringComparison.OrdinalIgnoreCase)))
1148+
.Select(command => new NavigationBarSuggestionItem()
1149+
{
1150+
Text = command.Code.ToString(),
1151+
PrimaryDisplay = command.Description,
1152+
HotKeys = command.HotKeys,
1153+
SearchText = OmnibarCommandPaletteModeText,
1154+
})];
1155+
1156+
foreach (var suggestionItem in suggestions)
1157+
OmnibarCommandPaletteModeSuggestionItems.Add(suggestionItem);
1158+
}
1159+
11291160
[Obsolete("Remove once Omnibar goes out of experimental.")]
11301161
public async Task SetAddressBarSuggestionsAsync(AutoSuggestBox sender, IShellPage shellpage)
11311162
{

0 commit comments

Comments
 (0)