Skip to content

Commit 4ed28d0

Browse files
authored
Added ItemManipulationModel (#4471)
1 parent 1f5e036 commit 4ed28d0

20 files changed

+662
-462
lines changed

Files/BaseLayout.cs

+18-78
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,26 @@
1-
using Files.Common;
2-
using Files.DataModels;
3-
using Files.Dialogs;
4-
using Files.EventArguments;
1+
using Files.EventArguments;
52
using Files.Extensions;
63
using Files.Filesystem;
74
using Files.Helpers;
85
using Files.Helpers.ContextFlyouts;
96
using Files.Interacts;
10-
using Files.UserControls;
117
using Files.ViewModels;
128
using Files.Views;
13-
using Microsoft.Toolkit.Mvvm.Input;
149
using Microsoft.Toolkit.Uwp;
1510
using Microsoft.Toolkit.Uwp.UI;
16-
using Newtonsoft.Json;
1711
using System;
1812
using System.Collections;
1913
using System.Collections.Generic;
2014
using System.ComponentModel;
2115
using System.Diagnostics;
22-
using System.IO;
2316
using System.Linq;
2417
using System.Runtime.CompilerServices;
25-
using System.Threading.Tasks;
26-
using Windows.ApplicationModel.AppService;
2718
using Windows.ApplicationModel.DataTransfer;
28-
using Windows.Foundation;
29-
using Windows.Foundation.Collections;
3019
using Windows.Storage;
3120
using Windows.System;
3221
using Windows.UI.Core;
3322
using Windows.UI.Xaml;
3423
using Windows.UI.Xaml.Controls;
35-
using Windows.UI.Xaml.Controls.Primitives;
36-
using Windows.UI.Xaml.Input;
37-
using Windows.UI.Xaml.Media.Imaging;
3824
using Windows.UI.Xaml.Navigation;
3925
using static Files.Helpers.PathNormalization;
4026

@@ -130,8 +116,8 @@ public string JumpString
130116

131117
if (jumpedToItem != null)
132118
{
133-
SetSelectedItemOnUi(jumpedToItem);
134-
ScrollIntoView(jumpedToItem);
119+
ItemManipulationModel.SetSelectedItem(jumpedToItem);
120+
ItemManipulationModel.ScrollIntoView(jumpedToItem);
135121
}
136122

137123
// Restart the timer
@@ -196,7 +182,7 @@ internal set
196182
}
197183
}
198184
NotifyPropertyChanged(nameof(SelectedItems));
199-
SetDragModeForItems();
185+
ItemManipulationModel.SetDragModeForItems();
200186
}
201187
}
202188
}
@@ -207,6 +193,10 @@ internal set
207193

208194
public BaseLayout()
209195
{
196+
ItemManipulationModel = new ItemManipulationModel();
197+
198+
HookEvents();
199+
210200
jumpTimer = new DispatcherTimer();
211201
jumpTimer.Interval = TimeSpan.FromSeconds(0.8);
212202
jumpTimer.Tick += JumpTimer_Tick;
@@ -226,6 +216,12 @@ public BaseLayout()
226216
dragOverTimer = DispatcherQueue.GetForCurrentThread().CreateTimer();
227217
}
228218

