Skip to content

Commit 8bc30c8

Browse files
authored
Added properties to the context menu for items in the sidebar (#2089)
1 parent 7111318 commit 8bc30c8

File tree

4 files changed

+78
-8
lines changed

4 files changed

+78
-8
lines changed

Files/Interacts/Interaction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ await OpenPropertiesWindow(App.AppSettings.DrivesManager.Drives
569569
}
570570
}
571571

572-
private async Task OpenPropertiesWindow(object item)
572+
public async Task OpenPropertiesWindow(object item)
573573
{
574574
if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8))
575575
{

Files/UserControls/SidebarControl.xaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,16 @@
201201
<FontIcon FontFamily="{StaticResource FluentUIGlyphs}" Glyph="&#xEB20;" />
202202
</MenuFlyoutItem.Icon>
203203
</MenuFlyoutItem>
204+
<MenuFlyoutItem
205+
x:Name="PropertiesFolder"
206+
x:Uid="BaseLayoutContextFlyoutPropertiesFolder"
207+
x:Load="{x:Bind ShowProperties, Mode=OneWay}"
208+
Click="Properties_Click"
209+
Text="Properties">
210+
<MenuFlyoutItem.Icon>
211+
<FontIcon FontFamily="{StaticResource FluentUIGlyphs}" Glyph="&#xea8d;" />
212+
</MenuFlyoutItem.Icon>
213+
</MenuFlyoutItem>
204214
</MenuFlyout.Items>
205215
</MenuFlyout>
206216
</ResourceDictionary>

Files/UserControls/SidebarControl.xaml.cs

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,24 @@ public bool ShowUnpinItem
6060
}
6161
}
6262

63+
private bool _ShowProperties;
64+
65+
public bool ShowProperties
66+
{
67+
get
68+
{
69+
return _ShowProperties;
70+
}
71+
set
72+
{
73+
if (value != _ShowProperties)
74+
{
75+
_ShowProperties = value;
76+
NotifyPropertyChanged(nameof(ShowProperties));
77+
}
78+
}
79+
}
80+
6381
private bool _ShowEmptyRecycleBin;
6482

6583
public bool ShowEmptyRecycleBin
@@ -195,10 +213,19 @@ private async void NavigationViewLocationItem_RightTapped(object sender, RightTa
195213

196214
ShowEmptyRecycleBin = true;
197215
ShowUnpinItem = true;
216+
ShowProperties = false;
198217
}
199218
else
200219
{
201220
ShowEmptyRecycleBin = false;
221+
// Set to true if properties should be displayed for pinned folders
222+
ShowProperties = false;
223+
}
224+
225+
// Additional check needed because ShowProperties is set to true if not recycle bin
226+
if (item.IsDefaultLocation)
227+
{
228+
ShowProperties = false;
202229
}
203230

