Skip to content

Commit 08dfec2

Browse files
Added/improved layout modes (#827)
* Added 'Tiles' and resizable grid layouts * Added QuickLook shortcut support to the tiles layout. * Fixed type to find and F2 to rename for tiles layout * Merged TilesBrowser into PhotoAlbum * PhotoAlbum now only updates the DataTemplate when the layout changes * Added layout change support for ctrl + numeric +/- * Improvements to tiles layout * Renamed PhotoAlbum to GridViewBrowser * Fixed layout rename file duplicates Co-authored-by: Yair Aichenbaum <[email protected]>
1 parent fe9d674 commit 08dfec2

15 files changed

+529
-148
lines changed

Files/Assets/FolderIconLarge.svg

Lines changed: 20 additions & 0 deletions
Loading

Files/BaseLayout.cs

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Runtime.CompilerServices;
1111
using Windows.ApplicationModel.DataTransfer;
1212
using Windows.Storage;
13+
using Windows.System;
1314
using Windows.UI.Core;
1415
using Windows.UI.Xaml;
1516
using Windows.UI.Xaml.Controls;
@@ -144,7 +145,7 @@ private void AppSettings_LayoutModeChangeRequested(object sender, EventArgs e)
144145
}
145146
else
146147
{
147-
App.CurrentInstance.ContentFrame.Navigate(typeof(PhotoAlbum), App.CurrentInstance.ViewModel.WorkingDirectory, null);
148+
App.CurrentInstance.ContentFrame.Navigate(typeof(GridViewBrowser), App.CurrentInstance.ViewModel.WorkingDirectory, null);
148149
}
149150
}
150151
}
@@ -204,7 +205,9 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
204205

205206
private void UnloadMenuFlyoutItemByName(string nameToUnload)
206207
{
207-
Windows.UI.Xaml.Markup.XamlMarkupHelper.UnloadObject(this.FindName(nameToUnload) as DependencyObject);
208+
var menuItem = this.FindName(nameToUnload) as DependencyObject;
209+
if (menuItem != null) // Prevent crash if the MenuFlyoutItem is missing
210+
(menuItem as MenuFlyoutItem).Visibility = Visibility.Collapsed;
208211
}
209212

210213
public void RightClickContextMenu_Opening(object sender, object e)
@@ -227,11 +230,13 @@ public void RightClickContextMenu_Opening(object sender, object e)
227230
if (selectedDataItem.FileExtension.Equals(".zip", StringComparison.OrdinalIgnoreCase))
228231
{
229232
UnloadMenuFlyoutItemByName("OpenItem");
230-
this.FindName("UnzipItem");
233+
(this.FindName("UnzipItem") as MenuFlyoutItem).Visibility = Visibility.Visible;
234+
//this.FindName("UnzipItem");
231235
}
232236
else if (!selectedDataItem.FileExtension.Equals(".zip", StringComparison.OrdinalIgnoreCase))
233237
{
234-
this.FindName("OpenItem");
238+
(this.FindName("OpenItem") as MenuFlyoutItem).Visibility = Visibility.Visible;
239+
//this.FindName("OpenItem");
235240
UnloadMenuFlyoutItemByName("UnzipItem");
236241
}
237242
}
@@ -247,14 +252,18 @@ public void RightClickContextMenu_Opening(object sender, object e)
247252
UnloadMenuFlyoutItemByName("OpenItem");
248253
if (selectedFileSystemItems.Count <= 5 && selectedFileSystemItems.Count > 0)
249254
{
250-
this.FindName("SidebarPinItem");
251-
this.FindName("OpenInNewTab");
252-
this.FindName("OpenInNewWindowItem");
255+
(this.FindName("SidebarPinItem") as MenuFlyoutItem).Visibility = Visibility.Visible;
256+
(this.FindName("OpenInNewTab") as MenuFlyoutItem).Visibility = Visibility.Visible;
257+
(this.FindName("OpenInNewWindowItem") as MenuFlyoutItem).Visibility = Visibility.Visible;
258+
//this.FindName("SidebarPinItem");
259+
//this.FindName("OpenInNewTab");
260+
//this.FindName("OpenInNewWindowItem");
253261
UnloadMenuFlyoutItemByName("UnzipItem");
254262
}
255263
else if (selectedFileSystemItems.Count > 5)
256264
{
257-
this.FindName("SidebarPinItem");
265+
(this.FindName("SidebarPinItem") as MenuFlyoutItem).Visibility = Visibility.Visible;
266+
//this.FindName("SidebarPinItem");
258267
UnloadMenuFlyoutItemByName("OpenInNewTab");
259268
UnloadMenuFlyoutItemByName("OpenInNewWindowItem");
260269
UnloadMenuFlyoutItemByName("UnzipItem");
@@ -376,5 +385,41 @@ protected void InitializeDrag(UIElement element)
376385
}
377386
}
378387
}
388+
389+
// VirtualKey doesn't support / accept plus and minus by default.
390+
public readonly VirtualKey plusKey = (VirtualKey)187;
391+
public readonly VirtualKey minusKey = (VirtualKey)189;
392+
393+
public void GridViewSizeIncrease(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
394+
{
395+
App.AppSettings.GridViewSize = App.AppSettings.GridViewSize + 25; // Make Larger
396+
if (args != null)
397+
args.Handled = true;
398+
}
399+
400+
public void GridViewSizeDecrease(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
401+
{
402+
App.AppSettings.GridViewSize = App.AppSettings.GridViewSize - 25; // Make Smaller
403+
if (args != null)
404+
args.Handled = true;
405+
}
406+
407+
public void BaseLayout_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
408+
{
409+
if (e.KeyModifiers == VirtualKeyModifiers.Control)
410+
{
411+
if (e.GetCurrentPoint(null).Properties.MouseWheelDelta < 0) // Mouse wheel down
412+
{
413+
GridViewSizeDecrease(null, null);
414+
}
415+
else // Mouse wheel up
416+
{
417+
GridViewSizeIncrease(null, null);
418+
}
419+
420+
e.Handled = true;
421+
}
422+
}
423+
379424
}
380425
}