219+
protected abstract void HookEvents();
220+
221+
protected abstract void UnhookEvents();
222+
223+
public ItemManipulationModel ItemManipulationModel { get; private set; }
224+
229225
private void JumpTimer_Tick(object sender, object e)
230226
{
231227
jumpString = string.Empty;
@@ -234,54 +230,8 @@ private void JumpTimer_Tick(object sender, object e)
234230

235231
protected abstract void InitializeCommandsViewModel();
236232

237-
public abstract void FocusFileList();
238-
239-
public abstract void SelectAllItems();
240-
241-
public virtual void InvertSelection()
242-
{
243-
List<ListedItem> newSelectedItems = GetAllItems()
244-
.Cast<ListedItem>()
245-
.Except(SelectedItems)
246-
.ToList();
247-
248-
SetSelectedItemsOnUi(newSelectedItems);
249-
}
250-
251-
public abstract void ClearSelection();
252-
253-
public abstract void SetDragModeForItems();
254-
255-
public abstract void ScrollIntoView(ListedItem item);
256-
257-
protected abstract void AddSelectedItem(ListedItem item);
258-
259233
protected abstract IEnumerable GetAllItems();
260234

261-
public virtual void SetSelectedItemOnUi(ListedItem selectedItem)
262-
{
263-
ClearSelection();
264-
AddSelectedItem(selectedItem);
265-
}
266-
267-
public virtual void SetSelectedItemsOnUi(List<ListedItem> selectedItems)
268-
{
269-
ClearSelection();
270-
AddSelectedItemsOnUi(selectedItems);
271-
}
272-
273-
public virtual void AddSelectedItemsOnUi(List<ListedItem> selectedItems)
274-
{
275-
foreach (ListedItem selectedItem in selectedItems)
276-
{
277-
AddSelectedItem(selectedItem);
278-
}
279-
}
280-
281-
public abstract void FocusSelectedItems();
282-
283-
public abstract void StartRenameItem();
284-
285235
public virtual void ResetItemOpacity()
286236
{
287237
IEnumerable items = GetAllItems();
@@ -294,7 +244,7 @@ public virtual void ResetItemOpacity()
294244
{
295245
if (listedItem.IsHiddenItem)
296246
{
297-
listedItem.Opacity = 0.4;
247+
listedItem.Opacity = Constants.UI.DimItemOpacity;
298248
}
299249
else
300250
{
@@ -303,11 +253,6 @@ public virtual void ResetItemOpacity()
303253
}
304254
}
305255

306-
public virtual void SetItemOpacity(ListedItem item)
307-
{
308-
item.Opacity = 0.4;
309-
}
310-
311256
protected abstract ListedItem GetItemFromElement(object element);
312257

313258
private void FolderSettings_LayoutModeChangeRequested(object sender, LayoutModeEventArgs e)
@@ -407,7 +352,7 @@ protected override async void OnNavigatedTo(NavigationEventArgs eventArgs)
407352

408353
FolderSettings.IsLayoutModeChanging = false;
409354

410-
FocusFileList(); // Set focus on layout specific file list control
355+
ItemManipulationModel.FocusFileList(); // Set focus on layout specific file list control
411356

412357
try
413358
{
@@ -419,7 +364,7 @@ protected override async void OnNavigatedTo(NavigationEventArgs eventArgs)
419364
liItemsToSelect.Add(ParentShellPageInstance.FilesystemViewModel.FilesAndFolders.Where((li) => li.ItemName == item).First());
420365
}
421366

422-
SetSelectedItemsOnUi(liItemsToSelect);
367+
ItemManipulationModel.SetSelectedItems(liItemsToSelect);
423368
}
424369
}
425370
catch (Exception e)
@@ -549,7 +494,7 @@ protected async void Item_DragOver(object sender, DragEventArgs e)
549494
item = gvi.Content as ListedItem;
550495
}
551496

552-
SetSelectedItemOnUi(item);
497+
ItemManipulationModel.SetSelectedItem(item);
553498

554499
if (dragOverItem != item)
555500
{
@@ -661,10 +606,5 @@ protected void UninitializeDrag(UIElement element)
661606
public readonly VirtualKey MinusKey = (VirtualKey)189;
662607

663608
public abstract void Dispose();
664-
665-
public void RefreshItems()
666-
{
667-
ParentShellPageInstance.Refresh_Click();
668-
}
669609
}
670610
}

Files/Constants.cs

