9
9
using Microsoft . Toolkit . Uwp . UI . Extensions ;
10
10
using Newtonsoft . Json ;
11
11
using System ;
12
+ using System . Collections ;
12
13
using System . Collections . Generic ;
13
14
using System . ComponentModel ;
14
- using System . Diagnostics ;
15
15
using System . IO ;
16
16
using System . Linq ;
17
17
using System . Runtime . CompilerServices ;
@@ -153,21 +153,45 @@ public BaseLayout()
153
153
154
154
public abstract void SelectAllItems ( ) ;
155
155
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
+ }
157
165
158
166
public abstract void ClearSelection ( ) ;
159
167
160
168
public abstract void SetDragModeForItems ( ) ;
161
169
162
170
public abstract void ScrollIntoView ( ListedItem item ) ;
163
171
164
- public abstract int GetSelectedIndex ( ) ;
172
+ protected abstract void AddSelectedItem ( ListedItem item ) ;
165
173
166
- public abstract void SetSelectedItemOnUi ( ListedItem selectedItem ) ;
174
+ protected abstract IEnumerable GetAllItems ( ) ;
167
175
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
+ }
169
187
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
+ }
171
195
172
196
private void ClearShellContextMenus ( MenuFlyout menuFlyout )
173
197
{
@@ -176,6 +200,7 @@ private void ClearShellContextMenus(MenuFlyout menuFlyout)
176
200
{
177
201
menuFlyout . Items . RemoveAt ( menuFlyout . Items . IndexOf ( contextMenuItems [ i ] ) ) ;
178
202
}
203
+
179
204
if ( menuFlyout . Items [ 0 ] is MenuFlyoutSeparator flyoutSeperator )
180
205
{
181
206
menuFlyout . Items . RemoveAt ( menuFlyout . Items . IndexOf ( flyoutSeperator ) ) ;
@@ -219,9 +244,31 @@ public virtual void SetShellContextmenu(MenuFlyout menuFlyout, bool shiftPressed
219
244
220
245
public abstract void StartRenameItem ( ) ;
221
246
222
- public abstract void ResetItemOpacity ( ) ;
247
+ public virtual void ResetItemOpacity ( )
248
+ {
249
+ IEnumerable items = GetAllItems ( ) ;
250
+ if ( items == null )
251
+ {
252
+ return ;
253
+ }
223
254
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
+ }
225
272
226
273
protected abstract ListedItem GetItemFromElement ( object element ) ;
227
274
@@ -314,10 +361,17 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
314
361
315
362
private void UnloadMenuFlyoutItemByName ( string nameToUnload )
316
363
{
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
319
373
{
320
- ( menuItem as MenuFlyoutItemBase ) . Visibility = Visibility . Collapsed ;
374
+ menuItem . Visibility = Visibility . Visible ;
321
375
}
322
376
}
323
377
@@ -485,7 +539,7 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
485
539
{
486
540
if ( SelectedItem . IsShortcutItem )
487
541
{
488
- ( this . FindName ( "OpenItem" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
542
+ LoadMenuFlyoutItemByName ( "OpenItem" ) ;
489
543
UnloadMenuFlyoutItemByName ( "OpenItemWithAppPicker" ) ;
490
544
UnloadMenuFlyoutItemByName ( "RunAsAdmin" ) ;
491
545
UnloadMenuFlyoutItemByName ( "RunAsAnotherUser" ) ;
@@ -497,42 +551,42 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
497
551
UnloadMenuFlyoutItemByName ( "OpenItemWithAppPicker" ) ;
498
552
UnloadMenuFlyoutItemByName ( "RunAsAdmin" ) ;
499
553
UnloadMenuFlyoutItemByName ( "RunAsAnotherUser" ) ;
500
- ( this . FindName ( "CreateShortcut" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
554
+ LoadMenuFlyoutItemByName ( "CreateShortcut" ) ;
501
555
}
502
556
else if ( SelectedItem . FileExtension . Equals ( ".exe" , StringComparison . OrdinalIgnoreCase )
503
557
|| SelectedItem . FileExtension . Equals ( ".bat" , StringComparison . OrdinalIgnoreCase ) )
504
558
{
505
- ( this . FindName ( "OpenItem" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
559
+ LoadMenuFlyoutItemByName ( "OpenItem" ) ;
506
560
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" ) ;
510
564
}
511
565
else if ( SelectedItem . FileExtension . Equals ( ".msi" , StringComparison . OrdinalIgnoreCase ) )
512
566
{
513
567
UnloadMenuFlyoutItemByName ( "OpenItem" ) ;
514
568
UnloadMenuFlyoutItemByName ( "OpenItemWithAppPicker" ) ;
515
569
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" ) ;
518
572
}
519
573
else if ( SelectedItem . FileExtension . Equals ( ".appx" , StringComparison . OrdinalIgnoreCase )
520
574
|| SelectedItem . FileExtension . Equals ( ".msix" , StringComparison . OrdinalIgnoreCase )
521
575
|| SelectedItem . FileExtension . Equals ( ".appxbundle" , StringComparison . OrdinalIgnoreCase )
522
576
|| SelectedItem . FileExtension . Equals ( ".msixbundle" , StringComparison . OrdinalIgnoreCase ) )
523
577
{
524
- ( this . FindName ( "OpenItemWithAppPicker" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
578
+ LoadMenuFlyoutItemByName ( "OpenItemWithAppPicker" ) ;
525
579
UnloadMenuFlyoutItemByName ( "RunAsAdmin" ) ;
526
580
UnloadMenuFlyoutItemByName ( "RunAsAnotherUser" ) ;
527
- ( this . FindName ( "CreateShortcut" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
581
+ LoadMenuFlyoutItemByName ( "CreateShortcut" ) ;
528
582
}
529
583
else
530
584
{
531
- ( this . FindName ( "OpenItem" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
532
- ( this . FindName ( "OpenItemWithAppPicker" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
585
+ LoadMenuFlyoutItemByName ( "OpenItem" ) ;
586
+ LoadMenuFlyoutItemByName ( "OpenItemWithAppPicker" ) ;
533
587
UnloadMenuFlyoutItemByName ( "RunAsAdmin" ) ;
534
588
UnloadMenuFlyoutItemByName ( "RunAsAnotherUser" ) ;
535
- ( this . FindName ( "CreateShortcut" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
589
+ LoadMenuFlyoutItemByName ( "CreateShortcut" ) ;
536
590
}
537
591
}
538
592
}
@@ -555,23 +609,20 @@ public void RightClickItemContextMenu_Opening(object sender, object e)
555
609
}
556
610
else if ( SelectedItems . Count == 1 )
557
611
{
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" ) ;
561
615
}
562
616
else
563
617
{
564
- ( this . FindName ( "SidebarPinItem" ) as MenuFlyoutItemBase ) . Visibility = Visibility . Visible ;
618
+ LoadMenuFlyoutItemByName ( "SidebarPinItem" ) ;
565
619
UnloadMenuFlyoutItemByName ( "CreateShortcut" ) ;
566
620
}
567
621
568
622
if ( SelectedItems . Count <= 5 && SelectedItems . Count > 0 )
569
623
{
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" ) ;
575
626
}
576
627
else if ( SelectedItems . Count > 5 )
577
628
{
0 commit comments