Files/Files.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@
215215
<Compile Include="IShellPage.cs" />
216216
<Compile Include="LocationsList.cs" />
217217
<Compile Include="Navigation\NavigationActions.cs" />
218-
<Compile Include="UserControls\LayoutModes\PhotoAlbum.xaml.cs">
219-
<DependentUpon>PhotoAlbum.xaml</DependentUpon>
218+
<Compile Include="UserControls\LayoutModes\GridViewBrowser.xaml.cs">
219+
<DependentUpon>GridViewBrowser.xaml</DependentUpon>
220220
</Compile>
221221
<Compile Include="Interacts\LoadingIndicator.cs" />
222222
<Compile Include="Views\Pages\ModernShellPage.xaml.cs">
@@ -266,6 +266,7 @@
266266
<Content Include="Assets\Files UWP Icon.png" />
267267
<Content Include="Assets\FilesHome.png" />
268268
<Content Include="Assets\FolderIcon.svg" />
269+
<Content Include="Assets\FolderIconLarge.svg" />
269270
<Content Include="Assets\LargeTile.scale-100.png" />
270271
<Content Include="Assets\LargeTile.scale-125.png" />
271272
<Content Include="Assets\LargeTile.scale-150.png" />
@@ -406,7 +407,7 @@
406407
<SubType>Designer</SubType>
407408
<Generator>MSBuild:Compile</Generator>
408409
</Page>
409-
<Page Include="UserControls\LayoutModes\PhotoAlbum.xaml">
410+
<Page Include="UserControls\LayoutModes\GridViewBrowser.xaml">
410411
<SubType>Designer</SubType>
411412
<Generator>MSBuild:Compile</Generator>
412413
</Page>

Files/Interacts/Interaction.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public async void OpenInNewWindowItem_Click(object sender, RoutedEventArgs e)
109109
await Launcher.LaunchUriAsync(folderUri);
110110
}
111111
}
112-
else if (CurrentSourceType == typeof(PhotoAlbum))
112+
else if (CurrentSourceType == typeof(GridViewBrowser))
113113
{
114114
var items = (CurrentInstance.ContentPage as BaseLayout).SelectedItems;
115115
foreach (ListedItem listedItem in items)
@@ -555,7 +555,7 @@ private async void Manager_DataRequested(DataTransferManager sender, DataRequest
555555
}
556556
}
557557
}
558-
else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum))
558+
else if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser))
559559
{
560560
foreach (ListedItem li in (CurrentInstance.ContentPage as BaseLayout).SelectedItems)
561561
{
@@ -696,10 +696,10 @@ public void RenameItem_Click(object sender, RoutedEventArgs e)
696696
fileBrowser.AllView.CurrentColumn = fileBrowser.AllView.Columns[1];
697697
fileBrowser.AllView.BeginEdit();
698698
}
699-
else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum))
699+
else if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser))
700700
{
701-
var photoAlbum = App.CurrentInstance.ContentPage as PhotoAlbum;
702-
photoAlbum.StartRename();
701+
var GridViewBrowser = App.CurrentInstance.ContentPage as GridViewBrowser;
702+
GridViewBrowser.StartRename();
703703
}
704704
}
705705