+5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
{
33
public static class Constants
44
{
5+
public static class UI
6+
{
7+
public const float DimItemOpacity = 0.4f;
8+
}
9+
510
public static class Browser
611
{
712
public static class GridViewBrowser

Files/Files.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@
228228
<Compile Include="Helpers\WallpaperHelpers.cs" />
229229
<Compile Include="Helpers\WidgetsHelpers.cs" />
230230
<Compile Include="Helpers\Win32Helpers.cs" />
231+
<Compile Include="Interacts\ItemManipulationModel.cs" />
231232
<Compile Include="UserControls\RestartControl.xaml.cs">
232233
<DependentUpon>RestartControl.xaml</DependentUpon>
233234
</Compile>

Files/Filesystem/FilesystemOperations/FilesystemOperations.cs

+7-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Files.Extensions;
44
using Files.Filesystem.FilesystemHistory;
55
using Files.Helpers;
6+
using Files.Interacts;
67
using Microsoft.Toolkit.Uwp;
78
using Microsoft.Toolkit.Uwp.Helpers;
89
using System;
@@ -32,6 +33,8 @@ public class FilesystemOperations : IFilesystemOperations
3233

3334
private IShellPage associatedInstance;
3435

36+
private ItemManipulationModel itemManipulationModel => associatedInstance.SlimContentPage?.ItemManipulationModel;
37+
3538
private RecycleBinHelpers recycleBinHelpers;
3639

3740
#endregion Private Members
@@ -249,8 +252,8 @@ await Windows.ApplicationModel.Core.CoreApplication.MainView.DispatcherQueue.Enq
249252

250253
if (copiedListedItems.Count > 0)
251254
{
252-
associatedInstance.SlimContentPage.AddSelectedItemsOnUi(copiedListedItems);
253-
associatedInstance.SlimContentPage.FocusSelectedItems();
255+
itemManipulationModel.AddSelectedItems(copiedListedItems);
256+
itemManipulationModel.FocusSelectedItems();
254257
}
255258
}, Windows.System.DispatcherQueuePriority.Low);
256259
}
@@ -432,8 +435,8 @@ await Windows.ApplicationModel.Core.CoreApplication.MainView.DispatcherQueue.Enq
432435

433436
if (movedListedItems.Count > 0)
434437
{
435-
associatedInstance.SlimContentPage.AddSelectedItemsOnUi(movedListedItems);
436-
associatedInstance.SlimContentPage.FocusSelectedItems();
438+
itemManipulationModel.AddSelectedItems(movedListedItems);
439+
itemManipulationModel.FocusSelectedItems();
437440
}
438441
}, Windows.System.DispatcherQueuePriority.Low);
439442
}

Files/Filesystem/FilesystemOperations/Helpers/FilesystemHelpers.cs

+9-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Files.Extensions;
55
using Files.Filesystem.FilesystemHistory;
66
using Files.Helpers;
7+
using Files.Interacts;
78
using Files.UserControls;
89
using Files.ViewModels.Dialogs;
910
using Microsoft.Toolkit.Uwp;
@@ -32,6 +33,8 @@ public class FilesystemHelpers : IFilesystemHelpers
3233

3334
private IFilesystemOperations filesystemOperations;
3435

36+
private ItemManipulationModel itemManipulationModel => associatedInstance.SlimContentPage?.ItemManipulationModel;
37+
3538
private RecycleBinHelpers recycleBinHelpers;
3639

