1- using Microsoft . Toolkit . Uwp . UI ;
1+ using Microsoft . Toolkit . Uwp . UI ;
22using Microsoft . Toolkit . Uwp . UI . Controls ;
33using System ;
44using System . ComponentModel ;
1111using Files . Filesystem ;
1212using Files . Interacts ;
1313using System . IO ;
14+ using Windows . UI . Xaml . Media ;
15+ using System . Collections . Generic ;
1416using System . Runtime . CompilerServices ;
1517using Windows . System ;
1618using Windows . UI . Xaml . Input ;
19+ using System . Linq ;
1720
1821namespace Files
1922{
@@ -108,9 +111,10 @@ public GenericFileBrowser()
108111 NewFolder . Click += tabInstance . instanceInteraction . NewFolder_Click ;
109112 NewBitmapImage . Click += tabInstance . instanceInteraction . NewBitmapImage_Click ;
110113 NewTextDocument . Click += tabInstance . instanceInteraction . NewTextDocument_Click ;
114+ UnzipItem . Click += tabInstance . instanceInteraction . ExtractItems_Click ;
111115 PropertiesItem . Click += tabInstance . ShowPropertiesButton_Click ;
112116 OpenInNewWindowItem . Click += tabInstance . instanceInteraction . OpenInNewWindowItem_Click ;
113-
117+
114118 switch ( viewModelInstance . DirectorySortOption )
115119 {
116120 case SortOption . Name :
@@ -148,7 +152,8 @@ private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e
148152 SortedColumn = sizeColumn ;
149153 break ;
150154 }
151- } else if ( e . PropertyName == "DirectorySortDirection" )
155+ }
156+ else if ( e . PropertyName == "DirectorySortDirection" )
152157 {
153158 // Swap arrows
154159 SortedColumn = _sortedColumn ;
@@ -179,7 +184,7 @@ private void Clipboard_ContentChanged(object sender, object e)
179184 protected override void OnNavigatedTo ( NavigationEventArgs eventArgs )
180185 {
181186 base . OnNavigatedTo ( eventArgs ) ;
182-
187+
183188 tabInstance . BackButton . IsEnabled = tabInstance . accessibleContentFrame . CanGoBack ;
184189 tabInstance . ForwardButton . IsEnabled = tabInstance . accessibleContentFrame . CanGoForward ;
185190 tabInstance . RefreshButton . IsEnabled = true ;
@@ -252,13 +257,13 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
252257 data . Columns [ 0 ] . GetCellContent ( dataGridRow ) . Opacity = 1 ;
253258 }
254259 }
255-
260+
256261 }
257262
258263 protected override void OnNavigatingFrom ( NavigatingCancelEventArgs e )
259264 {
260265 base . OnNavigatingFrom ( e ) ;
261- if ( tabInstance . instanceViewModel . _fileQueryResult != null )
266+ if ( tabInstance . instanceViewModel . _fileQueryResult != null )
262267 {
263268 tabInstance . instanceViewModel . _fileQueryResult . ContentsChanged -= tabInstance . instanceViewModel . FileContentsChanged ;
264269 }
@@ -269,24 +274,24 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
269274 private void AllView_DragOver ( object sender , DragEventArgs e )
270275 {
271276 e . AcceptedOperation = DataPackageOperation . Copy ;
272-
277+
273278 }
274279
275280 private async void AllView_DropAsync ( object sender , DragEventArgs e )
276281 {
277282 if ( e . DataView . Contains ( StandardDataFormats . StorageItems ) )
278283 {
279- foreach ( IStorageItem item in await e . DataView . GetStorageItemsAsync ( ) )
284+ foreach ( IStorageItem item in await e . DataView . GetStorageItemsAsync ( ) )
285+ {
286+ if ( item . IsOfType ( StorageItemTypes . Folder ) )
280287 {
281- if ( item . IsOfType ( StorageItemTypes . Folder ) )
282- {
283- tabInstance . instanceInteraction . CloneDirectoryAsync ( ( item as StorageFolder ) . Path , tabInstance . instanceViewModel . Universal . path , ( item as StorageFolder ) . DisplayName ) ;
284- }
285- else
286- {
287- await ( item as StorageFile ) . CopyAsync ( await StorageFolder . GetFolderFromPathAsync ( tabInstance . instanceViewModel . Universal . path ) ) ;
288- }
288+ tabInstance . instanceInteraction . CloneDirectoryAsync ( ( item as StorageFolder ) . Path , tabInstance . instanceViewModel . Universal . path , ( item as StorageFolder ) . DisplayName ) ;
289289 }
290+ else
291+ {
292+ await ( item as StorageFile ) . CopyAsync ( await StorageFolder . GetFolderFromPathAsync ( tabInstance . instanceViewModel . Universal . path ) ) ;
293+ }
294+ }
290295 }
291296 }
292297
@@ -338,13 +343,13 @@ private void GenericItemView_PointerReleased(object sender, Windows.UI.Xaml.Inpu
338343 private void AllView_SelectionChanged ( object sender , SelectionChangedEventArgs e )
339344 {
340345 AllView . CommitEdit ( ) ;
341- if ( e . AddedItems . Count > 0 )
346+ if ( e . AddedItems . Count > 0 )
342347 {
343348 tabInstance . HomeItems . isEnabled = true ;
344349 tabInstance . ShareItems . isEnabled = true ;
345350
346351 }
347- else if ( data . SelectedItems . Count == 0 )
352+ else if ( data . SelectedItems . Count == 0 )
348353 {
349354 tabInstance . HomeItems . isEnabled = false ;
350355 tabInstance . ShareItems . isEnabled = false ;
@@ -373,34 +378,66 @@ private void AllView_DragStarting(UIElement sender, DragStartingEventArgs args)
373378
374379 private void AllView_DragLeave ( object sender , DragEventArgs e )
375380 {
376-
381+
377382 }
378383
379384 private void RightClickContextMenu_Opened ( object sender , object e )
380385 {
381386 var selectedDataItem = AllView . SelectedItem as ListedItem ;
382- if ( selectedDataItem . FileType != "Folder" || AllView . SelectedItems . Count > 1 )
387+
388+ // Search selected items for non-Folders
389+ if ( AllView . SelectedItems . Cast < ListedItem > ( ) . Any ( x => x . FileType != "Folder" ) )
383390 {
384391 SidebarPinItem . Visibility = Visibility . Collapsed ;
385392 OpenInNewTab . Visibility = Visibility . Collapsed ;
386393 OpenInNewWindowItem . Visibility = Visibility . Collapsed ;
394+ if ( AllView . SelectedItems . Count == 1 )
395+ {
396+ if ( selectedDataItem . DotFileExtension . Equals ( ".zip" , StringComparison . OrdinalIgnoreCase ) )
397+ {
398+ OpenItem . Visibility = Visibility . Collapsed ;
399+ UnzipItem . Visibility = Visibility . Collapsed ;
400+ }
401+ else if ( ! selectedDataItem . DotFileExtension . Equals ( ".zip" , StringComparison . OrdinalIgnoreCase ) )
402+ {
403+ OpenItem . Visibility = Visibility . Visible ;
404+ UnzipItem . Visibility = Visibility . Collapsed ;
405+ }
406+ }
407+ else if ( AllView . SelectedItems . Count > 1 )
408+ {
409+ OpenItem . Visibility = Visibility . Collapsed ;
410+ UnzipItem . Visibility = Visibility . Collapsed ;
411+ }
387412 }
388- else if ( selectedDataItem . FileType == "Folder" )
413+ else // All are Folders
389414 {
390- SidebarPinItem . Visibility = Visibility . Visible ;
391- OpenInNewTab . Visibility = Visibility . Visible ;
392- OpenInNewWindowItem . Visibility = Visibility . Visible ;
415+ OpenItem . Visibility = Visibility . Collapsed ;
416+ if ( AllView . SelectedItems . Count <= 5 && AllView . SelectedItems . Count > 0 )
417+ {
418+ SidebarPinItem . Visibility = Visibility . Visible ;
419+ OpenInNewTab . Visibility = Visibility . Visible ;
420+ OpenInNewWindowItem . Visibility = Visibility . Visible ;
421+ UnzipItem . Visibility = Visibility . Collapsed ;
422+ }
423+ else if ( AllView . SelectedItems . Count > 5 )
424+ {
425+ SidebarPinItem . Visibility = Visibility . Visible ;
426+ OpenInNewTab . Visibility = Visibility . Collapsed ;
427+ OpenInNewWindowItem . Visibility = Visibility . Collapsed ;
428+ UnzipItem . Visibility = Visibility . Collapsed ;
429+ }
430+
393431 }
394432 }
395-
396433 private void AllView_Sorting ( object sender , DataGridColumnEventArgs e )
397434 {
398435 if ( e . Column == SortedColumn )
399436 viewModelInstance . IsSortedAscending = ! viewModelInstance . IsSortedAscending ;
400437 else if ( e . Column != iconColumn )
401438 SortedColumn = e . Column ;
402439 }
403-
440+
404441 private void AllView_PreviewKeyDown ( object sender , KeyRoutedEventArgs e )
405442 {
406443 if ( e . Key == VirtualKey . Enter )
@@ -410,7 +447,7 @@ private void AllView_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
410447 }
411448 }
412449 }
413-
450+
414451 public class EmptyFolderTextState : INotifyPropertyChanged
415452 {
416453 public Visibility _isVisible ;
@@ -437,4 +474,4 @@ private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
437474 PropertyChanged ? . Invoke ( this , new PropertyChangedEventArgs ( propertyName ) ) ;
438475 }
439476 }
440- }
477+ }
0 commit comments