@@ -792,10 +792,10 @@ public async void CutItem_Click(object sender, RoutedEventArgs e)
792792
if (element != null)
793793
element.Opacity = 1;
794794
}
795-
else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum))
795+
else if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser))
796796
{
797797
List<Grid> itemContentGrids = new List<Grid>();
798-
GridViewItem gridViewItem = (CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(listedItem) as GridViewItem;
798+
GridViewItem gridViewItem = (CurrentInstance.ContentPage as GridViewBrowser).FileList.ContainerFromItem(listedItem) as GridViewItem;
799799
if (gridViewItem == null)
800800
continue;
801801
FindChildren<Grid>(itemContentGrids, gridViewItem);
@@ -811,9 +811,9 @@ public async void CutItem_Click(object sender, RoutedEventArgs e)
811811
{
812812
(CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(listedItem).Opacity = 0.4;
813813
}
814-
else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum))
814+
else if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser))
815815
{
816-
GridViewItem itemToDimForCut = (GridViewItem)(CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(listedItem);
816+
GridViewItem itemToDimForCut = (GridViewItem)(CurrentInstance.ContentPage as GridViewBrowser).FileList.ContainerFromItem(listedItem);
817817
List<Grid> itemContentGrids = new List<Grid>();
818818
FindChildren<Grid>(itemContentGrids, itemToDimForCut);
819819
var imageOfItem = itemContentGrids.Find(x => x.Tag?.ToString() == "ItemImage");
@@ -870,7 +870,7 @@ public async void CopyItem_ClickAsync(object sender, RoutedEventArgs e)
870870
}
871871
}
872872
}
873-
else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum))
873+
else if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser))
874874
{
875875
CopySourcePath = CurrentInstance.ViewModel.WorkingDirectory;
876876

@@ -1062,9 +1062,9 @@ public async void ExtractItems_Click(object sender, RoutedEventArgs e)
10621062
var page = (CurrentInstance.ContentPage as GenericFileBrowser);
10631063
selectedItem = await StorageFile.GetFileFromPathAsync(CurrentInstance.ViewModel.FilesAndFolders[page.AllView.SelectedIndex].ItemPath);
10641064
}
1065-
else if (CurrentInstance.ContentFrame.CurrentSourcePageType == typeof(PhotoAlbum))
1065+
else if (CurrentInstance.ContentFrame.CurrentSourcePageType == typeof(GridViewBrowser))
10661066
{
1067-
var page = (CurrentInstance.ContentPage as PhotoAlbum);
1067+
var page = (CurrentInstance.ContentPage as GridViewBrowser);
10681068
selectedItem = await StorageFile.GetFileFromPathAsync(CurrentInstance.ViewModel.FilesAndFolders[page.FileList.SelectedIndex].ItemPath);
10691069
}
10701070

Files/Strings/en-US/Resources.resw

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,6 @@
234234
<data name="StatusBarControlListView.Text" xml:space="preserve">
235235
<value>List View</value>
236236
</data>
237-
<data name="StatusBarControlGridView.Text" xml:space="preserve">
238-
<value>Grid View</value>
239-
</data>
240237
<data name="PropertiesModified.Text" xml:space="preserve">
241238
<value>Modified:</value>
242239
</data>
@@ -588,4 +585,16 @@
588585
<data name="BaseLayoutItemContextFlyoutSetAsLockscreenBackground.Text" xml:space="preserve">
589586
<value>Set as lockscreen background</value>
590587
</data>
588+
<data name="StatusBarControlGridViewLarge.Text" xml:space="preserve">
589+
<value>Grid View (Large)</value>
590+
</data>
591+
<data name="StatusBarControlGridViewMedium.Text" xml:space="preserve">
592+
<value>Grid View (Medium)</value>
593+
</data>
594+
<data name="StatusBarControlGridViewSmall.Text" xml:space="preserve">
595+
<value>Grid View (Small)</value>
596+
</data>
597+
<data name="StatusBarControlTilesView.Text" xml:space="preserve">
598+
<value>Tiles View</value>
599+
</data>
591600
</root>

Files/UserControls/LayoutModes/GenericFileBrowser.xaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
1515
NavigationCacheMode="Required"
1616
PointerReleased="GenericItemView_PointerReleased"
17-
mc:Ignorable="d">
17+
mc:Ignorable="d"
18+
PointerWheelChanged="BaseLayout_PointerWheelChanged">
1819

1920
<local:BaseLayout.Resources>
2021
<MenuFlyout x:Key="BaseLayoutContextFlyout">
@@ -287,6 +288,10 @@
287288
x:Name="RootGrid"
288289
Background="Transparent"
289290
ContextFlyout="{StaticResource BaseLayoutContextFlyout}">
291+
<Grid.KeyboardAccelerators>
292+
<KeyboardAccelerator Key="{ x:Bind plusKey }" Modifiers="Control" Invoked="{x:Bind local:App.CurrentInstance.ContentPage.GridViewSizeIncrease}" />
293+
<KeyboardAccelerator Key="Add" Modifiers="Control" Invoked="{x:Bind local:App.CurrentInstance.ContentPage.GridViewSizeIncrease}" />
294+
</Grid.KeyboardAccelerators>
290295
<ProgressBar
291296
x:Name="progBar"
292297
Height="10"

0 commit comments

Comments
 (0)