Skip to content

Commit 8cb0624

Browse files
committed
Removed ISidebarViewModel
1 parent 0c7408a commit 8cb0624

File tree

9 files changed

+65
-169
lines changed

9 files changed

+65
-169
lines changed

src/Files.App.Controls/Sidebar/ISidebarViewModel.cs

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,8 @@
77

88
namespace Files.App.Controls
99
{
10+
public record ItemInvokedEventArgs(PointerUpdateKind PointerUpdateKind) { }
1011
public record ItemDroppedEventArgs(object DropTarget, DataPackageView DroppedItem, SidebarItemDropPosition dropPosition, DragEventArgs RawEvent) { }
1112
public record ItemDragOverEventArgs(object DropTarget, DataPackageView DroppedItem, SidebarItemDropPosition dropPosition, DragEventArgs RawEvent) { }
1213
public record ItemContextInvokedArgs(object? Item, Point Position) { }
13-
14-
public interface ISidebarViewModel
15-
{
16-
/// <summary>
17-
/// The source/list of items that will be rendered in the sidebar
18-
/// </summary>
19-
object SidebarItems { get; }
20-
21-
/// <summary>
22-
/// Gets invoked when the context was requested for an item in the sidebar.
23-
/// Also applies when context was requested for the pane itsself.
24-
/// </summary>
25-
/// <param name="sender">The sender of this event</param>
26-
/// <param name="args">The <see cref="ItemContextInvokedArgs"/> for this event.</param>
27-
void HandleItemContextInvokedAsync(object sender, ItemContextInvokedArgs args);
28-
29-
/// <summary>
30-
/// Gets invoked when an item drags over any item of the sidebar.
31-
/// </summary>
32-
/// <param name="args">The <see cref="ItemDragOverEventArgs"/> for this event.</param>
33-
/// <returns>A <see cref="Task"/> that represents the asynchronous operation.</returns>
34-
Task HandleItemDragOverAsync(ItemDragOverEventArgs args);
35-
36-
/// <summary>
37-
/// Gets invoked when an item is dropped on any item of the sidebar.
38-
/// </summary>
39-
/// <param name="args">The <see cref="ItemDroppedEventArgs"/> for this event.</param>
40-
/// <returns>A <see cref="Task"/> that represents the asynchronous operation.</returns>
41-
Task HandleItemDroppedAsync(ItemDroppedEventArgs args);
42-
43-
/// <summary>
44-
/// Gets invoked when an item is invoked (double clicked) on any item of the sidebar.
45-
/// </summary>
46-
/// <param name="item">The item that was invoked.</param>
47-
void HandleItemInvokedAsync(object item, PointerUpdateKind pointerUpdateKind);
48-
}
4914
}

src/Files.App.Controls/Sidebar/SidebarItemAutomationPeer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ private IList GetOwnerCollection()
106106
if (Owner.FindAscendant<SidebarItem>() is SidebarItem parent && parent.Item?.Children is IList list)
107107
return list;
108108

109-
if (Owner?.Owner is not null && Owner.Owner.ViewModel.SidebarItems is IList items)
109+
if (Owner?.Owner is not null && Owner.Owner?.MenuItemsSource is IList items)
110110
return items;
111111

112112
return new List<object>();
Lines changed: 28 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,53 @@
11
// Copyright (c) Files Community
22
// Licensed under the MIT License.
33

