Skip to content

Commit 11d1ab8

Browse files
committed
Added groups direction preferences
1 parent e9ec5ea commit 11d1ab8

File tree

10 files changed

+105
-16
lines changed

10 files changed

+105
-16
lines changed

src/Files.App/BaseLayout.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
using Windows.System;
3939
using static Files.App.Helpers.PathNormalization;
4040
using DispatcherQueueTimer = Microsoft.UI.Dispatching.DispatcherQueueTimer;
41+
using SortDirection = Files.Shared.Enums.SortDirection;
4142

4243
namespace Files.App
4344
{
@@ -377,6 +378,7 @@ protected override async void OnNavigatedTo(NavigationEventArgs eventArgs)
377378
IsItemSelected = false;
378379
FolderSettings!.LayoutModeChangeRequested += BaseFolderSettings_LayoutModeChangeRequested;
379380
FolderSettings.GroupOptionPreferenceUpdated += FolderSettings_GroupOptionPreferenceUpdated;
381+
FolderSettings.GroupDirectionPreferenceUpdated += FolderSettings_GroupDirectionPreferenceUpdated;
380382
ParentShellPageInstance.FilesystemViewModel.EmptyTextType = EmptyTextType.None;
381383
ParentShellPageInstance.ToolbarViewModel.UpdateSortAndGroupOptions();
382384
ParentShellPageInstance.ToolbarViewModel.CanRefresh = true;
@@ -485,13 +487,25 @@ private async void FolderSettings_GroupOptionPreferenceUpdated(object? sender, G
485487
await ParentShellPageInstance.FilesystemViewModel.ReloadItemGroupHeaderImagesAsync();
486488
}
487489

490+
private async void FolderSettings_GroupDirectionPreferenceUpdated(object? sender, SortDirection e)
491+
{
492+
// Two or more of these running at the same time will cause a crash, so cancel the previous one before beginning
493+
groupingCancellationToken?.Cancel();
494+
groupingCancellationToken = new CancellationTokenSource();
495+
var token = groupingCancellationToken.Token;
496+
await ParentShellPageInstance!.FilesystemViewModel.GroupOptionsUpdated(token);
497+
UpdateCollectionViewSource();
498+
await ParentShellPageInstance.FilesystemViewModel.ReloadItemGroupHeaderImagesAsync();
499+
}
500+
488501
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
489502
{
490503
base.OnNavigatingFrom(e);
491504
// Remove item jumping handler
492505
CharacterReceived -= Page_CharacterReceived;
493506
FolderSettings!.LayoutModeChangeRequested -= BaseFolderSettings_LayoutModeChangeRequested;
494507
FolderSettings.GroupOptionPreferenceUpdated -= FolderSettings_GroupOptionPreferenceUpdated;
508+
FolderSettings.GroupDirectionPreferenceUpdated -= FolderSettings_GroupDirectionPreferenceUpdated;
495509
ItemContextMenuFlyout.Opening -= ItemContextFlyout_Opening;
496510
BaseContextMenuFlyout.Opening -= BaseContextFlyout_Opening;
497511

src/Files.App/Helpers/ItemListDisplayHelpers/GroupingHelper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ public static (string key, string text, string range, int index) GetGroupSizeInf
140140
if (size > sizeGp.size)
141141
{
142142
var rangeStr = i > 0 ? $"{sizeGp.sizeText} - {sizeGroups[i - 1].sizeText}" : $"{sizeGp.sizeText} +";
143-
return (sizeGp.size.ToString(), sizeGp.text, rangeStr, i + 1); //i +1 is so that other groups always show below "unspecified"
143+
return (sizeGp.size.ToString(), sizeGp.text, rangeStr, sizeGroups.Length - i);
144144
}
145145
lastSizeStr = sizeGp.sizeText;
146146
}
147147

148-
return ("0", "ItemSizeText_Tiny".GetLocalizedResource(), $"{"0 B".ConvertSizeAbbreviation()} - {lastSizeStr}", sizeGroups.Length + 1);
148+
return ("0", "ItemSizeText_Tiny".GetLocalizedResource(), $"{"0 B".ConvertSizeAbbreviation()} - {lastSizeStr}", 0);
149149
}
150150