204231
SideBarItemContextFlyout.ShowAt(sidebarItem, e.GetPosition(sidebarItem));
@@ -211,6 +238,7 @@ private void NavigationViewDriveItem_RightTapped(object sender, RightTappedRoute
211238

212239
ShowUnpinItem = false;
213240
ShowEmptyRecycleBin = false;
241+
ShowProperties = true;
214242

215243
SideBarItemContextFlyout.ShowAt(sidebarItem, e.GetPosition(sidebarItem));
216244

@@ -259,19 +287,19 @@ private async void NavigationViewLocationItem_DragOver(object sender, DragEventA
259287
locationItem.Path.Equals(App.AppSettings.RecycleBinPath, StringComparison.OrdinalIgnoreCase) ||
260288
storageItems.AreItemsAlreadyInFolder(locationItem.Path))
261289
{
262-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.None;
290+
e.AcceptedOperation = DataPackageOperation.None;
263291
}
264292
else
265293
{
266294
e.DragUIOverride.IsCaptionVisible = true;
267295
if (storageItems.AreItemsInSameDrive(locationItem.Path))
268296
{
269-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move;
297+
e.AcceptedOperation = DataPackageOperation.Move;
270298
e.DragUIOverride.Caption = string.Format(ResourceController.GetTranslation("MoveToFolderCaptionText"), locationItem.Text);
271299
}
272300
else
273301
{
274-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
302+
e.AcceptedOperation = DataPackageOperation.Copy;
275303
e.DragUIOverride.Caption = string.Format(ResourceController.GetTranslation("CopyToFolderCaptionText"), locationItem.Text);
276304
}
277305
}
@@ -302,19 +330,19 @@ private async void NavigationViewDriveItem_DragOver(object sender, DragEventArgs
302330
"Unknown".Equals(driveItem.SpaceText, StringComparison.OrdinalIgnoreCase) ||
303331
storageItems.AreItemsAlreadyInFolder(driveItem.Path))
304332
{
305-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.None;
333+
e.AcceptedOperation = DataPackageOperation.None;
306334
}
307335
else
308336
{
309337
e.DragUIOverride.IsCaptionVisible = true;
310338
if (storageItems.AreItemsInSameDrive(driveItem.Path))
311339
{
312-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Move;
340+
e.AcceptedOperation = DataPackageOperation.Move;
313341
e.DragUIOverride.Caption = string.Format(ResourceController.GetTranslation("MoveToFolderCaptionText"), driveItem.Text);
314342
}
315343
else
316344
{
317-
e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
345+
e.AcceptedOperation = DataPackageOperation.Copy;
318346
e.DragUIOverride.Caption = string.Format(ResourceController.GetTranslation("CopyToFolderCaptionText"), driveItem.Text);
319347
}
320348
}
@@ -331,6 +359,28 @@ private void NavigationViewDriveItem_Drop(object sender, DragEventArgs e)
331359
ItemOperations.PasteItemWithStatus(e.DataView, driveItem.Path, e.AcceptedOperation);
332360
deferral.Complete();
333361
}
362+
363+
private async void Properties_Click(object sender, RoutedEventArgs e)
364+
{
365+
var item = (sender as MenuFlyoutItem).DataContext;
366+
367+
if (item is DriveItem)
368+
{
369+
await App.CurrentInstance.InteractionOperations.OpenPropertiesWindow(item);
370+
}
371+
else if (item is LocationItem)
372+
{
373+
ListedItem listedItem = new ListedItem(null)
374+
{
375+
ItemPath = (item as LocationItem).Path,
376+
ItemName = (item as LocationItem).Text,
377+
PrimaryItemAttribute = Windows.Storage.StorageItemTypes.Folder,
378+
ItemType = ResourceController.GetTranslation("FileFolderListItem"),
379+
LoadFolderGlyph = true
380+
};
381+
await App.CurrentInstance.InteractionOperations.OpenPropertiesWindow(listedItem);
382+
}
383+
}
334384
}
335385

336386
public class NavItemDataTemplateSelector : DataTemplateSelector

Files/View Models/Properties/FolderProperties.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,17 @@ public async override void GetSpecialProperties()
8383
string returnformat = Enum.Parse<TimeStyle>(localSettings.Values[LocalSettings.DateTimeFormat].ToString()) == TimeStyle.Application ? "D" : "g";
8484

8585
StorageFolder storageFolder;
86-
var isItemSelected = await CoreApplication.MainView.ExecuteOnUIThreadAsync(() => App.CurrentInstance.ContentPage.IsItemSelected);
86+
bool isItemSelected;
87+
88+
try
89+
{
90+
isItemSelected = await CoreApplication.MainView.ExecuteOnUIThreadAsync(() => App.CurrentInstance.ContentPage.IsItemSelected);
91+
}
92+
catch
93+
{
94+
isItemSelected = true;
95+
}
96+
8797
if (isItemSelected)
8898
{
8999
storageFolder = await ItemViewModel.GetFolderFromPathAsync(Item.ItemPath);

0 commit comments

Comments
 (0)