Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 40 additions & 94 deletions src/Files.App.Controls/Sidebar/SidebarItem.Properties.cs
Original file line number Diff line number Diff line change
@@ -1,90 +1,41 @@
// Copyright (c) Files Community
// Licensed under the MIT License.

using CommunityToolkit.WinUI;

namespace Files.App.Controls
{
public sealed partial class SidebarItem : Control
{
public SidebarView? Owner
{
get { return (SidebarView?)GetValue(OwnerProperty); }
set { SetValue(OwnerProperty, value); }
}
public static readonly DependencyProperty OwnerProperty =
DependencyProperty.Register(nameof(Owner), typeof(SidebarView), typeof(SidebarItem), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial SidebarView? Owner { get; set; }

public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register(nameof(IsSelected), typeof(bool), typeof(SidebarItem), new PropertyMetadata(false, OnPropertyChanged));
[GeneratedDependencyProperty]
public partial bool IsSelected { get; set; }

public bool IsExpanded
{
get { return (bool)GetValue(IsExpandedProperty); }
set { SetValue(IsExpandedProperty, value); }
}
public static readonly DependencyProperty IsExpandedProperty =
DependencyProperty.Register(nameof(IsExpanded), typeof(bool), typeof(SidebarItem), new PropertyMetadata(true, OnPropertyChanged));
[GeneratedDependencyProperty(DefaultValue = true)]
public partial bool IsExpanded { get; set; }

public bool IsInFlyout
{
get { return (bool)GetValue(IsInFlyoutProperty); }
set { SetValue(IsInFlyoutProperty, value); }
}
public static readonly DependencyProperty IsInFlyoutProperty =
DependencyProperty.Register(nameof(IsInFlyout), typeof(bool), typeof(SidebarItem), new PropertyMetadata(false));
[GeneratedDependencyProperty]
public partial bool IsInFlyout { get; set; }

public double ChildrenPresenterHeight
{
get { return (double)GetValue(ChildrenPresenterHeightProperty); }
set { SetValue(ChildrenPresenterHeightProperty, value); }
}
// Using 30 as a default in case something goes wrong
public static readonly DependencyProperty ChildrenPresenterHeightProperty =
DependencyProperty.Register(nameof(ChildrenPresenterHeight), typeof(double), typeof(SidebarItem), new PropertyMetadata(30d));
[GeneratedDependencyProperty(DefaultValue = 30D)]
public partial double ChildrenPresenterHeight { get; set; }

public ISidebarItemModel? Item
{
get { return (ISidebarItemModel)GetValue(ItemProperty); }
set { SetValue(ItemProperty, value); }
}
public static readonly DependencyProperty ItemProperty =
DependencyProperty.Register(nameof(Item), typeof(ISidebarItemModel), typeof(SidebarItem), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial ISidebarItemModel? Item { get; set; }

public bool UseReorderDrop
{
get { return (bool)GetValue(UseReorderDropProperty); }
set { SetValue(UseReorderDropProperty, value); }
}
public static readonly DependencyProperty UseReorderDropProperty =
DependencyProperty.Register(nameof(UseReorderDrop), typeof(bool), typeof(SidebarItem), new PropertyMetadata(false));
[GeneratedDependencyProperty]
public partial bool UseReorderDrop { get; set; }

public FrameworkElement? Icon
{
get { return (FrameworkElement?)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
public static readonly DependencyProperty IconProperty =
DependencyProperty.Register(nameof(Icon), typeof(FrameworkElement), typeof(SidebarItem), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial FrameworkElement? Icon { get; set; }

public FrameworkElement? Decorator
{
get { return (FrameworkElement?)GetValue(DecoratorProperty); }
set { SetValue(DecoratorProperty, value); }
}
public static readonly DependencyProperty DecoratorProperty =
DependencyProperty.Register(nameof(Decorator), typeof(FrameworkElement), typeof(SidebarItem), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial FrameworkElement? Decorator { get; set; }

public SidebarDisplayMode DisplayMode
{
get { return (SidebarDisplayMode)GetValue(DisplayModeProperty); }
set { SetValue(DisplayModeProperty, value); }
}
public static readonly DependencyProperty DisplayModeProperty =
DependencyProperty.Register(nameof(DisplayMode), typeof(SidebarDisplayMode), typeof(SidebarItem), new PropertyMetadata(SidebarDisplayMode.Expanded, OnPropertyChanged));
[GeneratedDependencyProperty(DefaultValue = SidebarDisplayMode.Expanded)]
public partial SidebarDisplayMode DisplayMode { get; set; }

public static void SetTemplateRoot(DependencyObject target, FrameworkElement value)
{
Expand All @@ -95,31 +46,26 @@ public static FrameworkElement GetTemplateRoot(DependencyObject target)
return (FrameworkElement)target.GetValue(TemplateRootProperty);
}
public static readonly DependencyProperty TemplateRootProperty =
DependencyProperty.Register("TemplateRoot", typeof(FrameworkElement), typeof(FrameworkElement), new PropertyMetadata(null));
DependencyProperty.Register("TemplateRoot", typeof(FrameworkElement), typeof(SidebarItem), new PropertyMetadata(null));

partial void OnIsSelectedPropertyChanged(DependencyPropertyChangedEventArgs e)
{
UpdateSelectionState();
}

partial void OnIsExpandedPropertyChanged(DependencyPropertyChangedEventArgs e)
{
UpdateExpansionState();
}

partial void OnItemPropertyChanged(DependencyPropertyChangedEventArgs e)
{
HandleItemChange();
}

public static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
partial void OnDisplayModePropertyChanged(DependencyPropertyChangedEventArgs e)
{
if (sender is not SidebarItem item) return;
if (e.Property == DisplayModeProperty)
{
item.SidebarDisplayModeChanged((SidebarDisplayMode)e.OldValue);
}
else if (e.Property == IsSelectedProperty)
{
item.UpdateSelectionState();
}
else if (e.Property == IsExpandedProperty)
{
item.UpdateExpansionState();
}
else if (e.Property == ItemProperty)
{
item.HandleItemChange();
}
else
{
Debug.Write(e.Property.ToString());
}
SidebarDisplayModeChanged((SidebarDisplayMode)e.OldValue);
}
}
}
28 changes: 13 additions & 15 deletions src/Files.App.Controls/Sidebar/SidebarItemAutomationPeer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,25 @@ public ExpandCollapseState ExpandCollapseState
{
get
{
if (Owner.HasChildren)
return Owner.IsExpanded ? ExpandCollapseState.Expanded : ExpandCollapseState.Collapsed;
return ExpandCollapseState.LeafNode;
return Owner.HasChildren
? Owner.IsExpanded
? ExpandCollapseState.Expanded
: ExpandCollapseState.Collapsed
: ExpandCollapseState.LeafNode;
}
}
public bool IsSelected => Owner.IsSelected;
public IRawElementProviderSimple SelectionContainer => ProviderFromPeer(CreatePeerForElement(Owner.Owner));

public bool IsSelected
=> Owner.IsSelected;

public IRawElementProviderSimple SelectionContainer
=> ProviderFromPeer(CreatePeerForElement(Owner.Owner));

private new SidebarItem Owner { get; init; }

public SidebarItemAutomationPeer(SidebarItem owner) : base(owner)
{
this.Owner = owner;
Owner = owner;
}

protected override AutomationControlType GetAutomationControlTypeCore()
Expand Down Expand Up @@ -59,18 +65,13 @@ protected override object GetPatternCore(PatternInterface patternInterface)
public void Collapse()
{
if (Owner.CollapseEnabled)
{
Owner.IsExpanded = false;
}
}

public void Expand()
{

if (Owner.CollapseEnabled)
{
Owner.IsExpanded = true;
}
}

public void Invoke()
Expand Down Expand Up @@ -106,13 +107,10 @@ protected override int GetPositionInSetCore()
private IList GetOwnerCollection()
{
if (Owner.FindAscendant<SidebarItem>() is SidebarItem parent && parent.Item?.Children is IList list)
{
return list;
}
if (Owner?.Owner is not null && Owner.Owner.ViewModel.SidebarItems is IList items)
{
return items;
}

return new List<object>();
}
}
Expand Down
119 changes: 31 additions & 88 deletions src/Files.App.Controls/Sidebar/SidebarView.Properties.cs
Original file line number Diff line number Diff line change
@@ -1,113 +1,56 @@
// Copyright (c) Files Community
// Licensed under the MIT License.

using CommunityToolkit.WinUI;

namespace Files.App.Controls
{
public sealed partial class SidebarView
{
public SidebarDisplayMode DisplayMode
{
get { return (SidebarDisplayMode)GetValue(DisplayModeProperty); }
set { SetValue(DisplayModeProperty, value); }
}
public static readonly DependencyProperty DisplayModeProperty =
DependencyProperty.Register(nameof(DisplayMode), typeof(SidebarDisplayMode), typeof(SidebarView), new PropertyMetadata(SidebarDisplayMode.Expanded, OnPropertyChanged));
[GeneratedDependencyProperty(DefaultValue = SidebarDisplayMode.Expanded)]
public partial SidebarDisplayMode DisplayMode { get; set; }

public UIElement InnerContent
{
get { return (UIElement)GetValue(InnerContentProperty); }
set { SetValue(InnerContentProperty, value); }
}
public static readonly DependencyProperty InnerContentProperty =
DependencyProperty.Register(nameof(InnerContent), typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial UIElement? InnerContent { get; set; }

public UIElement SidebarContent
{
get { return (UIElement)GetValue(SidebarContentProperty); }
set { SetValue(SidebarContentProperty, value); }
}
public static readonly DependencyProperty SidebarContentProperty =
DependencyProperty.Register("SidebarContent", typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial UIElement? SidebarContent { get; set; }

public UIElement Footer
{
get { return (UIElement)GetValue(FooterProperty); }
set { SetValue(FooterProperty, value); }
}
public static readonly DependencyProperty FooterProperty =
DependencyProperty.Register("Footer", typeof(UIElement), typeof(SidebarView), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial UIElement? Footer { get; set; }

public bool IsPaneOpen
{
get { return (bool)GetValue(IsPaneOpenProperty); }
set { SetValue(IsPaneOpenProperty, value); }
}
public static readonly DependencyProperty IsPaneOpenProperty =
DependencyProperty.Register(nameof(IsPaneOpen), typeof(bool), typeof(SidebarView), new PropertyMetadata(false, OnPropertyChanged));
[GeneratedDependencyProperty]
public partial bool IsPaneOpen { get; set; }

public double OpenPaneLength
{
get { return (double)GetValue(OpenPaneLengthProperty); }
set
{
SetValue(OpenPaneLengthProperty, value);
NegativeOpenPaneLength = -value;
}
}
public static readonly DependencyProperty OpenPaneLengthProperty =
DependencyProperty.Register(nameof(OpenPaneLength), typeof(double), typeof(SidebarView), new PropertyMetadata(240d, OnPropertyChanged));
[GeneratedDependencyProperty(DefaultValue = 240D)]
public partial double OpenPaneLength { get; set; }

public double NegativeOpenPaneLength
{
get { return (double)GetValue(NegativeOpenPaneLengthProperty); }
set { SetValue(NegativeOpenPaneLengthProperty, value); }
}
public static readonly DependencyProperty NegativeOpenPaneLengthProperty =
DependencyProperty.Register(nameof(NegativeOpenPaneLength), typeof(double), typeof(SidebarView), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial double NegativeOpenPaneLength { get; set; }

public ISidebarViewModel ViewModel
{
get => (ISidebarViewModel)GetValue(ViewModelProperty);
set => SetValue(ViewModelProperty, value);
}
public static readonly DependencyProperty ViewModelProperty =
DependencyProperty.Register(nameof(ViewModel), typeof(ISidebarViewModel), typeof(SidebarView), new PropertyMetadata(null));
[GeneratedDependencyProperty]
public partial ISidebarViewModel? ViewModel { get; set; }

[GeneratedDependencyProperty]
public partial ISidebarItemModel? SelectedItem { get; set; }

public ISidebarItemModel SelectedItem
[GeneratedDependencyProperty]
public partial object? MenuItemsSource { get; set; }

partial void OnDisplayModePropertyChanged(DependencyPropertyChangedEventArgs e)
{
get => (ISidebarItemModel)GetValue(SelectedItemProperty);
set
{
SetValue(SelectedItemProperty, value);
}
UpdateDisplayMode();
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(nameof(SelectedItem), typeof(ISidebarItemModel), typeof(SidebarView), new PropertyMetadata(null));

public object MenuItemsSource
partial void OnIsPaneOpenPropertyChanged(DependencyPropertyChangedEventArgs e)
{
get => (object)GetValue(MenuItemsSourceProperty);
set => SetValue(MenuItemsSourceProperty, value);
UpdateMinimalMode();
}
public static readonly DependencyProperty MenuItemsSourceProperty =
DependencyProperty.Register(nameof(MenuItemsSource), typeof(object), typeof(SidebarView), new PropertyMetadata(null));

public static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
partial void OnOpenPaneLengthPropertyChanged(DependencyPropertyChangedEventArgs e)
{
if (sender is not SidebarView control) return;

if (e.Property == OpenPaneLengthProperty)
{
control.UpdateOpenPaneLengthColumn();
}
else if (e.Property == DisplayModeProperty)
{
control.UpdateDisplayMode();
}
else if (e.Property == IsPaneOpenProperty)
{
control.UpdateMinimalMode();
}
NegativeOpenPaneLength = -(double)(e.NewValue);
UpdateOpenPaneLengthColumn();
}
}
}
9 changes: 3 additions & 6 deletions src/Files.App.Controls/Sidebar/SidebarViewAutomationPeer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,16 @@ public SidebarViewAutomationPeer(SidebarView owner) : base(owner)
protected override object GetPatternCore(PatternInterface patternInterface)
{
if (patternInterface == PatternInterface.Selection)
{
return this;
}

return base.GetPatternCore(patternInterface);
}

public IRawElementProviderSimple[] GetSelection()
{
if (Owner.SelectedItemContainer != null)
return
[
ProviderFromPeer(CreatePeerForElement(Owner.SelectedItemContainer))
];
return [ProviderFromPeer(CreatePeerForElement(Owner.SelectedItemContainer))];

return [];
}
}
Expand Down
Loading
Loading