151151
public static string GetGroupSizeKey(long size)
@@ -175,4 +175,4 @@ public interface IGroupableItem
175175
{
176176
public string Key { get; set; }
177177
}
178-
}
178+
}

src/Files.App/Helpers/LayoutPreferences/LayoutPreferences.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class LayoutPreferences
1313
public SortDirection DirectorySortDirection;
1414
public bool SortDirectoriesAlongsideFiles;
1515
public GroupOption DirectoryGroupOption;
16+
public SortDirection DirectoryGroupDirection;
1617
public FolderLayoutModes LayoutMode;
1718
public int GridViewSize;
1819
public bool IsAdaptiveLayoutOverridden;
@@ -31,6 +32,7 @@ public LayoutPreferences()
3132
DirectorySortOption = UserSettingsService.FoldersSettingsService.DefaultSortOption;
3233
DirectoryGroupOption = UserSettingsService.FoldersSettingsService.DefaultGroupOption;
3334
DirectorySortDirection = UserSettingsService.LayoutSettingsService.DefaultDirectorySortDirection;
35+
DirectoryGroupDirection = UserSettingsService.LayoutSettingsService.DefaultDirectoryGroupDirection;
3436
SortDirectoriesAlongsideFiles = UserSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles;
3537
IsAdaptiveLayoutOverridden = defaultLayout is not FolderLayoutModes.Adaptive;
3638

@@ -71,6 +73,7 @@ public override bool Equals(object? obj)
7173
prefs.DirectoryGroupOption == DirectoryGroupOption &&
7274
prefs.DirectorySortOption == DirectorySortOption &&
7375
prefs.DirectorySortDirection == DirectorySortDirection &&
76+
prefs.DirectoryGroupDirection == DirectoryGroupDirection &&
7477
prefs.SortDirectoriesAlongsideFiles == SortDirectoriesAlongsideFiles &&
7578
prefs.IsAdaptiveLayoutOverridden == IsAdaptiveLayoutOverridden &&
7679
prefs.ColumnsViewModel.Equals(ColumnsViewModel));
@@ -85,6 +88,7 @@ public override int GetHashCode()
8588
hashCode = (hashCode * 397) ^ DirectoryGroupOption.GetHashCode();
8689
hashCode = (hashCode * 397) ^ DirectorySortOption.GetHashCode();
8790
hashCode = (hashCode * 397) ^ DirectorySortDirection.GetHashCode();
91+
hashCode = (hashCode * 397) ^ DirectoryGroupDirection.GetHashCode();
8892
hashCode = (hashCode * 397) ^ SortDirectoriesAlongsideFiles.GetHashCode();
8993
hashCode = (hashCode * 397) ^ IsAdaptiveLayoutOverridden.GetHashCode();
9094
hashCode = (hashCode * 397) ^ ColumnsViewModel.GetHashCode();

src/Files.App/ServicesImplementation/DateTimeFormatter/AbstractDateTimeFormatter.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ public ITimeSpanLabel ToTimeSpanLabel(DateTimeOffset offset)
2626