3740
private readonly CancellationToken cancellationToken;
@@ -59,8 +62,8 @@ public FilesystemHelpers(IShellPage associatedInstance, CancellationToken cancel
5962
{
6063
this.associatedInstance = associatedInstance;
6164
this.cancellationToken = cancellationToken;
62-
filesystemOperations = new FilesystemOperations(this.associatedInstance);
63-
recycleBinHelpers = new RecycleBinHelpers(this.associatedInstance);
65+
this.filesystemOperations = new FilesystemOperations(this.associatedInstance);
66+
this.recycleBinHelpers = new RecycleBinHelpers(this.associatedInstance);
6467
}
6568

6669
#endregion Constructor
@@ -448,7 +451,7 @@ public async Task<ReturnResult> CopyItemsAsync(IEnumerable<IStorageItemWithPath>
448451
IStorageHistory history;
449452
List<IStorageHistory> rawStorageHistory = new List<IStorageHistory>();
450453

451-
associatedInstance.SlimContentPage.ClearSelection();
454+
itemManipulationModel.ClearSelection();
452455
float progress;
453456
for (int i = 0; i < source.Count(); i++)
454457
{
@@ -519,7 +522,7 @@ public async Task<ReturnResult> CopyItemAsync(IStorageItemWithPath source, strin
519522
var sw = new Stopwatch();
520523
sw.Start();
521524

522-
associatedInstance.SlimContentPage.ClearSelection();
525+
itemManipulationModel.ClearSelection();
523526

524527
IStorageHistory history = null;
525528
if (collisions.First() != FileNameConflictResolveOptionType.Skip)
@@ -650,7 +653,7 @@ public async Task<ReturnResult> MoveItemsAsync(IEnumerable<IStorageItemWithPath>
650653
IStorageHistory history;
651654
var rawStorageHistory = new List<IStorageHistory>();
652655

653-
associatedInstance.SlimContentPage.ClearSelection();
656+
itemManipulationModel.ClearSelection();
654657
float progress;
655658
for (int i = 0; i < source.Count(); i++)
656659
{
@@ -727,7 +730,7 @@ public async Task<ReturnResult> MoveItemAsync(IStorageItemWithPath source, strin
727730
var sw = new Stopwatch();
728731
sw.Start();
729732

730-
associatedInstance.SlimContentPage.ClearSelection();
733+
itemManipulationModel.ClearSelection();
731734

732735
IStorageHistory history = null;
733736

Files/Filesystem/Search/FolderSearch.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ await Task.Run(() =>
9292
ItemPropertiesInitialized = false, // Load thumbnail
9393
FileExtension = itemFileExtension,
9494
ItemType = itemType,
95-
Opacity = isHidden ? 0.4 : 1
95+
Opacity = isHidden ? Constants.UI.DimItemOpacity : 1
9696
});
9797
}
9898
else if (((FileAttributes)findData.dwFileAttributes & FileAttributes.Directory) == FileAttributes.Directory)
@@ -109,7 +109,7 @@ await Task.Run(() =>
109109
LoadUnknownTypeGlyph = false,
110110
LoadFolderGlyph = true,
111111
ItemPropertiesInitialized = true,
112-
Opacity = isHidden ? 0.4 : 1
112+
Opacity = isHidden ? Constants.UI.DimItemOpacity : 1
113113
});
114114
}
115115
}

Files/Filesystem/StorageEnumerators/Win32StorageEnumerator.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ CancellationToken cancellationToken
143143

144144
if (isHidden)
145145
{
146-
opacity = 0.4;
146+
opacity = Constants.UI.DimItemOpacity;
147147
}
148148

149149
return new ListedItem(null, dateReturnFormat)
@@ -272,7 +272,7 @@ CancellationToken cancellationToken
272272

273273
if (isHidden)
274274
{
275-
opacity = 0.4;
275+
opacity = Constants.UI.DimItemOpacity;
276276
}
277277

278278
return new ShortcutItem(null, dateReturnFormat)
@@ -319,7 +319,7 @@ CancellationToken cancellationToken
319319

320320
if (isHidden)
321321
{
322-
opacity = 0.4;
322+
opacity = Constants.UI.DimItemOpacity;
323323
}
324324

325325
return new ListedItem(null, dateReturnFormat)

Files/Filesystem/StorageHistory/StorageHistoryOperations.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Files.Enums;
22
using Files.Helpers;
3+
using Files.Interacts;
34
using System;
45
using System.Collections.Generic;
56
using System.Diagnostics;
@@ -32,7 +33,7 @@ public StorageHistoryOperations(IShellPage associatedInstance, CancellationToken
3233
this.associatedInstance = associatedInstance;
3334
this.cancellationToken = cancellationToken;
3435
filesystemOperations = new FilesystemOperations(associatedInstance);
35-
filesystemHelpers = new FilesystemHelpers(associatedInstance, cancellationToken);
36+
filesystemHelpers = this.associatedInstance.FilesystemHelpers;
3637
}
3738

3839
#endregion Constructor

0 commit comments

Comments
 (0)