4+
using CommunityToolkit.WinUI;
5+
46
namespace Files.App.Controls
57
{
68
public sealed partial class SidebarView
79
{
8-
public SidebarDisplayMode DisplayMode
9-
{
10-
get { return (SidebarDisplayMode)GetValue(DisplayModeProperty); }
11-
set { SetValue(DisplayModeProperty, value); }
12-
}
13-
public static readonly DependencyProperty DisplayModeProperty =
14-
DependencyProperty.Register(nameof(DisplayMode), typeof(SidebarDisplayMode), typeof(SidebarView), new PropertyMetadata(SidebarDisplayMode.Expanded, OnPropertyChanged));
10+
[GeneratedDependencyProperty(DefaultValue = SidebarDisplayMode.Expanded)]
11+
public partial SidebarDisplayMode DisplayMode { get; set; }
1512

16-
public UIElement InnerContent
17-
{
18-
get { return (UIElement)GetValue(InnerContentProperty); }
19-
set { SetValue(InnerContentProperty, value); }
20-
}
21-
public static readonly DependencyProperty InnerContentProperty =
22-
DependencyProperty.Register(nameof(InnerContent), typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
13+
[GeneratedDependencyProperty]
14+
public partial UIElement? InnerContent { get; set; }
2315

24-
public UIElement SidebarContent
25-
{
26-
get { return (UIElement)GetValue(SidebarContentProperty); }
27-
set { SetValue(SidebarContentProperty, value); }
28-
}
29-
public static readonly DependencyProperty SidebarContentProperty =
30-
DependencyProperty.Register("SidebarContent", typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
16+
[GeneratedDependencyProperty]
17+
public partial UIElement? SidebarContent { get; set; }
3118

32-
public UIElement Footer
33-
{
34-
get { return (UIElement)GetValue(FooterProperty); }
35-
set { SetValue(FooterProperty, value); }
36-
}
37-
public static readonly DependencyProperty FooterProperty =
38-
DependencyProperty.Register("Footer", typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
19+
[GeneratedDependencyProperty]
20+
public partial UIElement? Footer { get; set; }
3921

40-
public bool IsPaneOpen
41-
{
42-
get { return (bool)GetValue(IsPaneOpenProperty); }
43-
set { SetValue(IsPaneOpenProperty, value); }
44-
}
45-
public static readonly DependencyProperty IsPaneOpenProperty =
46-
DependencyProperty.Register(nameof(IsPaneOpen), typeof(bool), typeof(SidebarView), new PropertyMetadata(false, OnPropertyChanged));
22+
[GeneratedDependencyProperty]
23+
public partial bool IsPaneOpen { get; set; }
4724

48-
public double OpenPaneLength
49-
{
50-
get { return (double)GetValue(OpenPaneLengthProperty); }
51-
set
52-
{
53-
SetValue(OpenPaneLengthProperty, value);
54-
NegativeOpenPaneLength = -value;
55-
}
56-
}
57-
public static readonly DependencyProperty OpenPaneLengthProperty =
58-
DependencyProperty.Register(nameof(OpenPaneLength), typeof(double), typeof(SidebarView), new PropertyMetadata(240d, OnPropertyChanged));
25+
[GeneratedDependencyProperty(DefaultValue = 240D)]
26+
public partial double OpenPaneLength { get; set; }
5927

60-
public double NegativeOpenPaneLength
61-
{
62-
get { return (double)GetValue(NegativeOpenPaneLengthProperty); }
63-
set { SetValue(NegativeOpenPaneLengthProperty, value); }
64-
}
65-
public static readonly DependencyProperty NegativeOpenPaneLengthProperty =
66-
DependencyProperty.Register(nameof(NegativeOpenPaneLength), typeof(double), typeof(SidebarView), new PropertyMetadata(null));
28+
[GeneratedDependencyProperty]
29+
public partial double NegativeOpenPaneLength { get; set; }
6730

68-
public ISidebarViewModel ViewModel
69-
{
70-
get => (ISidebarViewModel)GetValue(ViewModelProperty);
71-
set => SetValue(ViewModelProperty, value);
72-
}
73-
public static readonly DependencyProperty ViewModelProperty =
74-
DependencyProperty.Register(nameof(ViewModel), typeof(ISidebarViewModel), typeof(SidebarView), new PropertyMetadata(null));
31+
[GeneratedDependencyProperty]
32+
public partial ISidebarItemModel? SelectedItem { get; set; }
7533

76-
public ISidebarItemModel SelectedItem
34+
[GeneratedDependencyProperty]
35+
public partial object? MenuItemsSource { get; set; }
36+
37+
partial void OnDisplayModePropertyChanged(DependencyPropertyChangedEventArgs e)
7738
{
78-
get => (ISidebarItemModel)GetValue(SelectedItemProperty);
79-
set
80-
{
81-
SetValue(SelectedItemProperty, value);
82-
}
39+
UpdateDisplayMode();
8340
}
84-
public static readonly DependencyProperty SelectedItemProperty =
85-
DependencyProperty.Register(nameof(SelectedItem), typeof(ISidebarItemModel), typeof(SidebarView), new PropertyMetadata(null));
8641

87-
public object MenuItemsSource
42+
partial void OnIsPaneOpenPropertyChanged(DependencyPropertyChangedEventArgs e)
8843
{
89-
get => (object)GetValue(MenuItemsSourceProperty);
90-
set => SetValue(MenuItemsSourceProperty, value);
44+
UpdateMinimalMode();
9145
}
92-
public static readonly DependencyProperty MenuItemsSourceProperty =
93-
DependencyProperty.Register(nameof(MenuItemsSource), typeof(object), typeof(SidebarView), new PropertyMetadata(null));
9446

95-
public static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
47+
partial void OnOpenPaneLengthPropertyChanged(DependencyPropertyChangedEventArgs e)
9648
{
97-
if (sender is not SidebarView control) return;
98-
99-
if (e.Property == OpenPaneLengthProperty)
100-
{
101-
control.UpdateOpenPaneLengthColumn();
102-
}
103-
else if (e.Property == DisplayModeProperty)
104-
{
105-
control.UpdateDisplayMode();
106-
}
107-
else if (e.Property == IsPaneOpenProperty)
108-
{
109-
control.UpdateMinimalMode();
110-
}
49+
NegativeOpenPaneLength = -(double)(e.NewValue);
50+
UpdateOpenPaneLengthColumn();
11151
}
11252
}
11353
}

src/Files.App.Controls/Sidebar/SidebarView.xaml.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ public sealed partial class SidebarView : UserControl, INotifyPropertyChanged
1515
{
1616
private const double COMPACT_MAX_WIDTH = 200;
1717

18-
public event EventHandler<object>? ItemInvoked;
18+
public event EventHandler<ItemInvokedEventArgs>? ItemInvoked;
1919
public event EventHandler<ItemContextInvokedArgs>? ItemContextInvoked;
20+
public event EventHandler<ItemDragOverEventArgs>? ItemDragOver;
21+
public event EventHandler<ItemDroppedEventArgs>? ItemDropped;
2022
public event PropertyChangedEventHandler? PropertyChanged;
2123

2224
internal SidebarItem? SelectedItemContainer = null;
@@ -40,26 +42,24 @@ internal void RaiseItemInvoked(SidebarItem item, PointerUpdateKind pointerUpdate
4042
if (item.Item is null || item.IsGroupHeader) return;
4143

4244
SelectedItem = item.Item;
43-
ItemInvoked?.Invoke(item, item.Item);
44-
ViewModel.HandleItemInvokedAsync(item.Item, pointerUpdateKind);
45+
ItemInvoked?.Invoke(item, new(pointerUpdateKind));
4546
}
4647

4748
internal void RaiseContextRequested(SidebarItem item, Point e)
4849
{
49-
ItemContextInvoked?.Invoke(item, new ItemContextInvokedArgs(item.Item, e));
50-
ViewModel.HandleItemContextInvokedAsync(item, new ItemContextInvokedArgs(item.Item, e));
50+
ItemContextInvoked?.Invoke(item, new(item.Item, e));
5151
}
5252

5353
internal async Task RaiseItemDropped(SidebarItem sideBarItem, SidebarItemDropPosition dropPosition, DragEventArgs rawEvent)
5454
{
5555
if (sideBarItem.Item is null) return;
56-
await ViewModel.HandleItemDroppedAsync(new ItemDroppedEventArgs(sideBarItem.Item, rawEvent.DataView, dropPosition, rawEvent));
56+
ItemDropped?.Invoke(this, new(sideBarItem.Item, rawEvent.DataView, dropPosition, rawEvent));
5757
}
5858

5959
internal async Task RaiseItemDragOver(SidebarItem sideBarItem, SidebarItemDropPosition dropPosition, DragEventArgs rawEvent)
6060
{
6161
if (sideBarItem.Item is null) return;
62-
await ViewModel.HandleItemDragOverAsync(new ItemDragOverEventArgs(sideBarItem.Item, rawEvent.DataView, dropPosition, rawEvent));
62+
ItemDragOver?.Invoke(this, new(sideBarItem.Item, rawEvent.DataView, dropPosition, rawEvent));
6363
}
6464

6565
private void UpdateMinimalMode()
@@ -230,8 +230,7 @@ private void SidebarResizer_ManipulationCompleted(object sender, ManipulationCom
230230

231231
private void MenuItemHostScrollViewer_ContextRequested(UIElement sender, ContextRequestedEventArgs e)
232232
{
233-
var newArgs = new ItemContextInvokedArgs(null, e.TryGetPosition(this, out var point) ? point : default);
234-
ViewModel.HandleItemContextInvokedAsync(this, newArgs);
233+
ItemContextInvoked?.Invoke(this, new(null, e.TryGetPosition(this, out var point) ? point : default));
235234
e.Handled = true;
236235
}
237236

src/Files.App/ViewModels/UserControls/SidebarViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
namespace Files.App.ViewModels.UserControls
2121
{
22-
public sealed partial class SidebarViewModel : ObservableObject, IDisposable, ISidebarViewModel
22+
public sealed partial class SidebarViewModel : ObservableObject, IDisposable
2323
{
2424
private INetworkService NetworkService { get; } = Ioc.Default.GetRequiredService<INetworkService>();
2525
private IUserSettingsService UserSettingsService { get; } = Ioc.Default.GetRequiredService<IUserSettingsService>();

src/Files.App/Views/MainPage.xaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,14 @@
180180
HorizontalContentAlignment="Stretch"
181181
DisplayMode="{x:Bind SidebarAdaptiveViewModel.SidebarDisplayMode, Mode=TwoWay}"
182182
IsPaneOpen="{x:Bind ViewModel.IsSidebarPaneOpen, Mode=TwoWay}"
183+
ItemContextInvoked="SidebarControl_ItemContextInvoked"
184+
ItemDragOver="SidebarControl_ItemDragOver"
185+
ItemDropped="SidebarControl_ItemDropped"
186+
ItemInvoked="SidebarControl_ItemInvoked"
183187
Loaded="SidebarControl_Loaded"
184188
MenuItemsSource="{x:Bind SidebarAdaptiveViewModel.SidebarItems, Mode=OneWay}"
185189
OpenPaneLength="{x:Bind UserSettingsService.AppearanceSettingsService.SidebarWidth, Mode=TwoWay}"
186-
SelectedItem="{x:Bind SidebarAdaptiveViewModel.SidebarSelectedItem, Mode=TwoWay}"
187-
ViewModel="{x:Bind SidebarAdaptiveViewModel}">
190+
SelectedItem="{x:Bind SidebarAdaptiveViewModel.SidebarSelectedItem, Mode=TwoWay}">
188191

189192
<!-- Inner Content -->
190193
<controls:SidebarView.InnerContent>

src/Files.App/Views/MainPage.xaml.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using Microsoft.UI.Xaml.Navigation;
1414
using Windows.Foundation.Metadata;
1515
using Windows.Graphics;
16+
using Windows.UI.Input;
1617
using WinUIEx;
1718
using GridSplitter = Files.App.Controls.GridSplitter;
1819
using VirtualKey = Windows.System.VirtualKey;
@@ -465,5 +466,25 @@ private void Page_PointerReleased(object sender, PointerRoutedEventArgs e)
465466
// shortcuts from working properly, see https://github.com/microsoft/microsoft-ui-xaml/issues/6467
466467
DispatcherQueue.TryEnqueue(() => ContentPageContext.ShellPage?.PaneHolder.FocusActivePane());
467468
}
469+
470+
private void SidebarControl_ItemContextInvoked(object sender, ItemContextInvokedArgs e)
471+
{
472+
SidebarAdaptiveViewModel.HandleItemContextInvokedAsync(sender, e);
473+
}
474+
475+
private async void SidebarControl_ItemDragOver(object sender, ItemDragOverEventArgs e)
476+
{
477+
await SidebarAdaptiveViewModel.HandleItemDragOverAsync(e);
478+
}
479+
480+
private async void SidebarControl_ItemDropped(object sender, ItemDroppedEventArgs e)
481+
{
482+
await SidebarAdaptiveViewModel.HandleItemDroppedAsync(e);
483+
}
484+
485+
private void SidebarControl_ItemInvoked(object sender, ItemInvokedEventArgs e)
486+
{
487+
SidebarAdaptiveViewModel.HandleItemInvokedAsync(((SidebarItem)sender).Item, e.PointerUpdateKind);
488+
}
468489
}
469490
}

tests/Files.App.UITests/TestData/TestSidebarViewModel.cs

Lines changed: 0 additions & 30 deletions
This file was deleted.

tests/Files.App.UITests/Views/SidebarViewPage.xaml.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ public SidebarViewPage()
1515
sidebarModels.Add(new TestSidebarModel { Text = "Test 1" });
1616
sidebarModels.Add(new TestSidebarModel { Text = "Test 2" });
1717
sidebarModels.Add(new TestSidebarModel { Text = "Test 3" });
18-
19-
Sidebar.ViewModel = new TestSidebarViewModel();
2018
}
2119
}
2220
}

0 commit comments

Comments
 (0)