Skip to content

Commit 05c4ace

Browse files
authored
Feature: Added option to show check boxes next to file names (#11017)
1 parent dcf7e9d commit 05c4ace

File tree

14 files changed

+299
-103
lines changed

14 files changed

+299
-103
lines changed

src/Files.App/DataModels/AppModel.cs

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using CommunityToolkit.Mvvm.ComponentModel;
2+
using CommunityToolkit.Mvvm.DependencyInjection;
3+
using Files.App.ServicesImplementation.Settings;
24
using Files.App.ViewModels;
35
using Files.App.Views;
6+
using Files.Backend.Services.Settings;
47
using Microsoft.UI.Xaml.Controls;
58
using Microsoft.UI.Xaml.Media;
69
using System;
@@ -11,14 +14,32 @@ namespace Files.App.DataModels
1114
{
1215
public class AppModel : ObservableObject
1316
{
17+
private IFoldersSettingsService FoldersSettings;
18+
19+
public bool ShowSelectionCheckboxes
20+
{
21+
get => FoldersSettings.ShowSelectionCheckboxes;
22+
set => FoldersSettings.ShowSelectionCheckboxes = value;
23+
}
24+
1425
public AppModel()
1526
{
27+
FoldersSettings = Ioc.Default.GetRequiredService<IUserSettingsService>().FoldersSettingsService;
28+
FoldersSettings.PropertyChanged += FoldersSettings_PropertyChanged; ;
1629
Clipboard.ContentChanged += Clipboard_ContentChanged;
1730

1831
//todo: this doesn't belong here
1932
DetectFontName();
2033
}
2134

35+
private void FoldersSettings_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
36+
{
37+
if (e.PropertyName == nameof(FoldersSettingsService.ShowSelectionCheckboxes))
38+
{
39+
OnPropertyChanged(nameof(ShowSelectionCheckboxes));
40+
}
41+
}
42+
2243
//todo: refactor this method
2344
public void Clipboard_ContentChanged(object sender, object e)
2445
{
@@ -70,13 +91,6 @@ public bool IsPasteEnabled
7091
set => SetProperty(ref isPasteEnabled, value);
7192
}
7293

73-
private bool multiselectEnabled;
74-
public bool MultiselectEnabled
75-
{
76-
get => multiselectEnabled;
77-
set => SetProperty(ref multiselectEnabled, value);
78-
}
79-
8094
private bool isQuickLookAvailable;
8195
public bool IsQuickLookAvailable
8296
{

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ public bool EnableOverridingFolderPreferences
2020
set => Set(value);
2121
}
2222

23+
public bool ShowSelectionCheckboxes
24+
{
25+
get => Get(false);
26+
set => Set(value);
27+
}
28+
2329
public FolderLayoutModes DefaultLayoutMode
2430
{
2531
get => (FolderLayoutModes)Get((long)FolderLayoutModes.Adaptive);
@@ -273,6 +279,7 @@ protected override void RaiseOnSettingChangedEvent(object sender, SettingChanged
273279
case nameof(ShowThumbnails):
274280
case nameof(ShowConfirmDeleteDialog):
275281
case nameof(SelectFilesOnHover):
282+
case nameof(ShowSelectionCheckboxes):
276283
Analytics.TrackEvent($"Set {e.SettingName} to {e.NewValue}");
277284
break;
278285
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,8 +1425,8 @@
14251425
<data name="CloudDriveSyncStatus_Unknown" xml:space="preserve">
14261426
<value>Unknown</value>
14271427
</data>
1428-
<data name="NavToolbarMultiselect.Text" xml:space="preserve">
1429-
<value>Multiselect</value>
1428+
<data name="SettingsCheckboxesToSelectItems" xml:space="preserve">
1429+
<value>Show selection checkbox next to file names</value>
14301430
</data>
14311431
<data name="RenameFileDialog.Text" xml:space="preserve">
14321432
<value>If you change a file extension, the file might become unusable. Are you sure you want to change it?</value>

src/Files.App/UserControls/InnerNavigationToolbar.xaml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -423,14 +423,6 @@
423423
ToolTipService.ToolTip="{helpers:ResourceString Name=NavToolbarSelectionOptions/ToolTipService/ToolTip}">
424424
<AppBarButton.Flyout>
425425
<MenuFlyout Placement="Bottom">
426-
<ToggleMenuFlyoutItem
427-
x:Name="MultiselectMFI"
428-
IsChecked="{x:Bind AppModel.MultiselectEnabled, Mode=TwoWay}"
429-
Text="{helpers:ResourceString Name=NavToolbarMultiselect/Text}">
430-
<MenuFlyoutItem.Icon>
431-
<FontIcon Glyph="&#xE762;" />
432-
</MenuFlyoutItem.Icon>
433-
</ToggleMenuFlyoutItem>
434426
<MenuFlyoutItem
435427
x:Name="SelectAllMFI"
436428
Command="{x:Bind ViewModel.SelectAllContentPageItemsCommand, Mode=OneWay}"

src/Files.App/UserControls/Selection/RectangleSelection_ListViewBase.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ private void RectangleSelection_PointerMoved(object sender, PointerRoutedEventAr
6464
// Selected area considering scrolled offset
6565
var rect = new System.Drawing.Rectangle((int)Canvas.GetLeft(selectionRectangle), (int)Math.Min(originDragPoint.Y, currentPoint.Position.Y + verticalOffset), (int)selectionRectangle.Width, (int)Math.Abs(originDragPoint.Y - (currentPoint.Position.Y + verticalOffset)));
6666

67+
var selectedItemsBeforeChange = uiElement.SelectedItems.ToArray();
68+
6769
foreach (var item in itemsPosition.ToList())
6870
{
6971
try
@@ -102,7 +104,8 @@ private void RectangleSelection_PointerMoved(object sender, PointerRoutedEventAr
102104
if (prevSelectedItemsDrag is null || !prevSelectedItemsDrag.SequenceEqual(currentSelectedItemsDrag))
103105
{
104106
// Trigger SelectionChanged event if the selection has changed
105-
selectionChanged(sender, null);
107+
var removedItems = selectedItemsBeforeChange.Except(currentSelectedItemsDrag).ToList();
108+
selectionChanged(sender, new SelectionChangedEventArgs(removedItems, currentSelectedItemsDrag));
106109
prevSelectedItemsDrag = currentSelectedItemsDrag;
107110
}
108111
}

src/Files.App/ViewModels/SettingsViewModels/FoldersViewModel.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,20 @@ public bool ShowDateColumn
129129
}
130130
}
131131
}
132+
133+
public bool ShowSelectionCheckboxes
134+
{
135+
get => UserSettingsService.FoldersSettingsService.ShowSelectionCheckboxes;
136+
set
137+
{
138+
if (value != UserSettingsService.FoldersSettingsService.ShowSelectionCheckboxes)
139+
{
140+
UserSettingsService.FoldersSettingsService.ShowSelectionCheckboxes = value;
141+
OnPropertyChanged();
142+
}
143+
}
144+
}
145+
132146
public FolderLayoutModes DefaultLayoutMode
133147
{
134148
get => UserSettingsService.FoldersSettingsService.DefaultLayoutMode;

src/Files.App/Views/LayoutModes/ColumnViewBase.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@
166166
RightTapped="FileList_RightTapped"
167167
ScrollViewer.IsScrollInertiaEnabled="True"
168168
SelectionChanged="FileList_SelectionChanged"
169-
SelectionMode="{x:Bind AppModel.MultiselectEnabled, Mode=OneWay, Converter={StaticResource BoolToSelectionModeConverter}}"
169+
SelectionMode="Extended"
170170
Tapped="FileList_ItemTapped">
171171

172172
<ListView.ItemContainerTransitions>

0 commit comments

Comments
 (0)