2727
return 0 switch
2828
{
29-
_ when now.Date == time.Date => new Label("Today", "\ue184", 0),
30-
_ when y.Date == time.Date => new Label("ItemTimeText_Yesterday", "\ue161", 1),
31-
_ when diff.Days < 7 && w.Year == time.Year && GetWeekOfYear(w) == GetWeekOfYear(time) => new Label("ItemTimeText_ThisWeek", "\uE162", 2),
32-
_ when diff.Days < 14 && w.Year == time.Year && GetWeekOfYear(w) == GetWeekOfYear(time) => new Label("ItemTimeText_LastWeek", "\uE162", 3),
33-
_ when now.Year == time.Year && now.Month == time.Month => new Label("ItemTimeText_ThisMonth", "\ue163", 4),
34-
_ when now.AddMonths(-1).Year == time.Year && now.AddMonths(-1).Month == time.Month => new Label("ItemTimeText_LastMonth", "\ue163", 5),
35-
_ when now.Year == time.Year => new Label("ItemTimeText_ThisYear", "\ue163", 5),
36-
_ => new Label("ItemTimeText_Older", "\uEC92", 6),
29+
_ when now.Date == time.Date => new Label("Today", "\ue184", 7),
30+
_ when y.Date == time.Date => new Label("ItemTimeText_Yesterday", "\ue161", 6),
31+
_ when diff.Days < 7 && w.Year == time.Year && GetWeekOfYear(w) == GetWeekOfYear(time) => new Label("ItemTimeText_ThisWeek", "\uE162", 5),
32+
_ when diff.Days < 14 && w.Year == time.Year && GetWeekOfYear(w) == GetWeekOfYear(time) => new Label("ItemTimeText_LastWeek", "\uE162", 4),
33+
_ when now.Year == time.Year && now.Month == time.Month => new Label("ItemTimeText_ThisMonth", "\ue163", 3),
34+
_ when now.AddMonths(-1).Year == time.Year && now.AddMonths(-1).Month == time.Month => new Label("ItemTimeText_LastMonth", "\ue163", 2),
35+
_ when now.Year == time.Year => new Label("ItemTimeText_ThisYear", "\ue163", 1),
36+
_ => new Label("ItemTimeText_Older", "\uEC92", 0),
3737
};
3838
}
3939

src/Files.App/ServicesImplementation/Settings/LayoutSettingsService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ public SortDirection DefaultDirectorySortDirection
2424
set => Set((long)value);
2525
}
2626

27+
public SortDirection DefaultDirectoryGroupDirection
28+
{
29+
get => (SortDirection)Get((long)SortDirection.Ascending);
30+
set => Set((long)value);
31+
}
32+
2733
public bool DefaultSortDirectoriesAlongsideFiles
2834
{
2935
get => Get(false);

src/Files.App/UserControls/InnerNavigationToolbar.xaml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,9 @@
493493
IsChecked="{x:Bind ViewModel.IsSortedByDateDeleted, Mode=TwoWay}"
494494
IsEnabled="{x:Bind ViewModel.InstanceViewModel.IsPageTypeRecycleBin, Mode=OneWay}"
495495
Text="{helpers:ResourceString Name=DateDeleted}" />
496+
<MenuFlyoutSeparator />
497+
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.IsSortedAscending, Mode=TwoWay}" Text="{helpers:ResourceString Name=Ascending}" />
498+
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.IsSortedDescending, Mode=TwoWay}" Text="{helpers:ResourceString Name=Descending}" />
496499
</MenuFlyoutSubItem>
497500
<MenuFlyoutSubItem Text="{helpers:ResourceString Name=NavToolbarGroupByRadioButtons/Text}">
498501
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.IsGroupedByNone, Mode=TwoWay}" Text="{helpers:ResourceString Name=None}" />
@@ -518,11 +521,17 @@
518521
IsChecked="{x:Bind ViewModel.IsGroupedByFolderPath, Mode=TwoWay}"
519522
IsEnabled="{x:Bind ViewModel.InstanceViewModel.IsPageTypeLibrary, Mode=OneWay}"
520523
Text="{helpers:ResourceString Name=NavToolbarArrangementOptionFolderPath/Text}" />
524+
<MenuFlyoutSeparator />
525+
<ToggleMenuFlyoutItem
526+
IsChecked="{x:Bind ViewModel.IsGroupedAscending, Mode=TwoWay}"
527+
IsEnabled="{x:Bind ViewModel.IsGroupedByNone, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}"
528+
Text="{helpers:ResourceString Name=Ascending}" />
529+
<ToggleMenuFlyoutItem
530+
IsChecked="{x:Bind ViewModel.IsGroupedDescending, Mode=TwoWay}"
531+
IsEnabled="{x:Bind ViewModel.IsGroupedByNone, Mode=OneWay, Converter={StaticResource BoolNegationConverter}}"
532+
Text="{helpers:ResourceString Name=Descending}" />
521533
</MenuFlyoutSubItem>
522534
<MenuFlyoutSeparator />
523-
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.IsSortedAscending, Mode=TwoWay}" Text="{helpers:ResourceString Name=Ascending}" />
524-
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.IsSortedDescending, Mode=TwoWay}" Text="{helpers:ResourceString Name=Descending}" />
525-
<MenuFlyoutSeparator />
526535
<ToggleMenuFlyoutItem IsChecked="{x:Bind ViewModel.AreDirectoriesSortedAlongsideFiles, Mode=TwoWay}" Text="{helpers:ResourceString Name=SettingsListAndSortDirectoriesAlongsideFiles}" />
527536
</MenuFlyout>
528537
</AppBarButton.Flyout>

