Skip to content

Commit d1e3572

Browse files
Allow to pin drives to favorites (#9380)
1 parent c2257f1 commit d1e3572

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

src/Files.Uwp/DataModels/NavigationControlItems/DriveItem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public string Path
4848
public bool IsRemovable => Type == DriveType.Removable || Type == DriveType.CDRom;
4949
public bool IsNetwork => Type == DriveType.Network;
5050

51+
public bool IsPinned => App.SidebarPinnedController.Model.FavoriteItems.Contains(path);
52+
5153
private ByteSize maxSpace;
5254
private ByteSize freeSpace;
5355
private ByteSize spaceUsed;

src/Files.Uwp/UserControls/SidebarControl.xaml.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ public ICommand EmptyRecycleBinCommand
109109

110110
private ICommand HideSectionCommand { get; }
111111

112+
private ICommand PinItemCommand { get; }
113+
112114
private ICommand UnpinItemCommand { get; }
113115

114116
private ICommand MoveItemToTopCommand { get; }
@@ -143,6 +145,7 @@ public SidebarControl()
143145

144146
HideSectionCommand = new RelayCommand(HideSection);
145147
UnpinItemCommand = new RelayCommand(UnpinItem);
148+
PinItemCommand = new RelayCommand(PinItem);
146149
MoveItemToTopCommand = new RelayCommand(MoveItemToTop);
147150
MoveItemUpCommand = new RelayCommand(MoveItemUp);
148151
MoveItemDownCommand = new RelayCommand(MoveItemDown);
@@ -193,6 +196,9 @@ private List<ContextMenuFlyoutItemViewModel> GetLocationItemMenuItems(INavigatio
193196
bool showMoveItemUp = favoriteIndex > 0;
194197
bool showMoveItemDown = favoriteIndex < favoriteCount - 1;
195198

199+
bool isDriveItem = item is DriveItem;
200+
bool isDriveItemPinned = isDriveItem && (item as DriveItem).IsPinned;
201+
196202
return new List<ContextMenuFlyoutItemViewModel>()
197203
{
198204
new ContextMenuFlyoutItemViewModel()
@@ -272,11 +278,18 @@ private List<ContextMenuFlyoutItemViewModel> GetLocationItemMenuItems(INavigatio
272278
ShowItem = showMoveItemDown
273279
},
274280
new ContextMenuFlyoutItemViewModel()
281+
{
282+
Text = "BaseLayoutItemContextFlyoutPinToFavorites/Text".GetLocalized(),
283+
Glyph = "\uE840",
284+
Command = PinItemCommand,
285+
ShowItem = isDriveItem && !isDriveItemPinned
286+
},
287+
new ContextMenuFlyoutItemViewModel()
275288
{
276289
Text = "SideBarUnpinFromFavorites/Text".GetLocalized(),
277290
Glyph = "\uE77A",
278291
Command = UnpinItemCommand,
279-
ShowItem = options.ShowUnpinItem
292+
ShowItem = options.ShowUnpinItem || isDriveItemPinned
280293
},
281294
new ContextMenuFlyoutItemViewModel()
282295
{
@@ -367,14 +380,22 @@ private async void OpenInNewWindow()
367380
await NavigationHelpers.OpenPathInNewWindowAsync(rightClickedItem.Path);
368381
}
369382

383+
private void PinItem()
384+
{
385+
if(rightClickedItem is DriveItem)
386+
{
387+
App.SidebarPinnedController.Model.AddItem(rightClickedItem.Path);
388+
}
389+
}
390+
370391
private void UnpinItem()
371392
{
372393
if (rightClickedItem.MenuOptions.ShowEmptyRecycleBin)
373394
{
374395
UserSettingsService.AppearanceSettingsService.PinRecycleBinToSidebar = false;
375396
App.SidebarPinnedController.Model.ShowHideRecycleBinItem(false);
376397
}
377-
else if (rightClickedItem.Section == SectionType.Favorites)
398+
else if (rightClickedItem.Section == SectionType.Favorites || rightClickedItem is DriveItem)
378399
{
379400
App.SidebarPinnedController.Model.RemoveItem(rightClickedItem.Path);
380401
}

src/Files.Uwp/UserControls/Widgets/DrivesWidget.xaml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,26 @@
108108
<FontIcon Glyph="&#xE737;" />
109109
</MenuFlyoutItem.Icon>
110110
</MenuFlyoutItem>
111+
<MenuFlyoutItem
112+
x:Name="PinToFavorites"
113+
Click="PinToFavorites_Click"
114+
DataContext="{x:Bind Item}"
115+
Text="{helpers:ResourceString Name=BaseLayoutItemContextFlyoutPinToFavorites/Text}"
116+
Visibility="Collapsed">
117+
<MenuFlyoutItem.Icon>
118+
<FontIcon Glyph="&#xE840;" />
119+
</MenuFlyoutItem.Icon>
120+
</MenuFlyoutItem>
121+
<MenuFlyoutItem
122+
x:Name="UnpinFromFavorites"
123+
Click="UnpinFromFavorites_Click"
124+
DataContext="{x:Bind Item}"
125+
Text="{helpers:ResourceString Name=BaseLayoutContextFlyoutUnpinFromFavorites/Text}"
126+
Visibility="Collapsed">
127+
<MenuFlyoutItem.Icon>
128+
<FontIcon Glyph="&#xE77A;" />
129+
</MenuFlyoutItem.Icon>
130+
</MenuFlyoutItem>
111131
<MenuFlyoutItem
112132
x:Name="PropertiesItem"
113133
Click="OpenDriveProperties_Click"

src/Files.Uwp/UserControls/Widgets/DrivesWidget.xaml.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,26 @@ private async void OpenInNewWindow_Click(object sender, RoutedEventArgs e)
167167
await NavigationHelpers.OpenPathInNewWindowAsync(item.Path);
168168
}
169169

170+
private async void PinToFavorites_Click(object sender, RoutedEventArgs e)
171+
{
172+
var item = ((MenuFlyoutItem)sender).DataContext as DriveItem;
173+
if (await CheckEmptyDrive(item.Path))
174+
{
175+
return;
176+
}
177+
App.SidebarPinnedController.Model.AddItem(item.Path);
178+
}
179+
180+
private async void UnpinFromFavorites_Click(object sender, RoutedEventArgs e)
181+
{
182+
var item = ((MenuFlyoutItem)sender).DataContext as DriveItem;
183+
if (await CheckEmptyDrive(item.Path))
184+
{
185+
return;
186+
}
187+
App.SidebarPinnedController.Model.RemoveItem(item.Path);
188+
}
189+
170190
private async void OpenDriveProperties_Click(object sender, RoutedEventArgs e)
171191
{
172192
var item = ((MenuFlyoutItem)sender).DataContext as DriveItem;
@@ -236,6 +256,12 @@ private void MenuFlyout_Opening(object sender, object e)
236256
{
237257
var newPaneMenuItem = (sender as MenuFlyout).Items.Single(x => x.Name == "OpenInNewPane");
238258
newPaneMenuItem.Visibility = ShowMultiPaneControls ? Visibility.Visible : Visibility.Collapsed;
259+
260+
var pinToFavoritesItem = (sender as MenuFlyout).Items.Single(x => x.Name == "PinToFavorites");
261+
pinToFavoritesItem.Visibility = (pinToFavoritesItem.DataContext as DriveItem).IsPinned ? Visibility.Collapsed : Visibility.Visible;
262+
263+
var unpinFromFavoritesItem = (sender as MenuFlyout).Items.Single(x => x.Name == "UnpinFromFavorites");
264+
unpinFromFavoritesItem.Visibility = (unpinFromFavoritesItem.DataContext as DriveItem).IsPinned ? Visibility.Visible : Visibility.Collapsed;
239265
}
240266

241267
private async void MapNetworkDrive_Click(object sender, RoutedEventArgs e)

0 commit comments

Comments
 (0)