Skip to content

Commit 916a853

Browse files
authored
Cleanup: Moved duplicated code to the BaseLayout (#2621)
1 parent 08d2295 commit 916a853

File tree

3 files changed

+131
-179
lines changed

3 files changed

+131
-179
lines changed

Files/BaseLayout.cs

Lines changed: 84 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
using Microsoft.Toolkit.Uwp.UI.Extensions;
1010
using Newtonsoft.Json;
1111
using System;
12+
using System.Collections;
1213
using System.Collections.Generic;
1314
using System.ComponentModel;
14-
using System.Diagnostics;
1515
using System.IO;
1616
using System.Linq;
1717
using System.Runtime.CompilerServices;
@@ -153,21 +153,45 @@ public BaseLayout()
153153

154154
public abstract void SelectAllItems();
155155

156-
public abstract void InvertSelection();
156+
public virtual void InvertSelection()
157+
{
158+
List<ListedItem> newSelectedItems = GetAllItems()
159+
.Cast<ListedItem>()
160+
.Except(SelectedItems)
161+
.ToList();
162+
163+
SetSelectedItemsOnUi(newSelectedItems);
164+
}
157165

158166
public abstract void ClearSelection();
159167

160168
public abstract void SetDragModeForItems();
161169

162170
public abstract void ScrollIntoView(ListedItem item);
163171

164-
public abstract int GetSelectedIndex();
172+
protected abstract void AddSelectedItem(ListedItem item);
165173

166-
public abstract void SetSelectedItemOnUi(ListedItem selectedItem);
174+
protected abstract IEnumerable GetAllItems();
167175

168-
public abstract void SetSelectedItemsOnUi(List<ListedItem> selectedItems);
176+
public virtual void SetSelectedItemOnUi(ListedItem selectedItem)
177+
{
178+
ClearSelection();
179+
AddSelectedItem(selectedItem);
180+
}
181+
182+
public virtual void SetSelectedItemsOnUi(List<ListedItem> selectedItems)
183+
{
184+
ClearSelection();
185+
AddSelectedItemsOnUi(selectedItems);
186+
}
169187

170-
public abstract void AddSelectedItemsOnUi(List<ListedItem> selectedItems);
188+
public virtual void AddSelectedItemsOnUi(List<ListedItem> selectedItems)
189+
{
190+
foreach (ListedItem selectedItem in selectedItems)
191+
{
192+
AddSelectedItem(selectedItem);
193+
}
194+
}
171195

172196
private void ClearShellContextMenus(MenuFlyout menuFlyout)
173197
{
@@ -176,6 +200,7 @@ private void ClearShellContextMenus(MenuFlyout menuFlyout)
176200
{
177201
menuFlyout.Items.RemoveAt(menuFlyout.Items.IndexOf(contextMenuItems[i]));
178202
}
203+
179204
if (menuFlyout.Items[0] is MenuFlyoutSeparator flyoutSeperator)
180205
{
181206
menuFlyout.Items.RemoveAt(menuFlyout.Items.IndexOf(flyoutSeperator));
@@ -219,9 +244,31 @@ public virtual void SetShellContextmenu(MenuFlyout menuFlyout, bool shiftPressed
219244

220245
public abstract void StartRenameItem();
221246

222-
public abstract void ResetItemOpacity();
247+
public virtual void ResetItemOpacity()
248+
{
249+
IEnumerable items = GetAllItems();
250+
if (items == null)
251+
{
252+
return;
253+
}
223254

224-
public abstract void SetItemOpacity(ListedItem item);
255+
foreach (ListedItem listedItem in items)
256+
{
257+
if (listedItem.IsHiddenItem)
258+
{
259+
listedItem.Opacity = 0.4;
260+
}
261+
else
262+
{
263+
listedItem.Opacity = 1;
264+
}
265+
}
266+
}
267+
268+
public virtual void SetItemOpacity(ListedItem item)
269+
{
270+
item.Opacity = 0.4;
271+
}
225272

226273
protected abstract ListedItem GetItemFromElement(object element);
227274

@@ -314,10 +361,17 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
314361

315362
private void UnloadMenuFlyoutItemByName(string nameToUnload)
316363
{
317-
var menuItem = this.FindName(nameToUnload) as DependencyObject;
318-
if (menuItem != null) // Prevent crash if the MenuFlyoutItem is missing
364+
if (FindName(nameToUnload) is MenuFlyoutItemBase menuItem) // Prevent crash if the MenuFlyoutItem is missing
365+
{
366+
menuItem.Visibility = Visibility.Collapsed;
367+
}
368+
}
369+
370+
private void LoadMenuFlyoutItemByName(string nameToUnload)
371+
{
372+
if (FindName(nameToUnload) is MenuFlyoutItemBase menuItem) // Prevent crash if the MenuFlyoutItem is missing
319373
{
320-
(menuItem as MenuFlyoutItemBase).Visibility = Visibility.Collapsed;
374+
menuItem.Visibility = Visibility.Visible;
321375
}
322376
}
323377

@@ -485,7 +539,7 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
485539
{
486540
if (SelectedItem.IsShortcutItem)
487541
{
488-
(this.FindName("OpenItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
542+
LoadMenuFlyoutItemByName("OpenItem");
489543
UnloadMenuFlyoutItemByName("OpenItemWithAppPicker");
490544
UnloadMenuFlyoutItemByName("RunAsAdmin");
491545
UnloadMenuFlyoutItemByName("RunAsAnotherUser");
@@ -497,42 +551,42 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
497551
UnloadMenuFlyoutItemByName("OpenItemWithAppPicker");
498552
UnloadMenuFlyoutItemByName("RunAsAdmin");
499553
UnloadMenuFlyoutItemByName("RunAsAnotherUser");
500-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
554+
LoadMenuFlyoutItemByName("CreateShortcut");
501555
}
502556
else if (SelectedItem.FileExtension.Equals(".exe", StringComparison.OrdinalIgnoreCase)
503557
|| SelectedItem.FileExtension.Equals(".bat", StringComparison.OrdinalIgnoreCase))
504558
{
505-
(this.FindName("OpenItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
559+
LoadMenuFlyoutItemByName("OpenItem");
506560
UnloadMenuFlyoutItemByName("OpenItemWithAppPicker");
507-
(this.FindName("RunAsAdmin") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
508-
(this.FindName("RunAsAnotherUser") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
509-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
561+
LoadMenuFlyoutItemByName("RunAsAdmin");
562+
LoadMenuFlyoutItemByName("RunAsAnotherUser");
563+
LoadMenuFlyoutItemByName("CreateShortcut");
510564
}
511565
else if (SelectedItem.FileExtension.Equals(".msi", StringComparison.OrdinalIgnoreCase))
512566
{
513567
UnloadMenuFlyoutItemByName("OpenItem");
514568
UnloadMenuFlyoutItemByName("OpenItemWithAppPicker");
515569
UnloadMenuFlyoutItemByName("RunAsAdmin");
516-
(this.FindName("RunAsAnotherUser") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
517-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
570+
LoadMenuFlyoutItemByName("RunAsAnotherUser");
571+
LoadMenuFlyoutItemByName("CreateShortcut");
518572
}
519573
else if (SelectedItem.FileExtension.Equals(".appx", StringComparison.OrdinalIgnoreCase)
520574
|| SelectedItem.FileExtension.Equals(".msix", StringComparison.OrdinalIgnoreCase)
521575
|| SelectedItem.FileExtension.Equals(".appxbundle", StringComparison.OrdinalIgnoreCase)
522576
|| SelectedItem.FileExtension.Equals(".msixbundle", StringComparison.OrdinalIgnoreCase))
523577
{
524-
(this.FindName("OpenItemWithAppPicker") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
578+
LoadMenuFlyoutItemByName("OpenItemWithAppPicker");
525579
UnloadMenuFlyoutItemByName("RunAsAdmin");
526580
UnloadMenuFlyoutItemByName("RunAsAnotherUser");
527-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
581+
LoadMenuFlyoutItemByName("CreateShortcut");
528582
}
529583
else
530584
{
531-
(this.FindName("OpenItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
532-
(this.FindName("OpenItemWithAppPicker") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
585+
LoadMenuFlyoutItemByName("OpenItem");
586+
LoadMenuFlyoutItemByName("OpenItemWithAppPicker");
533587
UnloadMenuFlyoutItemByName("RunAsAdmin");
534588
UnloadMenuFlyoutItemByName("RunAsAnotherUser");
535-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
589+
LoadMenuFlyoutItemByName("CreateShortcut");
536590
}
537591
}
538592
}
@@ -555,23 +609,20 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
555609
}
556610
else if (SelectedItems.Count == 1)
557611
{
558-
(this.FindName("SidebarPinItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
559-
(this.FindName("CreateShortcut") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
560-
(this.FindName("OpenItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
612+
LoadMenuFlyoutItemByName("SidebarPinItem");
613+
LoadMenuFlyoutItemByName("CreateShortcut");
614+
LoadMenuFlyoutItemByName("OpenItem");
561615
}
562616
else
563617
{
564-
(this.FindName("SidebarPinItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
618+
LoadMenuFlyoutItemByName("SidebarPinItem");
565619
UnloadMenuFlyoutItemByName("CreateShortcut");
566620
}
567621

568622
if (SelectedItems.Count <= 5 && SelectedItems.Count > 0)
569623
{
570-
(this.FindName("OpenInNewTab") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
571-
(this.FindName("OpenInNewWindowItem") as MenuFlyoutItemBase).Visibility = Visibility.Visible;
572-
//this.FindName("SidebarPinItem");
573-
//this.FindName("OpenInNewTab");
574-
//this.FindName("OpenInNewWindowItem");
624+
LoadMenuFlyoutItemByName("OpenInNewTab");
625+
LoadMenuFlyoutItemByName("OpenInNewWindowItem");
575626
}
576627
else if (SelectedItems.Count > 5)
577628
{

0 commit comments

Comments
 (0)