src/Files.App/ViewModels/FolderSettingsViewModel.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ public int GridViewSize
215215

216216
public event EventHandler<SortDirection>? SortDirectionPreferenceUpdated;
217217

218+
public event EventHandler<SortDirection>? GroupDirectionPreferenceUpdated;
219+
218220
public event EventHandler<bool>? SortDirectoriesAlongsideFilesPreferenceUpdated;
219221

220222
public SortOption DirectorySortOption
@@ -258,6 +260,19 @@ public SortDirection DirectorySortDirection
258260
}
259261
}
260262

263+
public SortDirection DirectoryGroupDirection
264+
{
265+
get => LayoutPreference.DirectoryGroupDirection;
266+
set
267+
{
268+
if (SetProperty(ref LayoutPreference.DirectoryGroupDirection, value, nameof(DirectoryGroupDirection)))
269+
{
270+
LayoutPreferencesUpdateRequired?.Invoke(this, new LayoutPreferenceEventArgs(LayoutPreference));
271+
GroupDirectionPreferenceUpdated?.Invoke(this, DirectoryGroupDirection);
272+
}
273+
}
274+
}
275+
261276
public bool SortDirectoriesAlongsideFiles
262277
{
263278
get
@@ -327,6 +342,7 @@ public static void SetLayoutPreferencesForPath(string folderPath, LayoutPreferen
327342
userSettingsService.FoldersSettingsService.DefaultGroupOption = prefs.DirectoryGroupOption;
328343
}
329344
userSettingsService.LayoutSettingsService.DefaultDirectorySortDirection = prefs.DirectorySortDirection;
345+
userSettingsService.LayoutSettingsService.DefaultDirectoryGroupDirection = prefs.DirectoryGroupDirection;
330346
userSettingsService.LayoutSettingsService.DefaultSortDirectoriesAlongsideFiles = prefs.SortDirectoriesAlongsideFiles;
331347

332348
userSettingsService.FoldersSettingsService.ShowDateColumn = !prefs.ColumnsViewModel.DateModifiedColumn.UserCollapsed;
@@ -376,7 +392,7 @@ private static LayoutPreferences GetDefaultLayoutPreferences(string folderPath)
376392

377393
if (folderPath == CommonPaths.DownloadsPath)
378394
// Default for downloads folder is to group by date created
379-
return new LayoutPreferences() { DirectoryGroupOption = GroupOption.DateCreated };
395+
return new LayoutPreferences() { DirectoryGroupOption = GroupOption.DateCreated, DirectoryGroupDirection = SortDirection.Descending };
380396
else if (LibraryManager.IsLibraryPath(folderPath))
381397
// Default for libraries is to group by folder path
382398
return new LayoutPreferences() { DirectoryGroupOption = GroupOption.FolderPath };
@@ -414,6 +430,7 @@ private set
414430
OnPropertyChanged(nameof(DirectoryGroupOption));
415431
OnPropertyChanged(nameof(DirectorySortOption));
416432
OnPropertyChanged(nameof(DirectorySortDirection));
433+
OnPropertyChanged(nameof(DirectoryGroupDirection));
417434
OnPropertyChanged(nameof(SortDirectoriesAlongsideFiles));
418435
OnPropertyChanged(nameof(ColumnsViewModel));
419436
}

