File scoped namespaces
This commit is contained in:
@@ -7,53 +7,52 @@ using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.UWP.Controls;
|
||||
using Wino.Helpers;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public partial class AccountSelectorFlyout : MenuFlyout, IDisposable
|
||||
{
|
||||
public partial class AccountSelectorFlyout : MenuFlyout, IDisposable
|
||||
private readonly IEnumerable<MailAccount> _accounts;
|
||||
private readonly Func<MailAccount, Task> _onItemSelection;
|
||||
|
||||
public AccountSelectorFlyout(IEnumerable<MailAccount> accounts, Func<MailAccount, Task> onItemSelection)
|
||||
{
|
||||
private readonly IEnumerable<MailAccount> _accounts;
|
||||
private readonly Func<MailAccount, Task> _onItemSelection;
|
||||
_accounts = accounts;
|
||||
_onItemSelection = onItemSelection;
|
||||
|
||||
public AccountSelectorFlyout(IEnumerable<MailAccount> accounts, Func<MailAccount, Task> onItemSelection)
|
||||
foreach (var account in _accounts)
|
||||
{
|
||||
_accounts = accounts;
|
||||
_onItemSelection = onItemSelection;
|
||||
var pathData = new WinoFontIcon() { Icon = XamlHelpers.GetProviderIcon(account) };
|
||||
var menuItem = new MenuFlyoutItem() { Tag = account.Address, Icon = pathData, Text = $"{account.Name} ({account.Address})", MinHeight = 55 };
|
||||
|
||||
foreach (var account in _accounts)
|
||||
{
|
||||
var pathData = new WinoFontIcon() { Icon = XamlHelpers.GetProviderIcon(account) };
|
||||
var menuItem = new MenuFlyoutItem() { Tag = account.Address, Icon = pathData, Text = $"{account.Name} ({account.Address})", MinHeight = 55 };
|
||||
|
||||
menuItem.Click += AccountClicked;
|
||||
Items.Add(menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var menuItem in Items)
|
||||
{
|
||||
if (menuItem is MenuFlyoutItem flyoutItem)
|
||||
{
|
||||
flyoutItem.Click -= AccountClicked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void AccountClicked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
||||
{
|
||||
if (sender is MenuFlyoutItem menuItem && menuItem.Tag is string accountAddress)
|
||||
{
|
||||
var selectedMenuItem = _accounts.FirstOrDefault(a => a.Address == accountAddress);
|
||||
|
||||
if (selectedMenuItem != null)
|
||||
{
|
||||
await _onItemSelection(selectedMenuItem);
|
||||
}
|
||||
}
|
||||
|
||||
Dispose();
|
||||
Hide();
|
||||
menuItem.Click += AccountClicked;
|
||||
Items.Add(menuItem);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var menuItem in Items)
|
||||
{
|
||||
if (menuItem is MenuFlyoutItem flyoutItem)
|
||||
{
|
||||
flyoutItem.Click -= AccountClicked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void AccountClicked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
||||
{
|
||||
if (sender is MenuFlyoutItem menuItem && menuItem.Tag is string accountAddress)
|
||||
{
|
||||
var selectedMenuItem = _accounts.FirstOrDefault(a => a.Address == accountAddress);
|
||||
|
||||
if (selectedMenuItem != null)
|
||||
{
|
||||
await _onItemSelection(selectedMenuItem);
|
||||
}
|
||||
}
|
||||
|
||||
Dispose();
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,213 +7,212 @@ using Wino.Core.Domain.Models.Reader;
|
||||
using Wino.Core.UWP.Controls;
|
||||
using Wino.Helpers;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public partial class FilterMenuFlyout : MenuFlyout
|
||||
{
|
||||
public partial class FilterMenuFlyout : MenuFlyout
|
||||
public static readonly DependencyProperty SelectedFilterChangedCommandProperty = DependencyProperty.Register(nameof(SelectedFilterChangedCommand), typeof(IRelayCommand<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
|
||||
public static readonly DependencyProperty FilterOptionsProperty = DependencyProperty.Register(nameof(FilterOptions), typeof(List<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
|
||||
public static readonly DependencyProperty SelectedFilterOptionProperty = DependencyProperty.Register(nameof(SelectedFilterOption), typeof(FilterOption), typeof(FilterMenuFlyout), new PropertyMetadata(null, OnSelectedFilterOptionChanged));
|
||||
public static readonly DependencyProperty SelectedSortingOptionProperty = DependencyProperty.Register(nameof(SelectedSortingOption), typeof(SortingOption), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnSelectedSortingOptionChanged)));
|
||||
public static readonly DependencyProperty SortingOptionsProperty = DependencyProperty.Register(nameof(SortingOptions), typeof(List<SortingOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
|
||||
public static readonly DependencyProperty SelectedSortingOptionChangedCommandProperty = DependencyProperty.Register(nameof(SelectedSortingOptionChangedCommand), typeof(IRelayCommand<SortingOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
|
||||
|
||||
public IRelayCommand<FilterOption> SelectedFilterChangedCommand
|
||||
{
|
||||
public static readonly DependencyProperty SelectedFilterChangedCommandProperty = DependencyProperty.Register(nameof(SelectedFilterChangedCommand), typeof(IRelayCommand<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
|
||||
public static readonly DependencyProperty FilterOptionsProperty = DependencyProperty.Register(nameof(FilterOptions), typeof(List<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
|
||||
public static readonly DependencyProperty SelectedFilterOptionProperty = DependencyProperty.Register(nameof(SelectedFilterOption), typeof(FilterOption), typeof(FilterMenuFlyout), new PropertyMetadata(null, OnSelectedFilterOptionChanged));
|
||||
public static readonly DependencyProperty SelectedSortingOptionProperty = DependencyProperty.Register(nameof(SelectedSortingOption), typeof(SortingOption), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnSelectedSortingOptionChanged)));
|
||||
public static readonly DependencyProperty SortingOptionsProperty = DependencyProperty.Register(nameof(SortingOptions), typeof(List<SortingOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
|
||||
public static readonly DependencyProperty SelectedSortingOptionChangedCommandProperty = DependencyProperty.Register(nameof(SelectedSortingOptionChangedCommand), typeof(IRelayCommand<SortingOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
|
||||
get { return (IRelayCommand<FilterOption>)GetValue(SelectedFilterChangedCommandProperty); }
|
||||
set { SetValue(SelectedFilterChangedCommandProperty, value); }
|
||||
}
|
||||
|
||||
public IRelayCommand<FilterOption> SelectedFilterChangedCommand
|
||||
public IRelayCommand<SortingOption> SelectedSortingOptionChangedCommand
|
||||
{
|
||||
get { return (IRelayCommand<SortingOption>)GetValue(SelectedSortingOptionChangedCommandProperty); }
|
||||
set { SetValue(SelectedSortingOptionChangedCommandProperty, value); }
|
||||
}
|
||||
|
||||
public List<FilterOption> FilterOptions
|
||||
{
|
||||
get { return (List<FilterOption>)GetValue(FilterOptionsProperty); }
|
||||
set { SetValue(FilterOptionsProperty, value); }
|
||||
}
|
||||
|
||||
public List<SortingOption> SortingOptions
|
||||
{
|
||||
get { return (List<SortingOption>)GetValue(SortingOptionsProperty); }
|
||||
set { SetValue(SortingOptionsProperty, value); }
|
||||
}
|
||||
|
||||
public FilterOption SelectedFilterOption
|
||||
{
|
||||
get { return (FilterOption)GetValue(SelectedFilterOptionProperty); }
|
||||
set { SetValue(SelectedFilterOptionProperty, value); }
|
||||
}
|
||||
|
||||
public SortingOption SelectedSortingOption
|
||||
{
|
||||
get { return (SortingOption)GetValue(SelectedSortingOptionProperty); }
|
||||
set { SetValue(SelectedSortingOptionProperty, value); }
|
||||
}
|
||||
|
||||
private static void OnSelectedFilterOptionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar)
|
||||
{
|
||||
get { return (IRelayCommand<FilterOption>)GetValue(SelectedFilterChangedCommandProperty); }
|
||||
set { SetValue(SelectedFilterChangedCommandProperty, value); }
|
||||
bar.SelectFilterOption(bar.SelectedFilterOption);
|
||||
bar.SelectedFilterChangedCommand?.Execute(bar.SelectedFilterOption);
|
||||
}
|
||||
}
|
||||
|
||||
public IRelayCommand<SortingOption> SelectedSortingOptionChangedCommand
|
||||
private static void OnSelectedSortingOptionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar)
|
||||
{
|
||||
get { return (IRelayCommand<SortingOption>)GetValue(SelectedSortingOptionChangedCommandProperty); }
|
||||
set { SetValue(SelectedSortingOptionChangedCommandProperty, value); }
|
||||
bar.SelectSortingOption(bar.SelectedSortingOption);
|
||||
bar.SelectedSortingOptionChangedCommand?.Execute(bar.SelectedSortingOption);
|
||||
}
|
||||
}
|
||||
|
||||
public List<FilterOption> FilterOptions
|
||||
private ToggleMenuFlyoutItem CreateFilterToggleButton(FilterOption option)
|
||||
{
|
||||
var button = new ToggleMenuFlyoutItem()
|
||||
{
|
||||
get { return (List<FilterOption>)GetValue(FilterOptionsProperty); }
|
||||
set { SetValue(FilterOptionsProperty, value); }
|
||||
}
|
||||
Text = option.Title,
|
||||
Tag = option,
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(option.Type) },
|
||||
IsChecked = option == SelectedFilterOption
|
||||
};
|
||||
|
||||
public List<SortingOption> SortingOptions
|
||||
button.Click += FilterToggleChecked;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private ToggleMenuFlyoutItem CreateSortingToggleButton(SortingOption option)
|
||||
{
|
||||
var button = new ToggleMenuFlyoutItem()
|
||||
{
|
||||
get { return (List<SortingOption>)GetValue(SortingOptionsProperty); }
|
||||
set { SetValue(SortingOptionsProperty, value); }
|
||||
}
|
||||
Text = option.Title,
|
||||
Tag = option,
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(option.Type)},
|
||||
IsChecked = option == SelectedSortingOption
|
||||
};
|
||||
|
||||
public FilterOption SelectedFilterOption
|
||||
button.Click += SortingOptionChecked;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private void SortingOptionChecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is ToggleMenuFlyoutItem button)
|
||||
{
|
||||
get { return (FilterOption)GetValue(SelectedFilterOptionProperty); }
|
||||
set { SetValue(SelectedFilterOptionProperty, value); }
|
||||
}
|
||||
button.IsHitTestVisible = false;
|
||||
|
||||
public SortingOption SelectedSortingOption
|
||||
var optionModel = button.Tag as SortingOption;
|
||||
|
||||
SelectSortingOption(optionModel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void FilterToggleChecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is ToggleMenuFlyoutItem button)
|
||||
{
|
||||
get { return (SortingOption)GetValue(SelectedSortingOptionProperty); }
|
||||
set { SetValue(SelectedSortingOptionProperty, value); }
|
||||
button.IsHitTestVisible = false;
|
||||
|
||||
var optionModel = button.Tag as FilterOption;
|
||||
|
||||
SelectFilterOption(optionModel);
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnSelectedFilterOptionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar)
|
||||
{
|
||||
bar.SelectFilterOption(bar.SelectedFilterOption);
|
||||
bar.SelectedFilterChangedCommand?.Execute(bar.SelectedFilterOption);
|
||||
}
|
||||
}
|
||||
private void SelectFilterOption(FilterOption option)
|
||||
{
|
||||
SelectedFilterOption = option;
|
||||
|
||||
private static void OnSelectedSortingOptionChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar)
|
||||
{
|
||||
bar.SelectSortingOption(bar.SelectedSortingOption);
|
||||
bar.SelectedSortingOptionChangedCommand?.Execute(bar.SelectedSortingOption);
|
||||
}
|
||||
}
|
||||
UncheckOtherFilterOptions();
|
||||
}
|
||||
|
||||
private ToggleMenuFlyoutItem CreateFilterToggleButton(FilterOption option)
|
||||
{
|
||||
var button = new ToggleMenuFlyoutItem()
|
||||
{
|
||||
Text = option.Title,
|
||||
Tag = option,
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(option.Type) },
|
||||
IsChecked = option == SelectedFilterOption
|
||||
};
|
||||
private void SelectSortingOption(SortingOption option)
|
||||
{
|
||||
SelectedSortingOption = option;
|
||||
|
||||
button.Click += FilterToggleChecked;
|
||||
UncheckOtherSortingOptions();
|
||||
}
|
||||
|
||||
return button;
|
||||
}
|
||||
private void UnregisterCheckedHandler(ToggleMenuFlyoutItem button)
|
||||
{
|
||||
button.Click -= FilterToggleChecked;
|
||||
}
|
||||
|
||||
private ToggleMenuFlyoutItem CreateSortingToggleButton(SortingOption option)
|
||||
{
|
||||
var button = new ToggleMenuFlyoutItem()
|
||||
{
|
||||
Text = option.Title,
|
||||
Tag = option,
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(option.Type)},
|
||||
IsChecked = option == SelectedSortingOption
|
||||
};
|
||||
|
||||
button.Click += SortingOptionChecked;
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
private void SortingOptionChecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is ToggleMenuFlyoutItem button)
|
||||
{
|
||||
button.IsHitTestVisible = false;
|
||||
|
||||
var optionModel = button.Tag as SortingOption;
|
||||
|
||||
SelectSortingOption(optionModel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void FilterToggleChecked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is ToggleMenuFlyoutItem button)
|
||||
{
|
||||
button.IsHitTestVisible = false;
|
||||
|
||||
var optionModel = button.Tag as FilterOption;
|
||||
|
||||
SelectFilterOption(optionModel);
|
||||
}
|
||||
}
|
||||
|
||||
private void SelectFilterOption(FilterOption option)
|
||||
{
|
||||
SelectedFilterOption = option;
|
||||
|
||||
UncheckOtherFilterOptions();
|
||||
}
|
||||
|
||||
private void SelectSortingOption(SortingOption option)
|
||||
{
|
||||
SelectedSortingOption = option;
|
||||
|
||||
UncheckOtherSortingOptions();
|
||||
}
|
||||
|
||||
private void UnregisterCheckedHandler(ToggleMenuFlyoutItem button)
|
||||
{
|
||||
button.Click -= FilterToggleChecked;
|
||||
}
|
||||
|
||||
private void UncheckOtherFilterOptions()
|
||||
{
|
||||
if (Items.Any())
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
if (item is ToggleMenuFlyoutItem toggleButton && toggleButton.Tag is FilterOption option && option != SelectedFilterOption)
|
||||
{
|
||||
toggleButton.IsChecked = false;
|
||||
toggleButton.IsHitTestVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UncheckOtherSortingOptions()
|
||||
{
|
||||
if (Items.Any())
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
if (item is ToggleMenuFlyoutItem toggleButton && toggleButton.Tag is SortingOption option && option != SelectedSortingOption)
|
||||
{
|
||||
toggleButton.IsChecked = false;
|
||||
toggleButton.IsHitTestVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
private void UncheckOtherFilterOptions()
|
||||
{
|
||||
if (Items.Any())
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
if (item is ToggleMenuFlyoutItem toggleButton)
|
||||
if (item is ToggleMenuFlyoutItem toggleButton && toggleButton.Tag is FilterOption option && option != SelectedFilterOption)
|
||||
{
|
||||
UnregisterCheckedHandler(toggleButton);
|
||||
toggleButton.IsChecked = false;
|
||||
toggleButton.IsHitTestVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void OnOptionsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
private void UncheckOtherSortingOptions()
|
||||
{
|
||||
if (Items.Any())
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar && bar.SortingOptions != null && bar.FilterOptions != null)
|
||||
foreach (var item in Items)
|
||||
{
|
||||
bar.Dispose();
|
||||
|
||||
bar.Items.Clear();
|
||||
|
||||
if (bar.FilterOptions != null)
|
||||
if (item is ToggleMenuFlyoutItem toggleButton && toggleButton.Tag is SortingOption option && option != SelectedSortingOption)
|
||||
{
|
||||
foreach (var item in bar.FilterOptions)
|
||||
{
|
||||
bar.Items.Add(bar.CreateFilterToggleButton(item));
|
||||
}
|
||||
toggleButton.IsChecked = false;
|
||||
toggleButton.IsHitTestVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bar.Items.Add(new MenuFlyoutSeparator());
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
if (item is ToggleMenuFlyoutItem toggleButton)
|
||||
{
|
||||
UnregisterCheckedHandler(toggleButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sorting options.
|
||||
private static void OnOptionsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
if (obj is FilterMenuFlyout bar && bar.SortingOptions != null && bar.FilterOptions != null)
|
||||
{
|
||||
bar.Dispose();
|
||||
|
||||
if (bar.SortingOptions != null)
|
||||
bar.Items.Clear();
|
||||
|
||||
if (bar.FilterOptions != null)
|
||||
{
|
||||
foreach (var item in bar.FilterOptions)
|
||||
{
|
||||
foreach (var item in bar.SortingOptions)
|
||||
{
|
||||
bar.Items.Add(bar.CreateSortingToggleButton(item));
|
||||
}
|
||||
bar.Items.Add(bar.CreateFilterToggleButton(item));
|
||||
}
|
||||
}
|
||||
|
||||
bar.Items.Add(new MenuFlyoutSeparator());
|
||||
|
||||
// Sorting options.
|
||||
|
||||
if (bar.SortingOptions != null)
|
||||
{
|
||||
foreach (var item in bar.SortingOptions)
|
||||
{
|
||||
bar.Items.Add(bar.CreateSortingToggleButton(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,24 +4,23 @@ using Windows.UI.Xaml.Controls;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Models.Folders;
|
||||
|
||||
namespace Wino.MenuFlyouts.Context
|
||||
namespace Wino.MenuFlyouts.Context;
|
||||
|
||||
public partial class FolderOperationFlyout : WinoOperationFlyout<FolderOperationMenuItem>
|
||||
{
|
||||
public partial class FolderOperationFlyout : WinoOperationFlyout<FolderOperationMenuItem>
|
||||
public FolderOperationFlyout(IEnumerable<FolderOperationMenuItem> availableActions, TaskCompletionSource<FolderOperationMenuItem> completionSource) : base(availableActions, completionSource)
|
||||
{
|
||||
public FolderOperationFlyout(IEnumerable<FolderOperationMenuItem> availableActions, TaskCompletionSource<FolderOperationMenuItem> completionSource) : base(availableActions, completionSource)
|
||||
if (AvailableActions == null) return;
|
||||
|
||||
foreach (var action in AvailableActions)
|
||||
{
|
||||
if (AvailableActions == null) return;
|
||||
|
||||
foreach (var action in AvailableActions)
|
||||
if (action.Operation == FolderOperation.Seperator)
|
||||
Items.Add(new MenuFlyoutSeparator());
|
||||
else
|
||||
{
|
||||
if (action.Operation == FolderOperation.Seperator)
|
||||
Items.Add(new MenuFlyoutSeparator());
|
||||
else
|
||||
{
|
||||
var menuFlyoutItem = new FolderOperationMenuFlyoutItem(action, (c) => MenuItemClicked(c));
|
||||
var menuFlyoutItem = new FolderOperationMenuFlyoutItem(action, (c) => MenuItemClicked(c));
|
||||
|
||||
Items.Add(menuFlyoutItem);
|
||||
}
|
||||
Items.Add(menuFlyoutItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using Wino.Core.Domain.Models.Folders;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public partial class FolderOperationMenuFlyoutItem : WinoOperationFlyoutItem<FolderOperationMenuItem>
|
||||
{
|
||||
public partial class FolderOperationMenuFlyoutItem : WinoOperationFlyoutItem<FolderOperationMenuItem>
|
||||
public FolderOperationMenuFlyoutItem(FolderOperationMenuItem operationMenuItem, Action<FolderOperationMenuItem> clicked) : base(operationMenuItem, clicked)
|
||||
{
|
||||
public FolderOperationMenuFlyoutItem(FolderOperationMenuItem operationMenuItem, Action<FolderOperationMenuItem> clicked) : base(operationMenuItem, clicked)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,24 +4,23 @@ using Windows.UI.Xaml.Controls;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Models.Menus;
|
||||
|
||||
namespace Wino.MenuFlyouts.Context
|
||||
namespace Wino.MenuFlyouts.Context;
|
||||
|
||||
public partial class MailOperationFlyout : WinoOperationFlyout<MailOperationMenuItem>
|
||||
{
|
||||
public partial class MailOperationFlyout : WinoOperationFlyout<MailOperationMenuItem>
|
||||
public MailOperationFlyout(IEnumerable<MailOperationMenuItem> availableActions, TaskCompletionSource<MailOperationMenuItem> completionSource) : base(availableActions, completionSource)
|
||||
{
|
||||
public MailOperationFlyout(IEnumerable<MailOperationMenuItem> availableActions, TaskCompletionSource<MailOperationMenuItem> completionSource) : base(availableActions, completionSource)
|
||||
if (AvailableActions == null) return;
|
||||
|
||||
foreach (var action in AvailableActions)
|
||||
{
|
||||
if (AvailableActions == null) return;
|
||||
|
||||
foreach (var action in AvailableActions)
|
||||
if (action.Operation == MailOperation.Seperator)
|
||||
Items.Add(new MenuFlyoutSeparator());
|
||||
else
|
||||
{
|
||||
if (action.Operation == MailOperation.Seperator)
|
||||
Items.Add(new MenuFlyoutSeparator());
|
||||
else
|
||||
{
|
||||
var menuFlyoutItem = new MailOperationMenuFlyoutItem(action, (c) => MenuItemClicked(c));
|
||||
var menuFlyoutItem = new MailOperationMenuFlyoutItem(action, (c) => MenuItemClicked(c));
|
||||
|
||||
Items.Add(menuFlyoutItem);
|
||||
}
|
||||
Items.Add(menuFlyoutItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using System;
|
||||
using Wino.Core.Domain.Models.Menus;
|
||||
|
||||
namespace Wino.MenuFlyouts.Context
|
||||
namespace Wino.MenuFlyouts.Context;
|
||||
|
||||
public partial class MailOperationMenuFlyoutItem : WinoOperationFlyoutItem<MailOperationMenuItem>
|
||||
{
|
||||
public partial class MailOperationMenuFlyoutItem : WinoOperationFlyoutItem<MailOperationMenuItem>
|
||||
public MailOperationMenuFlyoutItem(MailOperationMenuItem operationMenuItem, Action<MailOperationMenuItem> clicked) : base(operationMenuItem, clicked)
|
||||
{
|
||||
public MailOperationMenuFlyoutItem(MailOperationMenuItem operationMenuItem, Action<MailOperationMenuItem> clicked) : base(operationMenuItem, clicked)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,82 +6,81 @@ using Windows.UI.Xaml;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
using Wino.Core.Domain.Entities.Mail;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public class MoveButtonMenuItemClickedEventArgs
|
||||
{
|
||||
public class MoveButtonMenuItemClickedEventArgs
|
||||
public Guid ClickedFolderId { get; set; }
|
||||
}
|
||||
|
||||
public partial class MoveButtonFlyout : MenuFlyout
|
||||
{
|
||||
public event TypedEventHandler<MoveButtonFlyout, MoveButtonMenuItemClickedEventArgs> MenuItemClick;
|
||||
public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List<MailItemFolder>), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged)));
|
||||
|
||||
public List<MailItemFolder> Folders
|
||||
{
|
||||
public Guid ClickedFolderId { get; set; }
|
||||
get { return (List<MailItemFolder>)GetValue(FoldersProperty); }
|
||||
set { SetValue(FoldersProperty, value); }
|
||||
}
|
||||
|
||||
public partial class MoveButtonFlyout : MenuFlyout
|
||||
private static void OnFoldersChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
{
|
||||
public event TypedEventHandler<MoveButtonFlyout, MoveButtonMenuItemClickedEventArgs> MenuItemClick;
|
||||
public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List<MailItemFolder>), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged)));
|
||||
|
||||
public List<MailItemFolder> Folders
|
||||
if (obj is MoveButtonFlyout menu)
|
||||
{
|
||||
get { return (List<MailItemFolder>)GetValue(FoldersProperty); }
|
||||
set { SetValue(FoldersProperty, value); }
|
||||
menu.InitializeMenu();
|
||||
}
|
||||
|
||||
private static void OnFoldersChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
|
||||
|
||||
}
|
||||
|
||||
private void InitializeMenu()
|
||||
{
|
||||
Dispose();
|
||||
|
||||
Items.Clear();
|
||||
|
||||
if (Folders == null || !Folders.Any())
|
||||
return;
|
||||
|
||||
// TODO: Child folders.
|
||||
|
||||
foreach (var item in Folders)
|
||||
{
|
||||
if (obj is MoveButtonFlyout menu)
|
||||
// We don't expect this, but it crashes startup.
|
||||
// Just to be on the safe side.
|
||||
if (item.FolderName != null)
|
||||
{
|
||||
menu.InitializeMenu();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void InitializeMenu()
|
||||
{
|
||||
Dispose();
|
||||
|
||||
Items.Clear();
|
||||
|
||||
if (Folders == null || !Folders.Any())
|
||||
return;
|
||||
|
||||
// TODO: Child folders.
|
||||
|
||||
foreach (var item in Folders)
|
||||
{
|
||||
// We don't expect this, but it crashes startup.
|
||||
// Just to be on the safe side.
|
||||
if (item.FolderName != null)
|
||||
var folderMenuItem = new MenuFlyoutItem()
|
||||
{
|
||||
var folderMenuItem = new MenuFlyoutItem()
|
||||
{
|
||||
Tag = item,
|
||||
Text = item.FolderName
|
||||
};
|
||||
Tag = item,
|
||||
Text = item.FolderName
|
||||
};
|
||||
|
||||
folderMenuItem.Click += MenuItemClicked;
|
||||
folderMenuItem.Click += MenuItemClicked;
|
||||
|
||||
Items.Add(folderMenuItem);
|
||||
}
|
||||
Items.Add(folderMenuItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void MenuItemClicked(object sender, RoutedEventArgs e)
|
||||
private void MenuItemClicked(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var clickedFolder = (sender as MenuFlyoutItem).Tag as MailItemFolder;
|
||||
|
||||
MenuItemClick?.Invoke(this, new MoveButtonMenuItemClickedEventArgs()
|
||||
{
|
||||
var clickedFolder = (sender as MenuFlyoutItem).Tag as MailItemFolder;
|
||||
ClickedFolderId = clickedFolder.Id
|
||||
});
|
||||
}
|
||||
|
||||
MenuItemClick?.Invoke(this, new MoveButtonMenuItemClickedEventArgs()
|
||||
{
|
||||
ClickedFolderId = clickedFolder.Id
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
foreach (var item in Items)
|
||||
if (item is MenuFlyoutItem menuItem)
|
||||
{
|
||||
if (item is MenuFlyoutItem menuItem)
|
||||
{
|
||||
menuItem.Click -= MenuItemClicked;
|
||||
}
|
||||
menuItem.Click -= MenuItemClicked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,47 +3,46 @@ using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Windows.UI.Xaml.Controls;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public partial class WinoOperationFlyout<TActionType> : MenuFlyout, IDisposable where TActionType : class
|
||||
{
|
||||
public partial class WinoOperationFlyout<TActionType> : MenuFlyout, IDisposable where TActionType : class
|
||||
public TActionType ClickedOperation { get; set; }
|
||||
|
||||
protected readonly IEnumerable<TActionType> AvailableActions;
|
||||
|
||||
private readonly TaskCompletionSource<TActionType> _completionSource;
|
||||
|
||||
public WinoOperationFlyout(IEnumerable<TActionType> availableActions, TaskCompletionSource<TActionType> completionSource)
|
||||
{
|
||||
public TActionType ClickedOperation { get; set; }
|
||||
_completionSource = completionSource;
|
||||
|
||||
protected readonly IEnumerable<TActionType> AvailableActions;
|
||||
AvailableActions = availableActions;
|
||||
|
||||
private readonly TaskCompletionSource<TActionType> _completionSource;
|
||||
Closing += FlyoutClosing;
|
||||
}
|
||||
|
||||
public WinoOperationFlyout(IEnumerable<TActionType> availableActions, TaskCompletionSource<TActionType> completionSource)
|
||||
private void FlyoutClosing(Windows.UI.Xaml.Controls.Primitives.FlyoutBase sender, Windows.UI.Xaml.Controls.Primitives.FlyoutBaseClosingEventArgs args)
|
||||
{
|
||||
Closing -= FlyoutClosing;
|
||||
|
||||
_completionSource.TrySetResult(ClickedOperation);
|
||||
}
|
||||
|
||||
protected void MenuItemClicked(TActionType operation)
|
||||
{
|
||||
ClickedOperation = operation;
|
||||
|
||||
Hide();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var item in Items)
|
||||
{
|
||||
_completionSource = completionSource;
|
||||
|
||||
AvailableActions = availableActions;
|
||||
|
||||
Closing += FlyoutClosing;
|
||||
}
|
||||
|
||||
private void FlyoutClosing(Windows.UI.Xaml.Controls.Primitives.FlyoutBase sender, Windows.UI.Xaml.Controls.Primitives.FlyoutBaseClosingEventArgs args)
|
||||
{
|
||||
Closing -= FlyoutClosing;
|
||||
|
||||
_completionSource.TrySetResult(ClickedOperation);
|
||||
}
|
||||
|
||||
protected void MenuItemClicked(TActionType operation)
|
||||
{
|
||||
ClickedOperation = operation;
|
||||
|
||||
Hide();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var item in Items)
|
||||
if (item is IDisposable disposableItem)
|
||||
{
|
||||
if (item is IDisposable disposableItem)
|
||||
{
|
||||
disposableItem.Dispose();
|
||||
}
|
||||
disposableItem.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,52 +7,51 @@ using Wino.Core.Domain.Models.Menus;
|
||||
using Wino.Core.UWP.Controls;
|
||||
using Wino.Helpers;
|
||||
|
||||
namespace Wino.MenuFlyouts
|
||||
namespace Wino.MenuFlyouts;
|
||||
|
||||
public partial class WinoOperationFlyoutItem<TOperationMenuItem> : MenuFlyoutItem, IDisposable where TOperationMenuItem : IMenuOperation
|
||||
{
|
||||
public partial class WinoOperationFlyoutItem<TOperationMenuItem> : MenuFlyoutItem, IDisposable where TOperationMenuItem : IMenuOperation
|
||||
private const double CustomHeight = 35;
|
||||
|
||||
public TOperationMenuItem Operation { get; set; }
|
||||
Action<TOperationMenuItem> Clicked { get; set; }
|
||||
|
||||
public WinoOperationFlyoutItem(TOperationMenuItem operationMenuItem, Action<TOperationMenuItem> clicked)
|
||||
{
|
||||
private const double CustomHeight = 35;
|
||||
Margin = new Thickness(4, 2, 4, 2);
|
||||
CornerRadius = new CornerRadius(6, 6, 6, 6);
|
||||
|
||||
public TOperationMenuItem Operation { get; set; }
|
||||
Action<TOperationMenuItem> Clicked { get; set; }
|
||||
MinHeight = CustomHeight;
|
||||
|
||||
public WinoOperationFlyoutItem(TOperationMenuItem operationMenuItem, Action<TOperationMenuItem> clicked)
|
||||
Operation = operationMenuItem;
|
||||
IsEnabled = operationMenuItem.IsEnabled;
|
||||
|
||||
if (Operation is FolderOperationMenuItem folderOperationMenuItem)
|
||||
{
|
||||
Margin = new Thickness(4, 2, 4, 2);
|
||||
CornerRadius = new CornerRadius(6, 6, 6, 6);
|
||||
var internalOperation = folderOperationMenuItem.Operation;
|
||||
|
||||
MinHeight = CustomHeight;
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetPathGeometry(internalOperation) };
|
||||
Text = XamlHelpers.GetOperationString(internalOperation);
|
||||
}
|
||||
else if (Operation is MailOperationMenuItem mailOperationMenuItem)
|
||||
{
|
||||
var internalOperation = mailOperationMenuItem.Operation;
|
||||
|
||||
Operation = operationMenuItem;
|
||||
IsEnabled = operationMenuItem.IsEnabled;
|
||||
|
||||
if (Operation is FolderOperationMenuItem folderOperationMenuItem)
|
||||
{
|
||||
var internalOperation = folderOperationMenuItem.Operation;
|
||||
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetPathGeometry(internalOperation) };
|
||||
Text = XamlHelpers.GetOperationString(internalOperation);
|
||||
}
|
||||
else if (Operation is MailOperationMenuItem mailOperationMenuItem)
|
||||
{
|
||||
var internalOperation = mailOperationMenuItem.Operation;
|
||||
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(internalOperation) };
|
||||
Text = XamlHelpers.GetOperationString(internalOperation);
|
||||
}
|
||||
|
||||
Clicked = clicked;
|
||||
Click += MenuClicked;
|
||||
Icon = new WinoFontIcon() { Icon = XamlHelpers.GetWinoIconGlyph(internalOperation) };
|
||||
Text = XamlHelpers.GetOperationString(internalOperation);
|
||||
}
|
||||
|
||||
private void MenuClicked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
||||
{
|
||||
Clicked(Operation);
|
||||
}
|
||||
Clicked = clicked;
|
||||
Click += MenuClicked;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Click -= MenuClicked;
|
||||
}
|
||||
private void MenuClicked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
|
||||
{
|
||||
Clicked(Operation);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Click -= MenuClicked;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user