src/Files.App/ViewModels/ItemViewModel.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,22 @@ private void OrderGroups(CancellationToken token = default)
706706

707707
if (FilesAndFolders.GroupedCollection is null || FilesAndFolders.GroupedCollection.IsSorted)
708708
return;
709-
FilesAndFolders.GroupedCollection.Order(x => x.OrderBy(y => y.Model.SortIndexOverride).ThenBy(y => y.Model.Text));
709+
if (folderSettings.DirectoryGroupDirection == SortDirection.Ascending)
710+
{
711+
if (folderSettings.DirectoryGroupOption == GroupOption.Size)
712+
// Always show file sections below folders
713+
FilesAndFolders.GroupedCollection.Order(x => x.OrderBy(y => y.First().PrimaryItemAttribute != StorageItemTypes.Folder).ThenBy(y => y.Model.SortIndexOverride).ThenBy(y => y.Model.Text));
714+
else
715+
FilesAndFolders.GroupedCollection.Order(x => x.OrderBy(y => y.Model.SortIndexOverride).ThenBy(y => y.Model.Text));
716+
}
717+
else
718+
{
719+
if (folderSettings.DirectoryGroupOption == GroupOption.Size)
720+
// Always show file sections below folders
721+
FilesAndFolders.GroupedCollection.Order(x => x.OrderBy(y => y.First().PrimaryItemAttribute != StorageItemTypes.Folder).ThenByDescending(y => y.Model.SortIndexOverride).ThenByDescending(y => y.Model.Text));
722+
else
723+
FilesAndFolders.GroupedCollection.Order(x => x.OrderByDescending(y => y.Model.SortIndexOverride).ThenByDescending(y => y.Model.Text));
724+
}
710725
FilesAndFolders.GroupedCollection.IsSorted = true;
711726
}
712727

src/Files.App/ViewModels/ToolbarViewModel.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,18 @@ public bool IsSortedDescending
9494
set { if (value) InstanceViewModel.FolderSettings.DirectorySortDirection = SortDirection.Descending; }
9595
}
9696

97+
public bool IsGroupedAscending
98+
{
99+
get => InstanceViewModel?.FolderSettings.DirectoryGroupDirection == SortDirection.Ascending;
100+
set { if (value) InstanceViewModel.FolderSettings.DirectoryGroupDirection = SortDirection.Ascending; }
101+
}
102+
103+
public bool IsGroupedDescending
104+
{
105+
get => InstanceViewModel?.FolderSettings.DirectoryGroupDirection == SortDirection.Descending;
106+
set { if (value) InstanceViewModel.FolderSettings.DirectoryGroupDirection = SortDirection.Descending; }
107+
}
108+
97109
public bool AreDirectoriesSortedAlongsideFiles
98110
{
99111
get => InstanceViewModel.FolderSettings.SortDirectoriesAlongsideFiles;
@@ -375,6 +387,7 @@ public CurrentInstanceViewModel InstanceViewModel
375387
InstanceViewModel.FolderSettings.SortDirectionPreferenceUpdated -= FolderSettings_SortDirectionPreferenceUpdated;
376388
InstanceViewModel.FolderSettings.SortOptionPreferenceUpdated -= FolderSettings_SortOptionPreferenceUpdated;
377389
InstanceViewModel.FolderSettings.SortDirectoriesAlongsideFilesPreferenceUpdated -= FolderSettings_SortDirectoriesAlongsideFilesPreferenceUpdated;
390+
InstanceViewModel.FolderSettings.GroupDirectionPreferenceUpdated -= FolderSettings_GroupDirectionPreferenceUpdated;
378391
InstanceViewModel.FolderSettings.GroupOptionPreferenceUpdated -= FolderSettings_GroupOptionPreferenceUpdated;
379392
InstanceViewModel.FolderSettings.LayoutPreferencesUpdateRequired -= FolderSettings_LayoutPreferencesUpdateRequired;
380393
}
@@ -386,6 +399,7 @@ public CurrentInstanceViewModel InstanceViewModel
386399
InstanceViewModel.FolderSettings.SortDirectionPreferenceUpdated += FolderSettings_SortDirectionPreferenceUpdated;
387400
InstanceViewModel.FolderSettings.SortOptionPreferenceUpdated += FolderSettings_SortOptionPreferenceUpdated;
388401
InstanceViewModel.FolderSettings.SortDirectoriesAlongsideFilesPreferenceUpdated += FolderSettings_SortDirectoriesAlongsideFilesPreferenceUpdated;
402+
InstanceViewModel.FolderSettings.GroupDirectionPreferenceUpdated += FolderSettings_GroupDirectionPreferenceUpdated;
389403
InstanceViewModel.FolderSettings.GroupOptionPreferenceUpdated += FolderSettings_GroupOptionPreferenceUpdated;
390404
InstanceViewModel.FolderSettings.LayoutPreferencesUpdateRequired += FolderSettings_LayoutPreferencesUpdateRequired;
391405
}
@@ -476,6 +490,7 @@ public void UpdateSortAndGroupOptions()
476490
FolderSettings_SortDirectionPreferenceUpdated(null, 0);
477491
FolderSettings_SortOptionPreferenceUpdated(null, 0);
478492
FolderSettings_SortDirectoriesAlongsideFilesPreferenceUpdated(null, true);
493+
FolderSettings_GroupDirectionPreferenceUpdated(null, 0);
479494
FolderSettings_GroupOptionPreferenceUpdated(null, 0);
480495
FolderSettings_LayoutPreferencesUpdateRequired(null, 0);
481496
}
@@ -504,6 +519,12 @@ private void FolderSettings_SortDirectoriesAlongsideFilesPreferenceUpdated(objec
504519
OnPropertyChanged(nameof(AreDirectoriesSortedAlongsideFiles));
505520
}
506521

522+
private void FolderSettings_GroupDirectionPreferenceUpdated(object? sender, SortDirection e)
523+
{
524+
OnPropertyChanged(nameof(IsGroupedAscending));
525+
OnPropertyChanged(nameof(IsGroupedDescending));
526+
}
527+
507528
private void FolderSettings_GroupOptionPreferenceUpdated(object? sender, GroupOption e)
508529
{
509530
OnPropertyChanged(nameof(IsGroupedByNone));
@@ -1196,6 +1217,7 @@ public void Dispose()
11961217
InstanceViewModel.FolderSettings.SortDirectionPreferenceUpdated -= FolderSettings_SortDirectionPreferenceUpdated;
11971218
InstanceViewModel.FolderSettings.SortOptionPreferenceUpdated -= FolderSettings_SortOptionPreferenceUpdated;
11981219
InstanceViewModel.FolderSettings.SortDirectoriesAlongsideFilesPreferenceUpdated -= FolderSettings_SortDirectoriesAlongsideFilesPreferenceUpdated;
1220+
InstanceViewModel.FolderSettings.GroupDirectionPreferenceUpdated -= FolderSettings_GroupDirectionPreferenceUpdated;
11991221
InstanceViewModel.FolderSettings.GroupOptionPreferenceUpdated -= FolderSettings_GroupOptionPreferenceUpdated;
12001222
InstanceViewModel.FolderSettings.LayoutPreferencesUpdateRequired -= FolderSettings_LayoutPreferencesUpdateRequired;
12011223
}

src/Files.Backend/Services/Settings/ILayoutSettingsService.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public interface ILayoutSettingsService : IBaseSettingsService, INotifyPropertyC
99

1010
SortDirection DefaultDirectorySortDirection { get; set; }
1111

12+
SortDirection DefaultDirectoryGroupDirection { get; set; }
13+
1214
bool DefaultSortDirectoriesAlongsideFiles { get; set; }
1315
}
1416
}

0 commit comments

Comments
 (0)